├── .deploystack ├── docker-compose.yml └── env ├── .dockerignore ├── .editorconfig ├── .env.dev ├── .env.docker.production ├── .env.example ├── .env.sqlite.production ├── .gitattributes ├── .github ├── DISCUSSION_TEMPLATE │ └── support.yml ├── FUNDING.yml ├── ISSUE_TEMPLATE │ ├── bug_report.yml │ └── config.yml ├── dependabot.yml └── workflows │ ├── build-docker.yml │ ├── build-package.yml │ └── test.yml ├── .gitignore ├── CONTRIBUTING.md ├── LICENSE.md ├── README.md ├── SECURITY.md ├── app ├── Actions │ ├── Fortify │ │ ├── CreateNewUser.php │ │ ├── CreateUserInvitation.php │ │ ├── PasswordValidationRules.php │ │ ├── ResetUserPassword.php │ │ ├── UpdateUserPassword.php │ │ └── UpdateUserProfileInformation.php │ ├── ImportHtmlBookmarks.php │ └── Settings │ │ └── SetDefaultSettingsForUser.php ├── Audits │ └── Modifiers │ │ ├── BooleanModifier.php │ │ ├── DarkmodeSettingModifier.php │ │ ├── DisplayModeSettingModifier.php │ │ ├── LinkStatusModifier.php │ │ ├── ListRelationModifier.php │ │ ├── LocaleSettingModifier.php │ │ ├── ModifierInterface.php │ │ ├── RedactedModifier.php │ │ ├── TagRelationModifier.php │ │ └── VisibilityModifier.php ├── Console │ ├── Commands │ │ ├── AsksForUser.php │ │ ├── CheckLinksCommand.php │ │ ├── CheckMailCommand.php │ │ ├── CompleteSetupCommand.php │ │ ├── ImportCommand.php │ │ ├── ListUsersCommand.php │ │ ├── RegisterUserCommand.php │ │ ├── ResetPasswordCommand.php │ │ ├── UpdateLinkThumbnails.php │ │ └── ViewRecoveryCodesCommand.php │ └── Kernel.php ├── Enums │ ├── ActivityLog.php │ ├── ApiToken.php │ ├── ModelAttribute.php │ ├── Permission.php │ └── Role.php ├── Exceptions │ └── Handler.php ├── Helper │ ├── HtmlMeta.php │ ├── LinkIconMapper.php │ ├── Sharing.php │ ├── UpdateHelper.php │ ├── WaybackMachine.php │ └── functions.php ├── Http │ ├── Controllers │ │ ├── API │ │ │ ├── BulkEditController.php │ │ │ ├── BulkStoreController.php │ │ │ ├── LinkCheckController.php │ │ │ ├── LinkController.php │ │ │ ├── LinkNotesController.php │ │ │ ├── ListController.php │ │ │ ├── ListLinksController.php │ │ │ ├── NoteController.php │ │ │ ├── SearchController.php │ │ │ ├── TagController.php │ │ │ ├── TagLinksController.php │ │ │ └── TrashController.php │ │ ├── Admin │ │ │ ├── ApiTokenController.php │ │ │ ├── AuditController.php │ │ │ ├── SystemSettingsController.php │ │ │ └── UserManagementController.php │ │ ├── App │ │ │ ├── ApiTokenController.php │ │ │ ├── BookmarkletController.php │ │ │ ├── DashboardController.php │ │ │ ├── ExportController.php │ │ │ ├── FeedController.php │ │ │ ├── ImportController.php │ │ │ ├── SearchController.php │ │ │ ├── TrashController.php │ │ │ └── UserSettingsController.php │ │ ├── ContactController.php │ │ ├── Controller.php │ │ ├── CronController.php │ │ ├── FetchController.php │ │ ├── FrontController.php │ │ ├── Guest │ │ │ ├── FeedController.php │ │ │ ├── LinkController.php │ │ │ ├── ListController.php │ │ │ ├── TagController.php │ │ │ └── UserController.php │ │ ├── Models │ │ │ ├── BulkEditController.php │ │ │ ├── LinkController.php │ │ │ ├── ListController.php │ │ │ ├── NoteController.php │ │ │ ├── TagController.php │ │ │ └── UserController.php │ │ ├── RegistrationController.php │ │ ├── Setup │ │ │ ├── AccountController.php │ │ │ ├── DatabaseController.php │ │ │ ├── MetaController.php │ │ │ └── RequirementsController.php │ │ ├── SocialiteController.php │ │ └── Traits │ │ │ ├── ChecksOrdering.php │ │ │ ├── ConfiguresLinkDisplay.php │ │ │ ├── HandlesQueryOrder.php │ │ │ └── SearchesLinks.php │ ├── Kernel.php │ ├── Middleware │ │ ├── ApiHeaderValidationMiddleware.php │ │ ├── Authenticate.php │ │ ├── BookmarkRedirectMiddleware.php │ │ ├── CheckForMaintenanceMode.php │ │ ├── EncryptCookies.php │ │ ├── GuestAccess.php │ │ ├── PreventRequestsDuringMaintenance.php │ │ ├── RedirectIfAuthenticated.php │ │ ├── SettingsMiddleware.php │ │ ├── SetupCheckMiddleware.php │ │ ├── TrimStrings.php │ │ ├── TrustHosts.php │ │ ├── TrustProxies.php │ │ └── VerifyCsrfToken.php │ └── Requests │ │ ├── Admin │ │ ├── CreateSystemApiTokenRequest.php │ │ ├── InviteUserRequest.php │ │ └── UpdateUserRequest.php │ │ ├── Auth │ │ ├── CreateApiTokenRequest.php │ │ └── RegisterRequest.php │ │ ├── DoImportRequest.php │ │ ├── Models │ │ ├── Api │ │ │ ├── BulkDeleteRequest.php │ │ │ ├── BulkEditLinksRequest.php │ │ │ ├── BulkEditListsRequest.php │ │ │ ├── BulkEditTagsRequest.php │ │ │ ├── BulkStoreLinksRequest.php │ │ │ ├── BulkStoreListsRequest.php │ │ │ └── BulkStoreTagsRequest.php │ │ ├── BulkDeleteRequest.php │ │ ├── BulkEditFormRequest.php │ │ ├── BulkEditLinksRequest.php │ │ ├── BulkEditListsRequest.php │ │ ├── BulkEditTagsRequest.php │ │ ├── LinkStoreRequest.php │ │ ├── LinkUpdateRequest.php │ │ ├── ListStoreRequest.php │ │ ├── ListUpdateRequest.php │ │ ├── NoteStoreRequest.php │ │ ├── NoteUpdateRequest.php │ │ ├── TagStoreRequest.php │ │ ├── TagUpdateRequest.php │ │ └── ToggleLinkCheckRequest.php │ │ ├── SearchRequest.php │ │ ├── SetupDatabaseRequest.php │ │ ├── SystemSettingsUpdateRequest.php │ │ ├── TrashClearRequest.php │ │ ├── TrashRestoreRequest.php │ │ └── UserSettingsUpdateRequest.php ├── Jobs │ ├── ImportLinkJob.php │ └── SaveLinkToWaybackmachine.php ├── Listeners │ └── SavingSettingsListener.php ├── Mail │ └── TestConfigurationMail.php ├── Models │ ├── Api │ │ ├── ApiLink.php │ │ ├── ApiLinkList.php │ │ ├── ApiNote.php │ │ └── ApiTag.php │ ├── Link.php │ ├── LinkList.php │ ├── Note.php │ ├── ProvidesTaxonomyOutput.php │ ├── ScopesForUser.php │ ├── ScopesVisibility.php │ ├── Tag.php │ ├── User.php │ └── UserInvitation.php ├── Notifications │ ├── LinkCheckNotification.php │ └── UserInviteNotification.php ├── Policies │ ├── Api │ │ ├── ApiLinkPolicy.php │ │ ├── AuthorizesUserApiActions.php │ │ ├── LinkListApiPolicy.php │ │ ├── NoteApiPolicy.php │ │ └── TagApiPolicy.php │ ├── ApiTokenPolicy.php │ ├── LinkListPolicy.php │ ├── LinkPolicy.php │ ├── NotePolicy.php │ └── TagPolicy.php ├── Providers │ ├── AppServiceProvider.php │ ├── AuthServiceProvider.php │ ├── BroadcastServiceProvider.php │ ├── EventServiceProvider.php │ ├── FortifyServiceProvider.php │ └── RouteServiceProvider.php ├── Repositories │ ├── LinkRepository.php │ ├── ListRepository.php │ ├── NoteRepository.php │ ├── TagRepository.php │ └── TrashRepository.php ├── Rules │ ├── ApiTokenAbilityRule.php │ └── ModelVisibility.php ├── Scopes │ └── OrderNameScope.php ├── Settings │ ├── GuestSettings.php │ ├── SettingsAudit.php │ ├── SystemSettings.php │ └── UserSettings.php └── View │ └── Components │ ├── Forms │ └── VisibilityToggle.php │ └── History │ ├── ActivityEntry.php │ ├── LinkEntry.php │ ├── ListEntry.php │ ├── ProcessesHistory.php │ ├── SettingsEntry.php │ ├── TagEntry.php │ └── UserEntry.php ├── artisan ├── bootstrap ├── app.php └── cache │ └── .gitignore ├── composer.json ├── composer.lock ├── config ├── activitylog.php ├── app.php ├── audit.php ├── auth.php ├── backup.php ├── broadcasting.php ├── cache.php ├── cors.php ├── database.php ├── filesystems.php ├── fortify.php ├── hashing.php ├── html-meta.php ├── linkace.php ├── logging.php ├── mail.php ├── permission.php ├── queue.php ├── sanctum.php ├── sentry.php ├── services.php ├── session.php ├── settings.php ├── sharing.php └── view.php ├── crowdin.yml ├── database ├── .gitignore ├── factories │ ├── LinkFactory.php │ ├── LinkListFactory.php │ ├── NoteFactory.php │ ├── TagFactory.php │ └── UserFactory.php ├── migrations │ ├── 2019_12_14_000001_create_personal_access_tokens_table.php │ ├── 2022_05_04_223548_create_audits_table.php │ ├── 2022_05_06_083242_create_permission_tables.php │ ├── 2022_06_21_160949_create_activity_log_table.php │ ├── 2022_06_22_115434_create_settings_table.php │ ├── 2022_06_23_112431_migrate_user_data.php │ ├── 2022_07_01_073528_add_user_invitations.php │ ├── 2024_09_16_201436_add_oauth_to_users.php │ ├── 2024_10_06_211654_update_failed_jobs_table.php │ └── 2025_01_12_214138_add_last_check_date_to_links.php ├── schema │ ├── mysql-schema.dump │ ├── pgsql-schema.sql │ └── sqlite-schema.dump ├── seeders │ ├── DatabaseSeeder.php │ ├── ExampleSeeder.php │ └── RolesAndPermissionsSeeder.php └── settings │ ├── 2022_06_22_124112_migrate_existing_settings.php │ ├── 2022_06_22_130000_extend_system_settings.php │ ├── 2025_02_15_092008_add_bluesky_share_method.php │ └── 2025_02_16_092049_fix_bluesky_share_method.php ├── deploy ├── README.md └── linkace │ ├── .env.k8s │ ├── .helmignore │ ├── Chart.yaml │ ├── templates │ ├── NOTES.txt │ ├── _helpers.tpl │ ├── cronjob.yaml │ ├── deployment.yaml │ ├── hpa.yaml │ ├── ingress.yaml │ ├── pvc.yaml │ ├── secret.yaml │ ├── service.yaml │ ├── serviceaccount.yaml │ └── tests │ │ └── test-connection.yaml │ └── values.yaml ├── docker-compose.production.yml ├── docker-compose.yml ├── lang ├── ca_ES │ ├── admin.php │ ├── attributes.php │ ├── audit.php │ ├── auth.php │ ├── export.php │ ├── import.php │ ├── link.php │ ├── linkace.php │ ├── list.php │ ├── note.php │ ├── pagination.php │ ├── passwords.php │ ├── placeholder.php │ ├── search.php │ ├── settings.php │ ├── setup.php │ ├── sharing.php │ ├── stats.php │ ├── tag.php │ ├── trash.php │ ├── user.php │ └── validation.php ├── de_DE │ ├── admin.php │ ├── attributes.php │ ├── audit.php │ ├── auth.php │ ├── export.php │ ├── import.php │ ├── link.php │ ├── linkace.php │ ├── list.php │ ├── note.php │ ├── pagination.php │ ├── passwords.php │ ├── placeholder.php │ ├── search.php │ ├── settings.php │ ├── setup.php │ ├── sharing.php │ ├── stats.php │ ├── tag.php │ ├── trash.php │ ├── user.php │ └── validation.php ├── en_US │ ├── admin.php │ ├── attributes.php │ ├── audit.php │ ├── auth.php │ ├── export.php │ ├── import.php │ ├── link.php │ ├── linkace.php │ ├── list.php │ ├── note.php │ ├── pagination.php │ ├── passwords.php │ ├── placeholder.php │ ├── search.php │ ├── settings.php │ ├── setup.php │ ├── sharing.php │ ├── stats.php │ ├── tag.php │ ├── trash.php │ ├── user.php │ └── validation.php ├── es_ES │ ├── admin.php │ ├── attributes.php │ ├── audit.php │ ├── auth.php │ ├── export.php │ ├── import.php │ ├── link.php │ ├── linkace.php │ ├── list.php │ ├── note.php │ ├── pagination.php │ ├── passwords.php │ ├── placeholder.php │ ├── search.php │ ├── settings.php │ ├── setup.php │ ├── sharing.php │ ├── stats.php │ ├── tag.php │ ├── trash.php │ ├── user.php │ └── validation.php ├── fr_FR │ ├── admin.php │ ├── attributes.php │ ├── audit.php │ ├── auth.php │ ├── export.php │ ├── import.php │ ├── link.php │ ├── linkace.php │ ├── list.php │ ├── note.php │ ├── pagination.php │ ├── passwords.php │ ├── placeholder.php │ ├── search.php │ ├── settings.php │ ├── setup.php │ ├── sharing.php │ ├── stats.php │ ├── tag.php │ ├── trash.php │ ├── user.php │ └── validation.php ├── hu_HU │ ├── admin.php │ ├── attributes.php │ ├── audit.php │ ├── auth.php │ ├── export.php │ ├── import.php │ ├── link.php │ ├── linkace.php │ ├── list.php │ ├── note.php │ ├── pagination.php │ ├── passwords.php │ ├── placeholder.php │ ├── search.php │ ├── settings.php │ ├── setup.php │ ├── sharing.php │ ├── stats.php │ ├── tag.php │ ├── trash.php │ ├── user.php │ └── validation.php ├── it_IT │ ├── admin.php │ ├── attributes.php │ ├── audit.php │ ├── auth.php │ ├── export.php │ ├── import.php │ ├── link.php │ ├── linkace.php │ ├── list.php │ ├── note.php │ ├── pagination.php │ ├── passwords.php │ ├── placeholder.php │ ├── search.php │ ├── settings.php │ ├── setup.php │ ├── sharing.php │ ├── stats.php │ ├── tag.php │ ├── trash.php │ ├── user.php │ └── validation.php ├── ja_JP │ ├── admin.php │ ├── attributes.php │ ├── audit.php │ ├── auth.php │ ├── export.php │ ├── import.php │ ├── link.php │ ├── linkace.php │ ├── list.php │ ├── note.php │ ├── pagination.php │ ├── passwords.php │ ├── placeholder.php │ ├── search.php │ ├── settings.php │ ├── setup.php │ ├── sharing.php │ ├── stats.php │ ├── tag.php │ ├── trash.php │ ├── user.php │ └── validation.php ├── nl_NL │ ├── admin.php │ ├── attributes.php │ ├── audit.php │ ├── auth.php │ ├── export.php │ ├── import.php │ ├── link.php │ ├── linkace.php │ ├── list.php │ ├── note.php │ ├── pagination.php │ ├── passwords.php │ ├── placeholder.php │ ├── search.php │ ├── settings.php │ ├── setup.php │ ├── sharing.php │ ├── stats.php │ ├── tag.php │ ├── trash.php │ ├── user.php │ └── validation.php ├── no_NO │ ├── admin.php │ ├── attributes.php │ ├── audit.php │ ├── auth.php │ ├── export.php │ ├── import.php │ ├── link.php │ ├── linkace.php │ ├── list.php │ ├── note.php │ ├── pagination.php │ ├── passwords.php │ ├── placeholder.php │ ├── search.php │ ├── settings.php │ ├── setup.php │ ├── sharing.php │ ├── stats.php │ ├── tag.php │ ├── trash.php │ ├── user.php │ └── validation.php ├── pl_PL │ ├── admin.php │ ├── attributes.php │ ├── audit.php │ ├── auth.php │ ├── export.php │ ├── import.php │ ├── link.php │ ├── linkace.php │ ├── list.php │ ├── note.php │ ├── pagination.php │ ├── passwords.php │ ├── placeholder.php │ ├── search.php │ ├── settings.php │ ├── setup.php │ ├── sharing.php │ ├── stats.php │ ├── tag.php │ ├── trash.php │ ├── user.php │ └── validation.php ├── pt_PT │ ├── admin.php │ ├── attributes.php │ ├── audit.php │ ├── auth.php │ ├── export.php │ ├── import.php │ ├── link.php │ ├── linkace.php │ ├── list.php │ ├── note.php │ ├── pagination.php │ ├── passwords.php │ ├── placeholder.php │ ├── search.php │ ├── settings.php │ ├── setup.php │ ├── sharing.php │ ├── stats.php │ ├── tag.php │ ├── trash.php │ ├── user.php │ └── validation.php ├── ro_RO │ ├── admin.php │ ├── attributes.php │ ├── audit.php │ ├── auth.php │ ├── export.php │ ├── import.php │ ├── link.php │ ├── linkace.php │ ├── list.php │ ├── note.php │ ├── pagination.php │ ├── passwords.php │ ├── placeholder.php │ ├── search.php │ ├── settings.php │ ├── setup.php │ ├── sharing.php │ ├── stats.php │ ├── tag.php │ ├── trash.php │ ├── user.php │ └── validation.php ├── ru_RU │ ├── admin.php │ ├── attributes.php │ ├── audit.php │ ├── auth.php │ ├── export.php │ ├── import.php │ ├── link.php │ ├── linkace.php │ ├── list.php │ ├── note.php │ ├── pagination.php │ ├── passwords.php │ ├── placeholder.php │ ├── search.php │ ├── settings.php │ ├── setup.php │ ├── sharing.php │ ├── stats.php │ ├── tag.php │ ├── trash.php │ ├── user.php │ └── validation.php ├── sv_SE │ ├── admin.php │ ├── attributes.php │ ├── audit.php │ ├── auth.php │ ├── export.php │ ├── import.php │ ├── link.php │ ├── linkace.php │ ├── list.php │ ├── note.php │ ├── pagination.php │ ├── passwords.php │ ├── placeholder.php │ ├── search.php │ ├── settings.php │ ├── setup.php │ ├── sharing.php │ ├── stats.php │ ├── tag.php │ ├── trash.php │ ├── user.php │ └── validation.php ├── vendor │ └── .gitignore ├── vi_VN │ ├── auth.php │ ├── export.php │ ├── import.php │ ├── link.php │ ├── linkace.php │ ├── list.php │ ├── note.php │ ├── pagination.php │ ├── passwords.php │ ├── placeholder.php │ ├── search.php │ ├── settings.php │ ├── setup.php │ ├── sharing.php │ ├── stats.php │ ├── tag.php │ ├── trash.php │ ├── user.php │ └── validation.php └── zh_CN │ ├── admin.php │ ├── attributes.php │ ├── audit.php │ ├── auth.php │ ├── export.php │ ├── import.php │ ├── link.php │ ├── linkace.php │ ├── list.php │ ├── note.php │ ├── pagination.php │ ├── passwords.php │ ├── placeholder.php │ ├── search.php │ ├── settings.php │ ├── setup.php │ ├── sharing.php │ ├── stats.php │ ├── tag.php │ ├── trash.php │ ├── user.php │ └── validation.php ├── package-lock.json ├── package.json ├── phpcs.xml ├── phpunit.xml ├── public ├── .htaccess ├── android-chrome-192x192.png ├── android-chrome-384x384.png ├── apple-touch-icon.png ├── assets │ ├── .gitignore │ ├── fonts │ │ ├── IBMPlexSans-Bold.woff │ │ ├── IBMPlexSans-Bold.woff2 │ │ ├── IBMPlexSans-Regular.woff │ │ ├── IBMPlexSans-Regular.woff2 │ │ ├── IBMPlexSansCondensed-Bold.woff │ │ ├── IBMPlexSansCondensed-Bold.woff2 │ │ ├── IBMPlexSansCondensed-Regular.woff │ │ └── IBMPlexSansCondensed-Regular.woff2 │ └── img │ │ ├── linkace-social.jpg │ │ ├── linkace_logo.svg │ │ └── linkace_logo_padded.png ├── browserconfig.xml ├── favicon-16x16.png ├── favicon-32x32.png ├── favicon.ico ├── favicon.svg ├── index.php ├── manifest.webapp ├── mstile-150x150.png ├── robots.txt ├── safari-pinned-tab.svg └── site.webmanifest ├── ray.php ├── resources ├── assets │ ├── js │ │ ├── app.js │ │ ├── components │ │ │ ├── Base.js │ │ │ ├── BookmarkTimer.js │ │ │ ├── BulkEdit.js │ │ │ ├── GenerateCronToken.js │ │ │ ├── Import.js │ │ │ ├── LoadingButton.js │ │ │ ├── OpenLinksInTabs.js │ │ │ ├── Setup.js │ │ │ ├── ShareToggleAll.js │ │ │ ├── SimpleSelect.js │ │ │ ├── TagsSelect.js │ │ │ ├── UpdateCheck.js │ │ │ └── UrlField.js │ │ └── lib │ │ │ ├── helper.js │ │ │ └── views.js │ └── sass │ │ ├── _fonts.scss │ │ ├── _variables-dark.scss │ │ ├── _variables.scss │ │ ├── app-dark.scss │ │ ├── app.scss │ │ ├── custom │ │ ├── _app.scss │ │ ├── _dark-fixes.scss │ │ ├── _fixes.scss │ │ └── _helper.scss │ │ └── third-party │ │ ├── bootstrap │ │ └── bootstrap5.scss │ │ └── tom-select │ │ ├── _select.scss │ │ ├── _variables-dark.scss │ │ └── _variables.scss ├── docker │ ├── Caddyfile │ ├── dockerfiles │ │ ├── development.Dockerfile │ │ ├── release-base.Dockerfile │ │ └── release-multiplatform.Dockerfile │ ├── php │ │ ├── php-dev.ini │ │ └── php.ini │ ├── ssl.Caddyfile │ └── supervisord.ini └── views │ ├── admin │ ├── api-tokens │ │ ├── index.blade.php │ │ └── show.blade.php │ ├── audit-logs.blade.php │ ├── system-settings │ │ ├── index.blade.php │ │ └── partials │ │ │ ├── cron.blade.php │ │ │ ├── general-settings.blade.php │ │ │ ├── guest-settings.blade.php │ │ │ ├── guest │ │ │ ├── dark-mode.blade.php │ │ │ └── sharing.blade.php │ │ │ └── updates.blade.php │ └── users │ │ ├── edit.blade.php │ │ ├── index.blade.php │ │ ├── partials │ │ ├── invitations.blade.php │ │ └── user-list.blade.php │ │ └── show.blade.php │ ├── app │ ├── api-tokens │ │ └── index.blade.php │ ├── bookmarklet │ │ ├── complete.blade.php │ │ ├── create.blade.php │ │ └── login.blade.php │ ├── contact.blade.php │ ├── export │ │ ├── export.blade.php │ │ └── html-export.blade.php │ ├── feed │ │ ├── links.blade.php │ │ ├── lists.blade.php │ │ └── tags.blade.php │ ├── import │ │ ├── import.blade.php │ │ └── queue.blade.php │ ├── search │ │ ├── partials │ │ │ └── table.blade.php │ │ └── search.blade.php │ ├── settings │ │ ├── partials │ │ │ ├── account-settings.blade.php │ │ │ ├── app-settings.blade.php │ │ │ ├── bookmarklet.blade.php │ │ │ ├── change-pw.blade.php │ │ │ ├── settings │ │ │ │ ├── archive-backups.blade.php │ │ │ │ ├── dark-mode.blade.php │ │ │ │ ├── privacy.blade.php │ │ │ │ └── sharing.blade.php │ │ │ └── two-factor.blade.php │ │ └── user.blade.php │ └── trash │ │ ├── index.blade.php │ │ └── partials │ │ ├── link-table.blade.php │ │ ├── list-table.blade.php │ │ ├── note-table.blade.php │ │ └── tag-table.blade.php │ ├── auth │ ├── confirm-password.blade.php │ ├── login-form.blade.php │ ├── login.blade.php │ ├── oauth.blade.php │ ├── passwords │ │ ├── email.blade.php │ │ └── reset.blade.php │ ├── register.blade.php │ └── two-factor-challenge.blade.php │ ├── components │ ├── forms │ │ ├── visibility-options.blade.php │ │ ├── visibility-toggle.blade.php │ │ └── yes-no-options.blade.php │ ├── history-entry.blade.php │ ├── icon │ │ ├── ban.blade.php │ │ ├── bookmark.blade.php │ │ ├── brand │ │ │ ├── 500px.blade.php │ │ │ ├── amazon.blade.php │ │ │ ├── app-store-ios.blade.php │ │ │ ├── apple.blade.php │ │ │ ├── artstation.blade.php │ │ │ ├── atlassian.blade.php │ │ │ ├── auth0.blade.php │ │ │ ├── authentik.blade.php │ │ │ ├── azure.blade.php │ │ │ ├── bandcamp.blade.php │ │ │ ├── behance.blade.php │ │ │ ├── bitbucket.blade.php │ │ │ ├── bitcoin.blade.php │ │ │ ├── blogger.blade.php │ │ │ ├── bluesky.blade.php │ │ │ ├── buffer.blade.php │ │ │ ├── chrome.blade.php │ │ │ ├── codepen.blade.php │ │ │ ├── cognito.blade.php │ │ │ ├── dev.blade.php │ │ │ ├── deviantart.blade.php │ │ │ ├── discord.blade.php │ │ │ ├── docker.blade.php │ │ │ ├── dribbble.blade.php │ │ │ ├── dropbox.blade.php │ │ │ ├── ebay.blade.php │ │ │ ├── etsy.blade.php │ │ │ ├── evernote.blade.php │ │ │ ├── facebook.blade.php │ │ │ ├── firefox.blade.php │ │ │ ├── flickr.blade.php │ │ │ ├── flipboard.blade.php │ │ │ ├── fusionauth.blade.php │ │ │ ├── get-pocket.blade.php │ │ │ ├── github.blade.php │ │ │ ├── gitlab.blade.php │ │ │ ├── gitter.blade.php │ │ │ ├── google-drive.blade.php │ │ │ ├── google-play.blade.php │ │ │ ├── google.blade.php │ │ │ ├── hacker-news.blade.php │ │ │ ├── imdb.blade.php │ │ │ ├── instagram.blade.php │ │ │ ├── jsfiddle.blade.php │ │ │ ├── keybase.blade.php │ │ │ ├── keycloak.blade.php │ │ │ ├── kickstarter.blade.php │ │ │ ├── lastfm.blade.php │ │ │ ├── linkedin.blade.php │ │ │ ├── mastodon.blade.php │ │ │ ├── medium.blade.php │ │ │ ├── meetup.blade.php │ │ │ ├── microsoft.blade.php │ │ │ ├── mixcloud.blade.php │ │ │ ├── npm.blade.php │ │ │ ├── oidc.blade.php │ │ │ ├── okta.blade.php │ │ │ ├── openid.blade.php │ │ │ ├── patreon.blade.php │ │ │ ├── paypal.blade.php │ │ │ ├── php.blade.php │ │ │ ├── pinterest.blade.php │ │ │ ├── playstation.blade.php │ │ │ ├── product-hunt.blade.php │ │ │ ├── quora.blade.php │ │ │ ├── reddit.blade.php │ │ │ ├── researchgate.blade.php │ │ │ ├── skype.blade.php │ │ │ ├── slack.blade.php │ │ │ ├── slideshare.blade.php │ │ │ ├── sms.blade.php │ │ │ ├── snapchat.blade.php │ │ │ ├── soundcloud.blade.php │ │ │ ├── spotify.blade.php │ │ │ ├── stack-exchange.blade.php │ │ │ ├── stack-overflow.blade.php │ │ │ ├── steam.blade.php │ │ │ ├── telegram.blade.php │ │ │ ├── trello.blade.php │ │ │ ├── tripadvisor.blade.php │ │ │ ├── tumblr.blade.php │ │ │ ├── twitch.blade.php │ │ │ ├── twitter.blade.php │ │ │ ├── vimeo.blade.php │ │ │ ├── weibo.blade.php │ │ │ ├── weixin.blade.php │ │ │ ├── whatsapp.blade.php │ │ │ ├── wikipedia-w.blade.php │ │ │ ├── wordpress.blade.php │ │ │ ├── xing.blade.php │ │ │ ├── yelp.blade.php │ │ │ ├── youtube.blade.php │ │ │ └── zitadel.blade.php │ │ ├── caret-down.blade.php │ │ ├── check.blade.php │ │ ├── cog.blade.php │ │ ├── edit.blade.php │ │ ├── envelope.blade.php │ │ ├── external-link.blade.php │ │ ├── feed.blade.php │ │ ├── file-import.blade.php │ │ ├── info.blade.php │ │ ├── key.blade.php │ │ ├── link.blade.php │ │ ├── linkace-icon.blade.php │ │ ├── linkace.blade.php │ │ ├── list-cards.blade.php │ │ ├── list-detailed.blade.php │ │ ├── list-simple.blade.php │ │ ├── list.blade.php │ │ ├── lock.blade.php │ │ ├── plus.blade.php │ │ ├── recycle.blade.php │ │ ├── reply.blade.php │ │ ├── save.blade.php │ │ ├── search.blade.php │ │ ├── share.blade.php │ │ ├── shield.blade.php │ │ ├── sms.blade.php │ │ ├── sort-down.blade.php │ │ ├── sort-up.blade.php │ │ ├── sort.blade.php │ │ ├── tags.blade.php │ │ ├── toggle-on.blade.php │ │ ├── trash.blade.php │ │ ├── unlink.blade.php │ │ ├── unlock.blade.php │ │ ├── upload.blade.php │ │ └── warning.blade.php │ ├── models │ │ ├── author.blade.php │ │ ├── link-display-toggles.blade.php │ │ ├── link-order-dropdown.blade.php │ │ ├── name-with-user.blade.php │ │ ├── open-all.blade.php │ │ └── visibility-badge.blade.php │ └── update-check.blade.php │ ├── dashboard.blade.php │ ├── errors │ ├── 401.blade.php │ ├── 403.blade.php │ ├── 404.blade.php │ ├── 419.blade.php │ ├── 429.blade.php │ ├── 500.blade.php │ └── 503.blade.php │ ├── guest │ ├── links │ │ ├── index.blade.php │ │ └── partials │ │ │ ├── list-cards.blade.php │ │ │ ├── list-detailed.blade.php │ │ │ ├── list-simple.blade.php │ │ │ ├── single-card.blade.php │ │ │ ├── single-detailed.blade.php │ │ │ └── single-simple.blade.php │ ├── lists │ │ ├── index.blade.php │ │ ├── partials │ │ │ └── single.blade.php │ │ └── show.blade.php │ ├── partials │ │ └── nav.blade.php │ ├── tags │ │ ├── index.blade.php │ │ ├── partials │ │ │ ├── single.blade.php │ │ │ └── table.blade.php │ │ └── show.blade.php │ └── users │ │ └── show.blade.php │ ├── layouts │ ├── app.blade.php │ ├── auth.blade.php │ ├── bookmarklet.blade.php │ ├── errors.blade.php │ ├── guest.blade.php │ ├── partials │ │ ├── favicon.blade.php │ │ ├── footer.blade.php │ │ ├── header.blade.php │ │ └── social-meta.blade.php │ └── setup.blade.php │ ├── mail │ ├── mail-check.blade.php │ └── notifications │ │ └── linkcheck.blade.php │ ├── models │ ├── links │ │ ├── bulk-edit.blade.php │ │ ├── create.blade.php │ │ ├── edit.blade.php │ │ ├── index.blade.php │ │ ├── partials │ │ │ ├── create-form.blade.php │ │ │ ├── link-icon.blade.php │ │ │ ├── list-cards.blade.php │ │ │ ├── list-detailed.blade.php │ │ │ ├── list-simple.blade.php │ │ │ ├── list-toggles.blade.php │ │ │ ├── share-link.blade.php │ │ │ ├── show │ │ │ │ ├── link-details.blade.php │ │ │ │ ├── link-history.blade.php │ │ │ │ ├── link-notes.blade.php │ │ │ │ └── link-taxonomy.blade.php │ │ │ ├── single-card.blade.php │ │ │ ├── single-detailed.blade.php │ │ │ └── single-simple.blade.php │ │ └── show.blade.php │ ├── lists │ │ ├── bulk-edit.blade.php │ │ ├── create.blade.php │ │ ├── edit.blade.php │ │ ├── index.blade.php │ │ ├── partials │ │ │ ├── index-order-dropdown.blade.php │ │ │ ├── show │ │ │ │ ├── details.blade.php │ │ │ │ ├── history.blade.php │ │ │ │ └── links.blade.php │ │ │ └── single.blade.php │ │ └── show.blade.php │ ├── notes │ │ ├── edit.blade.php │ │ └── partials │ │ │ ├── create.blade.php │ │ │ └── single.blade.php │ ├── tags │ │ ├── bulk-edit.blade.php │ │ ├── create.blade.php │ │ ├── edit.blade.php │ │ ├── index.blade.php │ │ ├── partials │ │ │ ├── index-order-dropdown.blade.php │ │ │ ├── show │ │ │ │ ├── details.blade.php │ │ │ │ ├── history.blade.php │ │ │ │ └── links.blade.php │ │ │ ├── single.blade.php │ │ │ └── table.blade.php │ │ └── show.blade.php │ └── users │ │ └── show.blade.php │ ├── partials │ ├── alerts.blade.php │ ├── card-pagination.blade.php │ ├── configure-darkmode.blade.php │ ├── nav-user.blade.php │ ├── nav.blade.php │ └── table-sorter.blade.php │ ├── setup │ ├── account.blade.php │ ├── complete.blade.php │ ├── database.blade.php │ ├── requirements.blade.php │ └── welcome.blade.php │ └── vendor │ └── laravel-log-viewer │ └── log.blade.php ├── routes ├── api.php ├── channels.php └── web.php ├── storage ├── app │ ├── .gitignore │ ├── backup-temp │ │ └── .gitignore │ ├── backups │ │ └── .gitignore │ ├── public │ │ └── .gitignore │ └── temp │ │ └── .gitignore ├── debugbar │ └── .gitignore ├── framework │ ├── .gitignore │ ├── cache │ │ └── .gitignore │ ├── sessions │ │ └── .gitignore │ ├── testing │ │ └── .gitignore │ └── views │ │ └── .gitignore └── logs │ └── .gitignore ├── tests ├── Commands │ ├── CheckLinksCommandTest.php │ ├── ListUsersCommandTest.php │ ├── RegisterUserCommandTest.php │ ├── ResetPasswordCommandTest.php │ └── ViewRecoveryCodesCommandTest.php ├── Components │ └── History │ │ ├── LinkEntryTest.php │ │ ├── ListEntryTest.php │ │ ├── SettingsEntryTest.php │ │ ├── TagEntryTest.php │ │ └── UserEntryTest.php ├── Controller │ ├── API │ │ ├── ApiTestCase.php │ │ ├── BulkEditApiTest.php │ │ ├── BulkStoreApiTest.php │ │ ├── GeneralApiTest.php │ │ ├── LinkApiTest.php │ │ ├── LinkCheckApiTest.php │ │ ├── LinkNotesTest.php │ │ ├── ListApiTest.php │ │ ├── ListLinksTest.php │ │ ├── NoteApiTest.php │ │ ├── SearchLinksTest.php │ │ ├── SearchListsTest.php │ │ ├── SearchTagsTest.php │ │ ├── TagApiTest.php │ │ ├── TagLinksTest.php │ │ └── TrashApiTest.php │ ├── App │ │ ├── ApiTokenControllerTest.php │ │ ├── AuditControllerTest.php │ │ ├── BookmarkletControllerTest.php │ │ ├── CronControllerTest.php │ │ ├── DashboardControllerTest.php │ │ ├── ExportControllerTest.php │ │ ├── FeedControllerTest.php │ │ ├── ImportControllerTest.php │ │ ├── SearchControllerTest.php │ │ ├── SystemSettingsControllerTest.php │ │ ├── TrashControllerTest.php │ │ ├── UserManagementControllerTest.php │ │ ├── UserSettingsControllerTest.php │ │ └── data │ │ │ └── import_example.html │ ├── Auth │ │ ├── LoginControllerTest.php │ │ ├── PasswordResetTest.php │ │ ├── RegisterControllerTest.php │ │ ├── TwoFactorTest.php │ │ └── VariousAuthenticationTest.php │ ├── FetchControllerTest.php │ ├── Guest │ │ ├── FeedControllerTest.php │ │ ├── GuestControllerTest.php │ │ ├── LinkControllerTest.php │ │ ├── ListControllerTest.php │ │ ├── TagControllerTest.php │ │ └── UserControllerTest.php │ ├── Models │ │ ├── BulkEditControllerTest.php │ │ ├── LinkControllerTest.php │ │ ├── ListControllerTest.php │ │ ├── NoteControllerTest.php │ │ ├── TagControllerTest.php │ │ └── UserControllerTest.php │ ├── Setup │ │ └── MetaControllerTest.php │ ├── SocialiteControllerTest.php │ └── Traits │ │ ├── PreparesTestData.php │ │ └── PreparesTrash.php ├── CreatesApplication.php ├── Database │ └── ExampleSeedingTest.php ├── Helper │ ├── HelperFunctionsTest.php │ ├── HtmlMetaHelperTest.php │ ├── SharingTest.php │ ├── UpdateCheckTest.php │ └── WaybackMachineTest.php ├── Middleware │ └── ContentTypeHeaderValidationMiddlewareTest.php ├── Migrations │ ├── MigratesUpTo.php │ ├── RevisionsToAuditsMigrationTest.php │ └── UserDataMigrationTest.php ├── Models │ ├── Link │ │ ├── DuplicateSearchTest.php │ │ └── LinkTaxonomyTest.php │ ├── LinkCreateTest.php │ ├── LinkDeleteTest.php │ ├── LinkUpdateTest.php │ ├── ListCreateTest.php │ ├── ListDeleteTest.php │ ├── ListUpdateTest.php │ ├── NoteCreateTest.php │ ├── NoteDeleteTest.php │ ├── NoteUpdateTest.php │ ├── TagCreateTest.php │ ├── TagDeleteTest.php │ └── TagUpdateTest.php └── TestCase.php └── webpack.mix.js /.deploystack/env: -------------------------------------------------------------------------------- 1 | DB_PASSWORD="ChangeThisToASecurePassword!" 2 | DB_USERNAME="linkace" 3 | DB_DATABASE=linkace 4 | -------------------------------------------------------------------------------- /.dockerignore: -------------------------------------------------------------------------------- 1 | .env 2 | _ide_* 3 | /.git 4 | /.idea 5 | /.tmp 6 | /database/*.sqlite 7 | /storage/app/backups/* 8 | /storage/debugbar/* 9 | /storage/framework/cache/* 10 | /storage/framework/sessions/* 11 | /storage/framework/testing/* 12 | /storage/framework/views/* 13 | /storage/logs/* 14 | /node_modules 15 | /vendor 16 | -------------------------------------------------------------------------------- /.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 = 2 9 | trim_trailing_whitespace = true 10 | 11 | [*.md] 12 | trim_trailing_whitespace = false 13 | 14 | [*.php] 15 | indent_size = 4 16 | -------------------------------------------------------------------------------- /.env.sqlite.production: -------------------------------------------------------------------------------- 1 | ## LINKACE CONFIGURATION 2 | 3 | ## Basic app configuration 4 | # The app key is generated later, please leave it like that 5 | APP_KEY=someRandomStringWith32Characters 6 | 7 | ## Configuration of the database connection 8 | # Set the database driver (mysql, pgsql, sqlsrv, sqlite) 9 | DB_CONNECTION=sqlite 10 | # Set the database name (MySQL, Postgres,...) or path (SQLite) here 11 | DB_DATABASE=/app/database/database.sqlite 12 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto 2 | *.css linguist-vendored 3 | *.scss linguist-vendored 4 | *.js linguist-vendored 5 | CHANGELOG.md export-ignore 6 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | github: kovah 3 | patreon: Kovah 4 | open_collective: linkace 5 | liberapay: kovah 6 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | contact_links: 2 | - name: Feature Requests 3 | url: https://github.com/Kovah/LinkAce/discussions/categories/ideas-feature-requests 4 | about: Do you have an idea how to improve LinkAce? Feel free to post it to the discussion forum that allows voting for other users. 5 | - name: Help & Support 6 | url: https://github.com/Kovah/LinkAce/discussions/categories/support 7 | about: Need help with installation or usage of LinkAce? Please use the discussion forum. 8 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules 2 | /logs 3 | /public/hot 4 | /public/storage 5 | /public/mix-manifest.json 6 | /storage/*.key 7 | /tests/Controller/logs 8 | /vendor 9 | /.idea 10 | /.tmp 11 | /.vscode 12 | /.vagrant 13 | /.phpunit.cache 14 | Homestead.json 15 | Homestead.yaml 16 | npm-debug.log 17 | yarn-error.log 18 | .env 19 | .env.* 20 | !.env.dev 21 | !.env.docker.production 22 | !.env.sqlite.production 23 | !.env.example 24 | !.env.k8s 25 | .phpunit.result.cache 26 | _ide_helper.php 27 | _ide_helper_models.php 28 | -------------------------------------------------------------------------------- /app/Actions/Fortify/CreateUserInvitation.php: -------------------------------------------------------------------------------- 1 | Str::random(32), 14 | 'email' => $email, 15 | 'inviter_id' => auth()->id(), 16 | 'valid_until' => now()->addDays(3), 17 | ]); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /app/Actions/Fortify/PasswordValidationRules.php: -------------------------------------------------------------------------------- 1 | self::passwordRules(), 18 | ])->validate(); 19 | 20 | $user->forceFill([ 21 | 'password' => Hash::make($input['password']), 22 | ])->save(); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/Audits/Modifiers/BooleanModifier.php: -------------------------------------------------------------------------------- 1 | trans('settings.darkmode_disabled'), 11 | 1 => trans('settings.darkmode_permanent'), 12 | 2 => trans('settings.darkmode_auto'), 13 | }; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /app/Audits/Modifiers/DisplayModeSettingModifier.php: -------------------------------------------------------------------------------- 1 | trans('settings.display_mode_cards'), 11 | 2 => trans('settings.display_mode_list_simple'), 12 | 3 => trans('settings.display_mode_list_detailed'), 13 | }; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /app/Audits/Modifiers/LinkStatusModifier.php: -------------------------------------------------------------------------------- 1 | pluck('name')->join(', ') : null; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /app/Audits/Modifiers/LocaleSettingModifier.php: -------------------------------------------------------------------------------- 1 | $leftOver) ? ($total - $leftOver) : 1; 16 | 17 | return str_pad(substr($value, $length), $total, '#', STR_PAD_LEFT); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /app/Audits/Modifiers/TagRelationModifier.php: -------------------------------------------------------------------------------- 1 | pluck('name')->join(', ') : null; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /app/Audits/Modifiers/VisibilityModifier.php: -------------------------------------------------------------------------------- 1 | trans('attributes.visibility.' . ModelAttribute::VISIBILITY_PUBLIC), 13 | ModelAttribute::VISIBILITY_INTERNAL => trans('attributes.visibility.' . ModelAttribute::VISIBILITY_INTERNAL), 14 | ModelAttribute::VISIBILITY_PRIVATE => trans('attributes.visibility.' . ModelAttribute::VISIBILITY_PRIVATE), 15 | }; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /app/Console/Commands/AsksForUser.php: -------------------------------------------------------------------------------- 1 | ask('Please enter the user email address'); 15 | 16 | $this->user = User::where('email', $email)->first(); 17 | 18 | if (empty($this->user)) { 19 | $this->warn('A user with this email address could not be found!'); 20 | } 21 | } while (empty($this->user)); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /app/Console/Commands/ListUsersCommand.php: -------------------------------------------------------------------------------- 1 | info('Searching for all registered users...'); 17 | 18 | $users = User::query()->notSystem()->get(['id', 'name', 'email']); 19 | 20 | if ($users->isEmpty()) { 21 | $this->info('No users found.'); 22 | return; 23 | } 24 | 25 | $this->table(['ID', 'Name', 'Email'], $users->toArray()); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /app/Enums/ActivityLog.php: -------------------------------------------------------------------------------- 1 | user()->cannot('view', $link)) { 15 | return response()->json(status: 403); 16 | } 17 | 18 | $notes = $link->notes()->visibleForUser()->paginate(getPaginationLimit()); 19 | 20 | return response()->json($notes); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /app/Http/Controllers/API/ListLinksController.php: -------------------------------------------------------------------------------- 1 | user()->cannot('view', $list)) { 15 | return response()->json(status: 403); 16 | } 17 | 18 | $links = $list->links()->paginate(getPaginationLimit()); 19 | 20 | return response()->json($links); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /app/Http/Controllers/API/TagLinksController.php: -------------------------------------------------------------------------------- 1 | user()->cannot('view', $tag)) { 15 | return response()->json(status: 403); 16 | } 17 | 18 | $links = $tag->links()->visibleForUser()->paginate(getPaginationLimit()); 19 | 20 | return response()->json($links); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /app/Http/Controllers/ContactController.php: -------------------------------------------------------------------------------- 1 | contact_page_enabled) { 12 | abort(404); 13 | } 14 | 15 | return view('app.contact', [ 16 | 'title' => $systemSettings->contact_page_title, 17 | 'content' => $systemSettings->contact_page_content, 18 | ]); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /app/Http/Controllers/Controller.php: -------------------------------------------------------------------------------- 1 | trans('setup.setup'), 15 | ]); 16 | } 17 | 18 | public function complete(SystemSettings $settings): View 19 | { 20 | $settings->setup_completed = true; 21 | $settings->save(); 22 | 23 | return view('setup.complete', [ 24 | 'pageTitle' => trans('setup.complete'), 25 | ]); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /app/Http/Controllers/Traits/ChecksOrdering.php: -------------------------------------------------------------------------------- 1 | orderBy = in_array($this->orderBy, $this->allowedOrderBy, true) ? $this->orderBy : 'created_at'; 15 | $this->orderDir = in_array($this->orderDir, ['asc', 'desc']) ? $this->orderDir : 'asc'; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /app/Http/Controllers/Traits/HandlesQueryOrder.php: -------------------------------------------------------------------------------- 1 | input('orderDir'); 12 | return in_array($dir, ['asc', 'desc']) ? $dir : $default; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /app/Http/Middleware/Authenticate.php: -------------------------------------------------------------------------------- 1 | authenticate($request, $guards); 13 | 14 | if (!$request->is('api/*') && $request->user()->isSystemUser()) { 15 | abort(403, trans('user.system_user_locked')); 16 | } 17 | 18 | if ($request->user()->isBlocked()) { 19 | abort(403, trans('user.block_warning')); 20 | } 21 | 22 | return $next($request); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/Http/Middleware/CheckForMaintenanceMode.php: -------------------------------------------------------------------------------- 1 | check()) { 13 | return redirect()->route('dashboard'); 14 | } 15 | 16 | if (systemsettings('guest_access_enabled')) { 17 | return $next($request); 18 | } 19 | 20 | return redirect()->route('login'); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /app/Http/Middleware/PreventRequestsDuringMaintenance.php: -------------------------------------------------------------------------------- 1 | check()) { 15 | return redirect('/dashboard'); 16 | } 17 | 18 | return $next($request); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /app/Http/Middleware/TrimStrings.php: -------------------------------------------------------------------------------- 1 | allSubdomainsOfApplicationUrl(), 18 | ]; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /app/Http/Middleware/VerifyCsrfToken.php: -------------------------------------------------------------------------------- 1 | [ 15 | 'required', 16 | 'alpha_dash', 17 | 'min:3', 18 | 'max:100', 19 | Rule::unique('personal_access_tokens', 'name')->where(function (Builder $query) { 20 | return $query->where('tokenable_id', request()->user()->id); 21 | }), 22 | ], 23 | ]; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /app/Http/Requests/Auth/RegisterRequest.php: -------------------------------------------------------------------------------- 1 | ['required']], CreateNewUser::rules()); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /app/Http/Requests/DoImportRequest.php: -------------------------------------------------------------------------------- 1 | [ 13 | 'required', 14 | 'file', 15 | 'mimes:html,htm', 16 | ], 17 | ]; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /app/Http/Requests/Models/Api/BulkDeleteRequest.php: -------------------------------------------------------------------------------- 1 | ['required', 'in:links,lists,tags'], 13 | 'models' => ['required', 'array'], 14 | ]; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /app/Http/Requests/Models/Api/BulkEditLinksRequest.php: -------------------------------------------------------------------------------- 1 | ['required', 'array'], 14 | 'tags' => ['nullable', 'array'], 15 | 'tags_mode' => ['required_with:tags', 'in:append,replace'], 16 | 'lists' => ['nullable', 'array'], 17 | 'lists_mode' => ['required_with:lists', 'in:append,replace'], 18 | 'visibility' => ['nullable', new ModelVisibility], 19 | ]; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /app/Http/Requests/Models/Api/BulkEditListsRequest.php: -------------------------------------------------------------------------------- 1 | ['required', 'array'], 14 | 'visibility' => ['nullable', new ModelVisibility], 15 | ]; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /app/Http/Requests/Models/Api/BulkEditTagsRequest.php: -------------------------------------------------------------------------------- 1 | ['required', 'array'], 14 | 'visibility' => ['nullable', new ModelVisibility], 15 | ]; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /app/Http/Requests/Models/Api/BulkStoreListsRequest.php: -------------------------------------------------------------------------------- 1 | ['array'], 14 | 'models.*.name' => [ 15 | 'required', 16 | 'string', 17 | ], 18 | 'models.*.description' => [ 19 | 'nullable', 20 | 'string', 21 | ], 22 | 'models.*.visibility' => [ 23 | 'sometimes', 24 | new ModelVisibility(), 25 | ], 26 | ]; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /app/Http/Requests/Models/Api/BulkStoreTagsRequest.php: -------------------------------------------------------------------------------- 1 | ['array'], 15 | 'models.*.name' => [ 16 | 'required', 17 | Rule::unique('tags')->where(fn($query) => $query->where('user_id', auth()->user()->id)), 18 | ], 19 | 'models.*.visibility' => [ 20 | 'sometimes', 21 | new ModelVisibility(), 22 | ], 23 | ]; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /app/Http/Requests/Models/BulkDeleteRequest.php: -------------------------------------------------------------------------------- 1 | ['required', 'in:links,lists,tags'], 13 | 'models' => ['required', 'string'], 14 | ]; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /app/Http/Requests/Models/BulkEditFormRequest.php: -------------------------------------------------------------------------------- 1 | ['required', 'in:links,lists,tags'], 13 | 'models' => ['required', 'string'], 14 | ]; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /app/Http/Requests/Models/BulkEditLinksRequest.php: -------------------------------------------------------------------------------- 1 | ['required', 'string'], 14 | 'tags' => ['nullable', 'string'], 15 | 'tags_mode' => ['required', 'in:append,replace'], 16 | 'lists' => ['nullable', 'string'], 17 | 'lists_mode' => ['required', 'in:append,replace'], 18 | 'visibility' => ['nullable', new ModelVisibility], 19 | ]; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /app/Http/Requests/Models/BulkEditListsRequest.php: -------------------------------------------------------------------------------- 1 | ['required', 'string'], 14 | 'visibility' => ['nullable', new ModelVisibility], 15 | ]; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /app/Http/Requests/Models/BulkEditTagsRequest.php: -------------------------------------------------------------------------------- 1 | ['required', 'string'], 14 | 'visibility' => ['nullable', new ModelVisibility], 15 | ]; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /app/Http/Requests/Models/ListStoreRequest.php: -------------------------------------------------------------------------------- 1 | [ 14 | 'required', 15 | 'string', 16 | ], 17 | 'description' => [ 18 | 'nullable', 19 | 'string', 20 | ], 21 | 'visibility' => [ 22 | 'sometimes', 23 | new ModelVisibility(), 24 | ], 25 | ]; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /app/Http/Requests/Models/NoteUpdateRequest.php: -------------------------------------------------------------------------------- 1 | user()->can('view', $request->route('note')->link); 14 | } 15 | 16 | public function rules(): array 17 | { 18 | return [ 19 | 'note' => [ 20 | 'required', 21 | ], 22 | 'visibility' => [ 23 | 'sometimes', 24 | new ModelVisibility(), 25 | ], 26 | ]; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /app/Http/Requests/Models/TagStoreRequest.php: -------------------------------------------------------------------------------- 1 | [ 15 | 'required', 16 | Rule::unique('tags')->where(fn($query) => $query->where('user_id', auth()->user()->id)), 17 | ], 18 | 'visibility' => [ 19 | 'sometimes', 20 | new ModelVisibility(), 21 | ], 22 | ]; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/Http/Requests/Models/ToggleLinkCheckRequest.php: -------------------------------------------------------------------------------- 1 | user()->can('update', $request->link); 13 | } 14 | 15 | public function rules(): array 16 | { 17 | return [ 18 | 'toggle' => [ 19 | 'required', 20 | 'boolean', 21 | ], 22 | ]; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/Http/Requests/TrashClearRequest.php: -------------------------------------------------------------------------------- 1 | [ 13 | 'required', 14 | 'in:links,lists,tags,notes', 15 | ], 16 | ]; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /app/Http/Requests/TrashRestoreRequest.php: -------------------------------------------------------------------------------- 1 | [ 13 | 'required', 14 | 'in:link,list,tag,note', 15 | ], 16 | 'id' => [ 17 | 'required', 18 | 'numeric', 19 | ], 20 | ]; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /app/Http/Requests/UserSettingsUpdateRequest.php: -------------------------------------------------------------------------------- 1 | [ 13 | 'required', 14 | ], 15 | 'timezone' => [ 16 | 'required', 17 | ], 18 | ]; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /app/Jobs/SaveLinkToWaybackmachine.php: -------------------------------------------------------------------------------- 1 | link->url); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /app/Mail/TestConfigurationMail.php: -------------------------------------------------------------------------------- 1 | check()) { 20 | $userId = auth()->id(); 21 | } 22 | return $query->where('user_id', $userId); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/Providers/AppServiceProvider.php: -------------------------------------------------------------------------------- 1 | orderBy('name'); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /app/Settings/SystemSettings.php: -------------------------------------------------------------------------------- 1 | env('META_GENERATION_TIMEOUT', 10), 4 | 'parser' => \Kovah\HtmlMeta\HtmlMetaParser::class, 5 | 'user_agents' => [ 6 | env('APP_USER_AGENT', 'LinkAce/2 (https://github.com/Kovah/LinkAce)'), 7 | ], 8 | 'custom_headers' => env('META_GENERATION_CUSTOM_HEADERS'), 9 | ]; 10 | -------------------------------------------------------------------------------- /crowdin.yml: -------------------------------------------------------------------------------- 1 | files: 2 | - source: /resources/lang/en_US/*.php 3 | translation: /resources/lang/%locale_with_underscore%/%original_file_name% 4 | -------------------------------------------------------------------------------- /database/.gitignore: -------------------------------------------------------------------------------- 1 | *.sqlite 2 | *.sqlite-journal 3 | -------------------------------------------------------------------------------- /database/factories/TagFactory.php: -------------------------------------------------------------------------------- 1 | User::notSystem()->first()->id ?? User::factory(), 22 | 'name' => $this->faker->words(random_int(2, 3), true), 23 | 'visibility' => ModelAttribute::VISIBILITY_PUBLIC, 24 | ]; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /database/migrations/2025_01_12_214138_add_last_check_date_to_links.php: -------------------------------------------------------------------------------- 1 | timestamp('last_checked_at')->after('check_disabled')->nullable(); 12 | }); 13 | } 14 | 15 | public function down(): void 16 | { 17 | Schema::table('links', function (Blueprint $table) { 18 | $table->dropColumn(['last_checked_at']); 19 | }); 20 | } 21 | }; 22 | -------------------------------------------------------------------------------- /database/seeders/DatabaseSeeder.php: -------------------------------------------------------------------------------- 1 | call(PermissionSeeder::class); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /database/settings/2022_06_22_130000_extend_system_settings.php: -------------------------------------------------------------------------------- 1 | migrator->add('system.logo_text', null); 10 | 11 | $this->migrator->add('system.additional_footer_link_url', null); 12 | $this->migrator->add('system.additional_footer_link_text', null); 13 | 14 | $this->migrator->add('system.contact_page_enabled', false); 15 | $this->migrator->add('system.contact_page_title', null); 16 | $this->migrator->add('system.contact_page_content', null); 17 | 18 | $this->migrator->add('guest.locale', config('app.fallback_locale')); 19 | } 20 | }; 21 | -------------------------------------------------------------------------------- /database/settings/2025_02_15_092008_add_bluesky_share_method.php: -------------------------------------------------------------------------------- 1 | migrator->add('guest.share_bluesky', false); 9 | 10 | foreach (DB::table('users')->pluck('id') as $userId) { 11 | $id = 'user-' . $userId; 12 | $this->migrator->add($id . '.shareAdd_bluesky', false); 13 | } 14 | } 15 | }; 16 | -------------------------------------------------------------------------------- /database/settings/2025_02_16_092049_fix_bluesky_share_method.php: -------------------------------------------------------------------------------- 1 | pluck('id') as $userId) { 10 | $id = 'user-' . $userId; 11 | $this->migrator->delete($id . '.shareAdd_bluesky'); 12 | $this->migrator->add($id . '.share_bluesky', false); 13 | } 14 | } 15 | }; 16 | -------------------------------------------------------------------------------- /deploy/linkace/.env.k8s: -------------------------------------------------------------------------------- 1 | APP_KEY=someRandomStringWith32Characters 2 | 3 | DB_CONNECTION=mysql 4 | DB_HOST=linkace-mariadb 5 | DB_PORT=3306 6 | DB_DATABASE=linkace 7 | DB_USERNAME=linkace 8 | DB_PASSWORD=ChangeThisToASecurePassword! 9 | 10 | REDIS_HOST=linkace-redis 11 | REDIS_PASSWORD=ChangeThisToASecurePassword! 12 | REDIS_PORT=6379 13 | 14 | MAIL_FROM_ADDRESS=your@email.com 15 | MAIL_FROM_NAME=LinkAce 16 | MAIL_DRIVER=smtp 17 | MAIL_HOST=smtp.mailtrap.io 18 | MAIL_PORT=2525 19 | MAIL_USERNAME=null 20 | MAIL_PASSWORD=null 21 | MAIL_ENCRYPTION=null 22 | 23 | BACKUP_ENABLED=true 24 | SESSION_DRIVER=redis 25 | CACHE_DRIVER=redis 26 | -------------------------------------------------------------------------------- /deploy/linkace/.helmignore: -------------------------------------------------------------------------------- 1 | # Patterns to ignore when building packages. 2 | # This supports shell glob matching, relative path matching, and 3 | # negation (prefixed with !). Only one pattern per line. 4 | .DS_Store 5 | # Common VCS dirs 6 | .git/ 7 | .gitignore 8 | .bzr/ 9 | .bzrignore 10 | .hg/ 11 | .hgignore 12 | .svn/ 13 | # Common backup files 14 | *.swp 15 | *.bak 16 | *.tmp 17 | *.orig 18 | *~ 19 | # Various IDEs 20 | .project 21 | .idea/ 22 | *.tmproj 23 | .vscode/ 24 | -------------------------------------------------------------------------------- /deploy/linkace/templates/secret.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Secret 3 | metadata: 4 | name: {{ .Release.Name }}-env 5 | type: Opaque 6 | data: 7 | {{- $files := .Files }} 8 | {{- with $files.Get ".env.k8s" }} 9 | {{- range $line := splitList "\n" . }} 10 | {{- $line := trim $line }} 11 | {{- if and (ne (len $line) 0) (not (hasPrefix "#" $line)) }} 12 | {{- $kv := splitList "=" $line }} 13 | {{- if eq (len $kv) 2 }} 14 | {{ index $kv 0 | trim | quote }}: {{ index $kv 1 | trim | b64enc | quote }} 15 | {{- end }} 16 | {{- end }} 17 | {{- end }} 18 | {{- end }} 19 | -------------------------------------------------------------------------------- /deploy/linkace/templates/serviceaccount.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.serviceAccount.create -}} 2 | apiVersion: v1 3 | kind: ServiceAccount 4 | metadata: 5 | name: {{ include "linkace.serviceAccountName" . }} 6 | labels: 7 | {{- include "linkace.labels" . | nindent 4 }} 8 | {{- with .Values.serviceAccount.annotations }} 9 | annotations: 10 | {{- toYaml . | nindent 4 }} 11 | {{- end }} 12 | automountServiceAccountToken: {{ .Values.serviceAccount.automount }} 13 | {{- end }} 14 | -------------------------------------------------------------------------------- /deploy/linkace/templates/tests/test-connection.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: "{{ include "linkace.fullname" . }}-test-connection" 5 | labels: 6 | {{- include "linkace.labels" . | nindent 4 }} 7 | annotations: 8 | "helm.sh/hook": test 9 | spec: 10 | containers: 11 | - name: wget 12 | image: busybox 13 | command: ['wget'] 14 | args: ['{{ include "linkace.fullname" . }}:{{ .Values.service.port }}'] 15 | restartPolicy: Never 16 | -------------------------------------------------------------------------------- /lang/ca_ES/attributes.php: -------------------------------------------------------------------------------- 1 | [ 7 | ModelAttribute::VISIBILITY_PUBLIC => 'Public', 8 | ModelAttribute::VISIBILITY_INTERNAL => 'Internal', 9 | ModelAttribute::VISIBILITY_PRIVATE => 'Private', 10 | ], 11 | ]; 12 | -------------------------------------------------------------------------------- /lang/ca_ES/audit.php: -------------------------------------------------------------------------------- 1 | 'Regristre d\'autoria', 6 | 'system_events' => 'System Events', 7 | 'settings_history' => 'Opcions Històriques', 8 | 'user_history' => 'User History', 9 | 'user_history_entry' => 'User :id: :change', 10 | 11 | 'no_logs_found' => 'No logs found', 12 | 13 | 'activity_entry_with_causer' => ':change by :causer', 14 | 15 | 'logs' => [ 16 | 'system' => [ 17 | 'cron_token_regenerated' => 'System: Cron Token was re-generated', 18 | ], 19 | 'user_settings' => [ 20 | 'api_token_generated' => 'User: API Token was generated', 21 | 'api_token_revoken' => 'User: API Token was revoked', 22 | ], 23 | ], 24 | ]; 25 | -------------------------------------------------------------------------------- /lang/ca_ES/export.php: -------------------------------------------------------------------------------- 1 | 'Exportar', 4 | 'start_export_html' => 'Exportar a HTML', 5 | 'start_export_csv' => 'Exporta a CSV', 6 | 7 | 'export_help' => 'Executant l\'exportació desarà tots els marcadors existents a un arxiu normal, compatible, o a un arxiu CSV si ho desitja.', 8 | 9 | 'export_csv_error' => 'Ha succeït un error mentre es intentava generar l\'arxiu CSV. Si us plau, comprova els arxius de registre per més detalls.', 10 | ]; 11 | -------------------------------------------------------------------------------- /lang/ca_ES/note.php: -------------------------------------------------------------------------------- 1 | 'Nota', 4 | 'notes' => 'Notes', 5 | 6 | 'add' => 'Afegeix una nota', 7 | 'show' => 'Mostrar nota', 8 | 'edit' => 'Edita la nota', 9 | 'update' => 'Actualitzar nota', 10 | 'delete' => 'Eliminar nota', 11 | 12 | 'public' => 'Public Note', 13 | 'internal' => 'Internal Note', 14 | 'private' => 'Nota privada', 15 | 16 | 'note_content' => 'Contingut de la nota', 17 | 18 | 'added_successfully' => 'Nota afegida amb èxit.', 19 | 'updated_successfully' => 'Nota actualitzada correctament.', 20 | 'deleted_successfully' => 'Note successfully moved to the trash.', 21 | 'deletion_error' => 'Note could not be moved to the trash.', 22 | ]; 23 | -------------------------------------------------------------------------------- /lang/ca_ES/pagination.php: -------------------------------------------------------------------------------- 1 | '« Anterior', 17 | 'next' => 'Següent »', 18 | 19 | ]; 20 | -------------------------------------------------------------------------------- /lang/ca_ES/placeholder.php: -------------------------------------------------------------------------------- 1 | 'johndoe', 4 | 'email' => 'john.doe@ejemplo.com', 5 | 'password' => 'Contrasenya', 6 | 'password_confirmed' => 'Contrasenya confirmada', 7 | 8 | 'link_url' => 'https://github.com/Kovah/LinkAce', 9 | 'link_title' => 'Títol del lloc web', 10 | 11 | 'list_select' => 'Seleccionar llista', 12 | 'tags_select' => 'Selecciona algunes etiquetes', 13 | 14 | 'list_name' => 'Nom actual de la llista', 15 | 'tag_name' => 'Nom actual de l\'etiqueta', 16 | 17 | 'two_factor_otp' => 'Contrasenya de un sol ús', 18 | 'two_factor_recovery_code' => 'Codi de recuperació', 19 | ]; 20 | -------------------------------------------------------------------------------- /lang/ca_ES/stats.php: -------------------------------------------------------------------------------- 1 | 'Estadístiques', 6 | 'total_links' => 'Enllaços totals', 7 | 'total_lists' => 'Llistes totals', 8 | 'total_tags' => 'Etiquetes totals', 9 | 'total_notes' => 'Notes totals', 10 | 'total_broken_links' => 'Enllaços trencats', 11 | 12 | ]; 13 | -------------------------------------------------------------------------------- /lang/de_DE/attributes.php: -------------------------------------------------------------------------------- 1 | [ 7 | ModelAttribute::VISIBILITY_PUBLIC => 'Öffentlich', 8 | ModelAttribute::VISIBILITY_INTERNAL => 'Intern', 9 | ModelAttribute::VISIBILITY_PRIVATE => 'Privat', 10 | ], 11 | ]; 12 | -------------------------------------------------------------------------------- /lang/de_DE/export.php: -------------------------------------------------------------------------------- 1 | 'Export', 4 | 'start_export_html' => 'Als HTML exportieren', 5 | 'start_export_csv' => 'Als CSV exportieren', 6 | 7 | 'export_help' => 'Wenn Sie den Export ausführen, werden alle vorhandenen Lesezeichen in einer Lesezeichen-kompatiblen Datei oder in einer CSV-Datei gespeichert.', 8 | 9 | 'export_csv_error' => 'Beim Versuch, eine CSV-Datei zu erzeugen, ist ein Fehler aufgetreten. Bitte überprüfen Sie die Protokolldateien für weitere Details.', 10 | ]; 11 | -------------------------------------------------------------------------------- /lang/de_DE/note.php: -------------------------------------------------------------------------------- 1 | 'Notiz', 4 | 'notes' => 'Notizen', 5 | 6 | 'add' => 'Notiz hinzufügen', 7 | 'show' => 'Notiz anzeigen', 8 | 'edit' => 'Notiz bearbeiten', 9 | 'update' => 'Notiz aktualisieren', 10 | 'delete' => 'Notiz löschen', 11 | 12 | 'public' => 'Öffentliche Notiz', 13 | 'internal' => 'Interne Notiz', 14 | 'private' => 'Private Notiz', 15 | 16 | 'note_content' => 'Notiz Inhalt', 17 | 18 | 'added_successfully' => 'Notiz erfolgreich hinzugefügt.', 19 | 'updated_successfully' => 'Notiz erfolgreich aktualisiert.', 20 | 'deleted_successfully' => 'Notiz erfolgreich in den Papierkorb verschoben.', 21 | 'deletion_error' => 'Notiz konnte nicht in den Papierkorb verschoben werden.', 22 | ]; 23 | -------------------------------------------------------------------------------- /lang/de_DE/pagination.php: -------------------------------------------------------------------------------- 1 | '« Zurück', 17 | 'next' => 'Weiter »', 18 | 19 | ]; 20 | -------------------------------------------------------------------------------- /lang/de_DE/placeholder.php: -------------------------------------------------------------------------------- 1 | 'maxmustermann', 4 | 'email' => 'max@mustermann.de', 5 | 'password' => 'Passwort', 6 | 'password_confirmed' => 'Passwort wiederholen', 7 | 8 | 'link_url' => 'https://github.com/Kovah/LinkAce', 9 | 'link_title' => 'Titel der Webseite', 10 | 11 | 'list_select' => 'Liste auswählen', 12 | 'tags_select' => 'Tags auswählen', 13 | 14 | 'list_name' => 'Name der Liste', 15 | 'tag_name' => 'Name des Tags', 16 | 17 | 'two_factor_otp' => 'Einmalpasswort', 18 | 'two_factor_recovery_code' => 'Wiederherstellungscode', 19 | 20 | ]; 21 | -------------------------------------------------------------------------------- /lang/de_DE/stats.php: -------------------------------------------------------------------------------- 1 | 'Statistiken', 6 | 'total_links' => 'Gesamte Links', 7 | 'total_lists' => 'Gesamte Listen', 8 | 'total_tags' => 'Gesamte Tags', 9 | 'total_notes' => 'Gesamte Notizen', 10 | 'total_broken_links' => 'Kaputte Links', 11 | 12 | ]; 13 | -------------------------------------------------------------------------------- /lang/en_US/attributes.php: -------------------------------------------------------------------------------- 1 | [ 7 | ModelAttribute::VISIBILITY_PUBLIC => 'Public', 8 | ModelAttribute::VISIBILITY_INTERNAL => 'Internal', 9 | ModelAttribute::VISIBILITY_PRIVATE => 'Private', 10 | ], 11 | ]; 12 | -------------------------------------------------------------------------------- /lang/en_US/audit.php: -------------------------------------------------------------------------------- 1 | 'Audit Log', 6 | 'system_events' => 'System Events', 7 | 'settings_history' => 'Settings History', 8 | 'user_history' => 'User History', 9 | 'user_history_entry' => 'User :id: :change', 10 | 11 | 'no_logs_found' => 'No logs found', 12 | 13 | 'activity_entry_with_causer' => ':change by :causer', 14 | 15 | 'logs' => [ 16 | 'system' => [ 17 | 'cron_token_regenerated' => 'System: Cron Token was re-generated', 18 | ], 19 | 'user_settings' => [ 20 | 'api_token_generated' => 'User: API Token was generated', 21 | 'api_token_revoken' => 'User: API Token was revoked', 22 | ], 23 | ], 24 | ]; 25 | -------------------------------------------------------------------------------- /lang/en_US/export.php: -------------------------------------------------------------------------------- 1 | 'Export', 4 | 'start_export_html' => 'Export to HTML', 5 | 'start_export_csv' => 'Export to CSV', 6 | 7 | 'export_help' => 'Running the export will save all existing bookmarks into a regular bookmarks-compatible file, or a CSV file if you want.', 8 | 9 | 'export_csv_error' => 'An error occured while trying to generate a CSV file. Please check the log files for more details.', 10 | ]; 11 | -------------------------------------------------------------------------------- /lang/en_US/note.php: -------------------------------------------------------------------------------- 1 | 'Note', 4 | 'notes' => 'Notes', 5 | 6 | 'add' => 'Add Note', 7 | 'show' => 'Show Note', 8 | 'edit' => 'Edit Note', 9 | 'update' => 'Update Note', 10 | 'delete' => 'Delete Note', 11 | 12 | 'public' => 'Public Note', 13 | 'internal' => 'Internal Note', 14 | 'private' => 'Private Note', 15 | 16 | 'note_content' => 'Note Content', 17 | 18 | 'added_successfully' => 'Note added successfully.', 19 | 'updated_successfully' => 'Note updated successfully.', 20 | 'deleted_successfully' => 'Note successfully moved to the trash.', 21 | 'deletion_error' => 'Note could not be moved to the trash.', 22 | ]; 23 | -------------------------------------------------------------------------------- /lang/en_US/pagination.php: -------------------------------------------------------------------------------- 1 | '« Previous', 17 | 'next' => 'Next »', 18 | 19 | ]; 20 | -------------------------------------------------------------------------------- /lang/en_US/placeholder.php: -------------------------------------------------------------------------------- 1 | 'johndoe', 4 | 'email' => 'john.doe@example.com', 5 | 'password' => 'Password', 6 | 'password_confirmed' => 'Confirmed password', 7 | 8 | 'link_url' => 'https://github.com/Kovah/LinkAce', 9 | 'link_title' => 'Title of the website', 10 | 11 | 'list_select' => 'Select a List', 12 | 'tags_select' => 'Select some Tags', 13 | 14 | 'list_name' => 'Actual name of the list', 15 | 'tag_name' => 'Actual name of the tag', 16 | 17 | 'two_factor_otp' => 'One Time Password', 18 | 'two_factor_recovery_code' => 'Recovery Code', 19 | ]; 20 | -------------------------------------------------------------------------------- /lang/en_US/stats.php: -------------------------------------------------------------------------------- 1 | 'Statistics', 6 | 'total_links' => 'Total Links', 7 | 'total_lists' => 'Total Lists', 8 | 'total_tags' => 'Total Tags', 9 | 'total_notes' => 'Total Notes', 10 | 'total_broken_links' => 'Broken Links', 11 | 12 | ]; 13 | -------------------------------------------------------------------------------- /lang/es_ES/attributes.php: -------------------------------------------------------------------------------- 1 | [ 7 | ModelAttribute::VISIBILITY_PUBLIC => 'Público', 8 | ModelAttribute::VISIBILITY_INTERNAL => 'Interno', 9 | ModelAttribute::VISIBILITY_PRIVATE => 'Privado', 10 | ], 11 | ]; 12 | -------------------------------------------------------------------------------- /lang/es_ES/export.php: -------------------------------------------------------------------------------- 1 | 'Exportar', 4 | 'start_export_html' => 'Exportar a HTML', 5 | 'start_export_csv' => 'Exportar a CSV', 6 | 7 | 'export_help' => 'Ejecutar la exportación guardará todos los marcadores existentes en un archivo normal compatible con marcadores, o un archivo CSV si lo desea.', 8 | 9 | 'export_csv_error' => 'Ocurrió un error mientras se trataba de generar un archivo CSV. Por favor, compruebe los archivos de registro para más detalles.', 10 | ]; 11 | -------------------------------------------------------------------------------- /lang/es_ES/note.php: -------------------------------------------------------------------------------- 1 | 'Nota', 4 | 'notes' => 'Notas', 5 | 6 | 'add' => 'Añadir nota', 7 | 'show' => 'Mostrar nota', 8 | 'edit' => 'Editar nota', 9 | 'update' => 'Actualizar nota', 10 | 'delete' => 'Eliminar nota', 11 | 12 | 'public' => 'Nota pública', 13 | 'internal' => 'Nota interna', 14 | 'private' => 'Nota privada', 15 | 16 | 'note_content' => 'Contenido de la nota', 17 | 18 | 'added_successfully' => 'Nota añadida con éxito.', 19 | 'updated_successfully' => 'Nota actualizada correctamente.', 20 | 'deleted_successfully' => 'Nota movida con éxito a la papelera.', 21 | 'deletion_error' => 'No se pudo mover la nota a la papelera.', 22 | ]; 23 | -------------------------------------------------------------------------------- /lang/es_ES/pagination.php: -------------------------------------------------------------------------------- 1 | '« Anterior', 17 | 'next' => 'Siguiente »', 18 | 19 | ]; 20 | -------------------------------------------------------------------------------- /lang/es_ES/placeholder.php: -------------------------------------------------------------------------------- 1 | 'johndoe', 4 | 'email' => 'john.doe@ejemplo.com', 5 | 'password' => 'Contraseña', 6 | 'password_confirmed' => 'Contraseña confirmada', 7 | 8 | 'link_url' => 'https://github.com/Kovah/LinkAce', 9 | 'link_title' => 'Título del sitio web', 10 | 11 | 'list_select' => 'Seleccione una lista', 12 | 'tags_select' => 'Selecciona algunas etiquetas', 13 | 14 | 'list_name' => 'Nombre actual de la lista', 15 | 'tag_name' => 'Nombre actual de la etiqueta', 16 | 17 | 'two_factor_otp' => 'Contraseña de un solo uso', 18 | 'two_factor_recovery_code' => 'Código de recuperación', 19 | ]; 20 | -------------------------------------------------------------------------------- /lang/es_ES/stats.php: -------------------------------------------------------------------------------- 1 | 'Estadísticas', 6 | 'total_links' => 'Enlaces totales', 7 | 'total_lists' => 'Listas totales', 8 | 'total_tags' => 'Etiquetas totales', 9 | 'total_notes' => 'Notas totales', 10 | 'total_broken_links' => 'Enlaces rotos', 11 | 12 | ]; 13 | -------------------------------------------------------------------------------- /lang/fr_FR/attributes.php: -------------------------------------------------------------------------------- 1 | [ 7 | ModelAttribute::VISIBILITY_PUBLIC => 'Public', 8 | ModelAttribute::VISIBILITY_INTERNAL => 'Interne', 9 | ModelAttribute::VISIBILITY_PRIVATE => 'Privé', 10 | ], 11 | ]; 12 | -------------------------------------------------------------------------------- /lang/fr_FR/export.php: -------------------------------------------------------------------------------- 1 | 'Exporter', 4 | 'start_export_html' => 'Exporter en HTML', 5 | 'start_export_csv' => 'Exporter en CSV', 6 | 7 | 'export_help' => 'Exécuter l\'export sauvegardera tous les signets existants dans un fichier compatible avec ceux-ci, ou un fichier CSV si vous le souhaitez.', 8 | 9 | 'export_csv_error' => 'Une erreur est survenue en essayant de générer un fichier CSV. Veuillez vérifier les fichiers journaux pour plus de détails.', 10 | ]; 11 | -------------------------------------------------------------------------------- /lang/fr_FR/note.php: -------------------------------------------------------------------------------- 1 | 'Note', 4 | 'notes' => 'Notes', 5 | 6 | 'add' => 'Ajouter Note', 7 | 'show' => 'Afficher Note', 8 | 'edit' => 'Éditer Note', 9 | 'update' => 'Mettre à jour Note', 10 | 'delete' => 'Supprimer Note', 11 | 12 | 'public' => 'Note publique', 13 | 'internal' => 'Note interne', 14 | 'private' => 'Note Privée', 15 | 16 | 'note_content' => 'Contenu Note', 17 | 18 | 'added_successfully' => 'Note ajoutée avec succès.', 19 | 'updated_successfully' => 'Note mise à jour avec succès.', 20 | 'deleted_successfully' => 'Note déplacée avec succès vers la corbeille.', 21 | 'deletion_error' => 'La note n\'a pas pu être déplacée dans la corbeille.', 22 | ]; 23 | -------------------------------------------------------------------------------- /lang/fr_FR/pagination.php: -------------------------------------------------------------------------------- 1 | '« Précédent', 17 | 'next' => 'Suivant »', 18 | 19 | ]; 20 | -------------------------------------------------------------------------------- /lang/fr_FR/placeholder.php: -------------------------------------------------------------------------------- 1 | 'johndoe', 4 | 'email' => 'john.doe@example.com', 5 | 'password' => 'Mot de passe', 6 | 'password_confirmed' => 'Mot de passe confirmé', 7 | 8 | 'link_url' => 'https://github.com/Kovah/LinkAce', 9 | 'link_title' => 'Titre du site web', 10 | 11 | 'list_select' => 'Sélectionner une Liste', 12 | 'tags_select' => 'Sélectionner quelques étiquettes', 13 | 14 | 'list_name' => 'Nom actuel de la liste', 15 | 'tag_name' => 'Nom actuel de l\'étiquette', 16 | 17 | 'two_factor_otp' => 'Mot de passe à usage unique', 18 | 'two_factor_recovery_code' => 'Code de récupération', 19 | ]; 20 | -------------------------------------------------------------------------------- /lang/fr_FR/stats.php: -------------------------------------------------------------------------------- 1 | 'Statistiques', 6 | 'total_links' => 'Total Liens', 7 | 'total_lists' => 'Total Listes', 8 | 'total_tags' => 'Total Étiquettes', 9 | 'total_notes' => 'Total Notes', 10 | 'total_broken_links' => 'Liens Cassés', 11 | 12 | ]; 13 | -------------------------------------------------------------------------------- /lang/hu_HU/attributes.php: -------------------------------------------------------------------------------- 1 | [ 7 | ModelAttribute::VISIBILITY_PUBLIC => 'Nyilvános', 8 | ModelAttribute::VISIBILITY_INTERNAL => 'Belső', 9 | ModelAttribute::VISIBILITY_PRIVATE => 'Privát', 10 | ], 11 | ]; 12 | -------------------------------------------------------------------------------- /lang/hu_HU/export.php: -------------------------------------------------------------------------------- 1 | 'Exportálás', 4 | 'start_export_html' => 'Exportálás HTML-fájlba', 5 | 'start_export_csv' => 'Exportálás CSV-fájlba', 6 | 7 | 'export_help' => 'Az exportálás futtatásával az összes meglévő könyvjelzőt egy hagyományos könyvjelző-kompatibilis fájlba, vagy, ha szeretné, egy CSV-fájlba menti.', 8 | 9 | 'export_csv_error' => 'Hiba történt a CSV-fájl létrehozásakor. További részletekért ellenőrizze a naplófájlokat.', 10 | ]; 11 | -------------------------------------------------------------------------------- /lang/hu_HU/note.php: -------------------------------------------------------------------------------- 1 | 'Jegyzet', 4 | 'notes' => 'Jegyzetek', 5 | 6 | 'add' => 'Jegyzet hozzáadása', 7 | 'show' => 'Jegyzet megjelenítése', 8 | 'edit' => 'Jegyzet szerkesztése', 9 | 'update' => 'Jegyzet frissítése', 10 | 'delete' => 'Jegyzet törlése', 11 | 12 | 'public' => 'Nyilvános megjegyzés', 13 | 'internal' => 'Belső megjegyzés', 14 | 'private' => 'Privát jegyzet', 15 | 16 | 'note_content' => 'Jegyzet tartalma', 17 | 18 | 'added_successfully' => 'Jegyzet sikeresen hozzáadva.', 19 | 'updated_successfully' => 'Jegyzet sikeresen frissítve.', 20 | 'deleted_successfully' => 'A jegyzet sikeresen a szemétbe került.', 21 | 'deletion_error' => 'A jegyzetet nem lehetett a szemétbe helyezni.', 22 | ]; 23 | -------------------------------------------------------------------------------- /lang/hu_HU/pagination.php: -------------------------------------------------------------------------------- 1 | '« Előző', 17 | 'next' => 'Tovább »', 18 | 19 | ]; 20 | -------------------------------------------------------------------------------- /lang/hu_HU/placeholder.php: -------------------------------------------------------------------------------- 1 | 'deakgabor', 4 | 'email' => 'deak.gabor@example.com', 5 | 'password' => 'Jelszó', 6 | 'password_confirmed' => 'Megerősített jelszó', 7 | 8 | 'link_url' => 'https://github.com/Kovah/LinkAce', 9 | 'link_title' => 'A webhely címe', 10 | 11 | 'list_select' => 'Válasszon ki egy listát', 12 | 'tags_select' => 'Válasszon ki néhány címkét', 13 | 14 | 'list_name' => 'A lista tényleges neve', 15 | 'tag_name' => 'A címke tényleges neve', 16 | 17 | 'two_factor_otp' => 'Egyszeri jelszó', 18 | 'two_factor_recovery_code' => 'Helyreállítási kód', 19 | ]; 20 | -------------------------------------------------------------------------------- /lang/hu_HU/stats.php: -------------------------------------------------------------------------------- 1 | 'Statisztika', 6 | 'total_links' => 'Összes hivatkozás', 7 | 'total_lists' => 'Összes lista', 8 | 'total_tags' => 'Összes címke', 9 | 'total_notes' => 'Összes jegyzet', 10 | 'total_broken_links' => 'Megszakadt hivatkozások', 11 | 12 | ]; 13 | -------------------------------------------------------------------------------- /lang/it_IT/attributes.php: -------------------------------------------------------------------------------- 1 | [ 7 | ModelAttribute::VISIBILITY_PUBLIC => 'Pubblico', 8 | ModelAttribute::VISIBILITY_INTERNAL => 'Interna', 9 | ModelAttribute::VISIBILITY_PRIVATE => 'Privato', 10 | ], 11 | ]; 12 | -------------------------------------------------------------------------------- /lang/it_IT/export.php: -------------------------------------------------------------------------------- 1 | 'Esporta', 4 | 'start_export_html' => 'Esporta in HTML', 5 | 'start_export_csv' => 'Esporta in CSV', 6 | 7 | 'export_help' => 'L\'esportazione salverà tutti i bookmark esistenti in un file standard compatibile con i browser, o in un file CSV, se desiderato.', 8 | 9 | 'export_csv_error' => 'Si è verificato un errore durante il tentativo di generare un file CSV. Controlla i file di registro per maggiori dettagli.', 10 | ]; 11 | -------------------------------------------------------------------------------- /lang/it_IT/note.php: -------------------------------------------------------------------------------- 1 | 'Nota', 4 | 'notes' => 'Note', 5 | 6 | 'add' => 'Aggiungi Nota', 7 | 'show' => 'Mostra Nota', 8 | 'edit' => 'Modifica Nota', 9 | 'update' => 'Aggiorna Nota', 10 | 'delete' => 'Elimina Nota', 11 | 12 | 'public' => 'Nota Pubblica', 13 | 'internal' => 'Nota Interna', 14 | 'private' => 'Nota Privata', 15 | 16 | 'note_content' => 'Contenuto della Nota', 17 | 18 | 'added_successfully' => 'Nota aggiunta correttamente.', 19 | 'updated_successfully' => 'Nota aggiornata correttamente.', 20 | 'deleted_successfully' => 'Nota spostata correttamente nel cestino.', 21 | 'deletion_error' => 'Nota non può essere spostata nel cestino.', 22 | ]; 23 | -------------------------------------------------------------------------------- /lang/it_IT/pagination.php: -------------------------------------------------------------------------------- 1 | '« Precedente', 17 | 'next' => 'Successivo »', 18 | 19 | ]; 20 | -------------------------------------------------------------------------------- /lang/it_IT/placeholder.php: -------------------------------------------------------------------------------- 1 | 'johndoe', 4 | 'email' => 'john.doe@example.com', 5 | 'password' => 'Password', 6 | 'password_confirmed' => 'Password confermata', 7 | 8 | 'link_url' => 'https://github.com/Kovah/LinkAce', 9 | 'link_title' => 'Titolo del sito web', 10 | 11 | 'list_select' => 'Seleziona una lista', 12 | 'tags_select' => 'Seleziona qualche Tag', 13 | 14 | 'list_name' => 'Nome effettivo della lista', 15 | 'tag_name' => 'Nome effettivo del tag', 16 | 17 | 'two_factor_otp' => 'Password monouso', 18 | 'two_factor_recovery_code' => 'Codice di Recupero', 19 | ]; 20 | -------------------------------------------------------------------------------- /lang/it_IT/stats.php: -------------------------------------------------------------------------------- 1 | 'Statistiche', 6 | 'total_links' => 'Totale Link', 7 | 'total_lists' => 'Totale Liste', 8 | 'total_tags' => 'Totale Tag', 9 | 'total_notes' => 'Totale Note', 10 | 'total_broken_links' => 'Collegamenti Non Validi', 11 | 12 | ]; 13 | -------------------------------------------------------------------------------- /lang/ja_JP/attributes.php: -------------------------------------------------------------------------------- 1 | [ 7 | ModelAttribute::VISIBILITY_PUBLIC => '公開', 8 | ModelAttribute::VISIBILITY_INTERNAL => '内部', 9 | ModelAttribute::VISIBILITY_PRIVATE => '非公開', 10 | ], 11 | ]; 12 | -------------------------------------------------------------------------------- /lang/ja_JP/audit.php: -------------------------------------------------------------------------------- 1 | '監査ログ', 6 | 'system_events' => 'システムイベント', 7 | 'settings_history' => '設定履歴', 8 | 'user_history' => 'ユーザー履歴', 9 | 'user_history_entry' => 'ユーザー :id: :change', 10 | 11 | 'no_logs_found' => 'ログが見つかりません', 12 | 13 | 'activity_entry_with_causer' => ':causer によって :change', 14 | 15 | 'logs' => [ 16 | 'system' => [ 17 | 'cron_token_regenerated' => 'システム:Cronトークンが再生成されました', 18 | ], 19 | 'user_settings' => [ 20 | 'api_token_generated' => 'ユーザー:APIトークンが生成されました', 21 | 'api_token_revoken' => 'ユーザー:APIトークンが取り消されました', 22 | ], 23 | ], 24 | ]; 25 | -------------------------------------------------------------------------------- /lang/ja_JP/export.php: -------------------------------------------------------------------------------- 1 | 'エクスポート', 4 | 'start_export_html' => 'HTMLとしてエクスポート', 5 | 'start_export_csv' => 'CSVとしてエクスポート', 6 | 7 | 'export_help' => 'エクスポートを実行すると、すべてのブックマークが一般的なブックマーク互換ファイル、または必要に応じてCSVファイルで保存されます。', 8 | 9 | 'export_csv_error' => 'CSVファイルの生成中にエラーが発生しました。詳細はログファイルを確認してください。', 10 | ]; 11 | -------------------------------------------------------------------------------- /lang/ja_JP/note.php: -------------------------------------------------------------------------------- 1 | 'ノート', 4 | 'notes' => 'ノート', 5 | 6 | 'add' => 'ノートを追加', 7 | 'show' => 'ノートの表示', 8 | 'edit' => 'ノートを編集', 9 | 'update' => 'ノートを更新', 10 | 'delete' => 'ノートを削除', 11 | 12 | 'public' => '公開ノート', 13 | 'internal' => '内部ノート', 14 | 'private' => '非公開ノート', 15 | 16 | 'note_content' => 'ノートコンテンツ', 17 | 18 | 'added_successfully' => 'ノートの追加に成功しました。', 19 | 'updated_successfully' => 'ノートの更新に成功しました。', 20 | 'deleted_successfully' => 'ノートをごみ箱に移動しました。', 21 | 'deletion_error' => 'ノートをごみ箱に移動できませんでした。', 22 | ]; 23 | -------------------------------------------------------------------------------- /lang/ja_JP/pagination.php: -------------------------------------------------------------------------------- 1 | '« 前へ', 17 | 'next' => '次へ »', 18 | 19 | ]; 20 | -------------------------------------------------------------------------------- /lang/ja_JP/placeholder.php: -------------------------------------------------------------------------------- 1 | 'johndoe', 4 | 'email' => 'john.doe@example.com', 5 | 'password' => 'パスワード', 6 | 'password_confirmed' => 'パスワードの確認', 7 | 8 | 'link_url' => 'https://github.com/Kovah/LinkAce', 9 | 'link_title' => 'ウェブサイトの題名', 10 | 11 | 'list_select' => 'リストを選択', 12 | 'tags_select' => 'いくつかのタグを選択', 13 | 14 | 'list_name' => 'リストの名前', 15 | 'tag_name' => 'タグの名前', 16 | 17 | 'two_factor_otp' => 'ワンタイムパスワード', 18 | 'two_factor_recovery_code' => 'リカバリーコード', 19 | ]; 20 | -------------------------------------------------------------------------------- /lang/ja_JP/stats.php: -------------------------------------------------------------------------------- 1 | '統計', 6 | 'total_links' => '合計リンク数', 7 | 'total_lists' => '合計リスト数', 8 | 'total_tags' => '合計タグ数', 9 | 'total_notes' => '合計ノート数', 10 | 'total_broken_links' => '破損リンク数', 11 | 12 | ]; 13 | -------------------------------------------------------------------------------- /lang/nl_NL/attributes.php: -------------------------------------------------------------------------------- 1 | [ 7 | ModelAttribute::VISIBILITY_PUBLIC => 'Openbaar', 8 | ModelAttribute::VISIBILITY_INTERNAL => 'Intern', 9 | ModelAttribute::VISIBILITY_PRIVATE => 'Privé', 10 | ], 11 | ]; 12 | -------------------------------------------------------------------------------- /lang/nl_NL/export.php: -------------------------------------------------------------------------------- 1 | 'Exporteren', 4 | 'start_export_html' => 'Exporteer naar HTML', 5 | 'start_export_csv' => 'Exporteer naar CSV', 6 | 7 | 'export_help' => 'Bij het uitvoeren van de export worden alle bestaande bladwijzers opgeslagen in een standaard bestand dat compatibel is met bladwijzers, of een CSV-bestand indien gewenst.', 8 | 9 | 'export_csv_error' => 'Er is een fout opgetreden bij het genereren van een CSV-bestand. Controleer de logbestanden voor meer informatie.', 10 | ]; 11 | -------------------------------------------------------------------------------- /lang/nl_NL/pagination.php: -------------------------------------------------------------------------------- 1 | '« Vorige', 17 | 'next' => 'Volgende »', 18 | 19 | ]; 20 | -------------------------------------------------------------------------------- /lang/nl_NL/placeholder.php: -------------------------------------------------------------------------------- 1 | 'janjansen', 4 | 'email' => 'jan.jansen@voorbeeld.nl', 5 | 'password' => 'Wachtwoord', 6 | 'password_confirmed' => 'Bevestigd wachtwoord', 7 | 8 | 'link_url' => 'https://github.com/Kovah/LinkAce', 9 | 'link_title' => 'Titel van de website', 10 | 11 | 'list_select' => 'Selecteer een lijst', 12 | 'tags_select' => 'Selecteer enkele tags', 13 | 14 | 'list_name' => 'Werkelijke naam van de lijst', 15 | 'tag_name' => 'Werkelijke naam van de tag', 16 | 17 | 'two_factor_otp' => 'Eenmalig wachtwoord', 18 | 'two_factor_recovery_code' => 'Herstelcode', 19 | ]; 20 | -------------------------------------------------------------------------------- /lang/nl_NL/stats.php: -------------------------------------------------------------------------------- 1 | 'Statistieken', 6 | 'total_links' => 'Totaal aantal links', 7 | 'total_lists' => 'Totaal aantal lijsten', 8 | 'total_tags' => 'Totaal aantal tags', 9 | 'total_notes' => 'Totaal aantal notities', 10 | 'total_broken_links' => 'Defecte links', 11 | 12 | ]; 13 | -------------------------------------------------------------------------------- /lang/no_NO/attributes.php: -------------------------------------------------------------------------------- 1 | [ 7 | ModelAttribute::VISIBILITY_PUBLIC => 'Offentlig', 8 | ModelAttribute::VISIBILITY_INTERNAL => 'Intern', 9 | ModelAttribute::VISIBILITY_PRIVATE => 'Privat', 10 | ], 11 | ]; 12 | -------------------------------------------------------------------------------- /lang/no_NO/audit.php: -------------------------------------------------------------------------------- 1 | 'Revisjon logg', 6 | 'system_events' => 'Systemhendelser', 7 | 'settings_history' => 'Innstillinger Historikk', 8 | 'user_history' => 'Bruker historie', 9 | 'user_history_entry' => 'Bruker :id: :change', 10 | 11 | 'no_logs_found' => 'Ingen logger funnet', 12 | 13 | 'activity_entry_with_causer' => ':change av :causer', 14 | 15 | 'logs' => [ 16 | 'system' => [ 17 | 'cron_token_regenerated' => 'System: Cron Token ble re-generert', 18 | ], 19 | 'user_settings' => [ 20 | 'api_token_generated' => 'User: API Token ble generert', 21 | 'api_token_revoken' => 'Bruker: API Token ble opphevet', 22 | ], 23 | ], 24 | ]; 25 | -------------------------------------------------------------------------------- /lang/no_NO/export.php: -------------------------------------------------------------------------------- 1 | 'Eksporter', 4 | 'start_export_html' => 'Eksporter til HTML', 5 | 'start_export_csv' => 'Eksporter til CSV', 6 | 7 | 'export_help' => 'Ved å kjøre eksporten så lagres alle eksisterende bokmerker i en vanlig bokmerker-kompatibel fil eller som en CSV-fil hvis du ønsker det.', 8 | 9 | 'export_csv_error' => 'Det oppstod en feil under forsøk på å generere en CSV-fil. Vennligst sjekk loggfilene for ytterligere detaljer.', 10 | ]; 11 | -------------------------------------------------------------------------------- /lang/no_NO/note.php: -------------------------------------------------------------------------------- 1 | 'Notat', 4 | 'notes' => 'Notater', 5 | 6 | 'add' => 'Legg til notat', 7 | 'show' => 'Vis notat', 8 | 'edit' => 'Rediger notat', 9 | 'update' => 'Oppdater notat', 10 | 'delete' => 'Slett notat', 11 | 12 | 'public' => 'Offentlig merknad', 13 | 'internal' => 'Internt notat', 14 | 'private' => 'Privat notat', 15 | 16 | 'note_content' => 'Notatinnhold', 17 | 18 | 'added_successfully' => 'Note lagt til.', 19 | 'updated_successfully' => 'Notat oppdatert.', 20 | 'deleted_successfully' => 'Notat er flyttet til papirkurven.', 21 | 'deletion_error' => 'Notatet kunne ikke flyttes til papirkurven.', 22 | ]; 23 | -------------------------------------------------------------------------------- /lang/no_NO/pagination.php: -------------------------------------------------------------------------------- 1 | '« Forrige', 17 | 'next' => 'Neste »', 18 | 19 | ]; 20 | -------------------------------------------------------------------------------- /lang/no_NO/placeholder.php: -------------------------------------------------------------------------------- 1 | 'kari normann', 4 | 'email' => 'kari.normann@eksempel.no', 5 | 'password' => 'Passord', 6 | 'password_confirmed' => 'Bekreftet passord', 7 | 8 | 'link_url' => 'https://github.com/Kovah/LinkAce', 9 | 'link_title' => 'Tittel på nettstedet', 10 | 11 | 'list_select' => 'Velg en liste', 12 | 'tags_select' => 'Velg noen etiketter', 13 | 14 | 'list_name' => 'Faktisk navn på listen', 15 | 'tag_name' => 'Faktisk navn på etiketten', 16 | 17 | 'two_factor_otp' => 'Engangspassord', 18 | 'two_factor_recovery_code' => 'Gjenopprettings kode', 19 | ]; 20 | -------------------------------------------------------------------------------- /lang/no_NO/stats.php: -------------------------------------------------------------------------------- 1 | 'Statistikk', 6 | 'total_links' => 'Totalt antall lenker', 7 | 'total_lists' => 'Totalt antall lister', 8 | 'total_tags' => 'Totalt antall etiketter', 9 | 'total_notes' => 'Totalt antall notater', 10 | 'total_broken_links' => 'Ødelagte lenker', 11 | 12 | ]; 13 | -------------------------------------------------------------------------------- /lang/pl_PL/attributes.php: -------------------------------------------------------------------------------- 1 | [ 7 | ModelAttribute::VISIBILITY_PUBLIC => 'Publiczny', 8 | ModelAttribute::VISIBILITY_INTERNAL => 'Wewnętrzny', 9 | ModelAttribute::VISIBILITY_PRIVATE => 'Prywatny', 10 | ], 11 | ]; 12 | -------------------------------------------------------------------------------- /lang/pl_PL/export.php: -------------------------------------------------------------------------------- 1 | 'Eksportuj', 4 | 'start_export_html' => 'Eksportuj do HTML', 5 | 'start_export_csv' => 'Eksportuj do CSV', 6 | 7 | 'export_help' => 'Uruchamianie eksportu spowoduje zapisanie wszystkich istniejących zakładek w zwykłym pliku kompatybilnym z zakładkami lub pliku CSV, jeśli chcesz.', 8 | 9 | 'export_csv_error' => 'Wystąpił błąd podczas próby wygenerowania pliku CSV. Proszę sprawdzić logi, aby uzyskać więcej informacji.', 10 | ]; 11 | -------------------------------------------------------------------------------- /lang/pl_PL/note.php: -------------------------------------------------------------------------------- 1 | 'Notatka', 4 | 'notes' => 'Notatki', 5 | 6 | 'add' => 'Dodaj notatkę', 7 | 'show' => 'Pokaż notatkę', 8 | 'edit' => 'Edytuj notatkę', 9 | 'update' => 'Aktualizuj notatkę', 10 | 'delete' => 'Usuń notatkę', 11 | 12 | 'public' => 'Uwaga publiczna', 13 | 'internal' => 'Uwaga wewnętrzna', 14 | 'private' => 'Notatka prywatna', 15 | 16 | 'note_content' => 'Treść notatki', 17 | 18 | 'added_successfully' => 'Notatka dodana pomyślnie.', 19 | 'updated_successfully' => 'Notatka została zaktualizowana.', 20 | 'deleted_successfully' => 'Notatka została pomyślnie przeniesiona do kosza.', 21 | 'deletion_error' => 'Notatka nie mogła zostać przeniesiona do kosza.', 22 | ]; 23 | -------------------------------------------------------------------------------- /lang/pl_PL/pagination.php: -------------------------------------------------------------------------------- 1 | '« Poprzednia', 17 | 'next' => 'Następna »', 18 | 19 | ]; 20 | -------------------------------------------------------------------------------- /lang/pl_PL/placeholder.php: -------------------------------------------------------------------------------- 1 | 'adamnowak', 4 | 'email' => 'adam.nowak@przykład.pl', 5 | 'password' => 'Hasło', 6 | 'password_confirmed' => 'Hasło potwierdzono', 7 | 8 | 'link_url' => 'https://github.com/Kovah/LinkAce', 9 | 'link_title' => 'Tytuł strony internetowej', 10 | 11 | 'list_select' => 'Wybierz listę', 12 | 'tags_select' => 'Wybierz jakieś tagi.', 13 | 14 | 'list_name' => 'Rzeczywista nazwa listy', 15 | 'tag_name' => 'Rzeczywista nazwa tagu', 16 | 17 | 'two_factor_otp' => 'Jednorazowe hasło', 18 | 'two_factor_recovery_code' => 'Kod odzyskiwania', 19 | ]; 20 | -------------------------------------------------------------------------------- /lang/pl_PL/stats.php: -------------------------------------------------------------------------------- 1 | 'Statystyki', 6 | 'total_links' => 'Wszystkich linków', 7 | 'total_lists' => 'Wszystkich list', 8 | 'total_tags' => 'Całkowita ilość tagów', 9 | 'total_notes' => 'Całkowita ilość notatek', 10 | 'total_broken_links' => 'Uszkodzonych linków', 11 | 12 | ]; 13 | -------------------------------------------------------------------------------- /lang/pt_PT/attributes.php: -------------------------------------------------------------------------------- 1 | [ 7 | ModelAttribute::VISIBILITY_PUBLIC => 'Público', 8 | ModelAttribute::VISIBILITY_INTERNAL => 'Interno', 9 | ModelAttribute::VISIBILITY_PRIVATE => 'Privado', 10 | ], 11 | ]; 12 | -------------------------------------------------------------------------------- /lang/pt_PT/export.php: -------------------------------------------------------------------------------- 1 | 'Exportar', 4 | 'start_export_html' => 'Exportação para HTML', 5 | 'start_export_csv' => 'Exportar para CSV', 6 | 7 | 'export_help' => 'Executar a exportação salvará todos os favoritos existentes em um arquivo compatível com favoritos ou um arquivo CSV, se quiser.', 8 | 9 | 'export_csv_error' => 'Ocorreu um erro ao tentar gerar um arquivo CSV. Por favor, verifique os arquivos de log para mais detalhes.', 10 | ]; 11 | -------------------------------------------------------------------------------- /lang/pt_PT/note.php: -------------------------------------------------------------------------------- 1 | 'Nota', 4 | 'notes' => 'Notas', 5 | 6 | 'add' => 'Adicionar nota', 7 | 'show' => 'Mostrar nota', 8 | 'edit' => 'Editar nota', 9 | 'update' => 'Nota de atualização', 10 | 'delete' => 'Elimina a nota', 11 | 12 | 'public' => 'Nota pública', 13 | 'internal' => 'Nota interna', 14 | 'private' => 'Nota privada', 15 | 16 | 'note_content' => 'Nota Conteúdo', 17 | 18 | 'added_successfully' => 'Nota adicionada com sucesso.', 19 | 'updated_successfully' => 'Nota actualizada com sucesso.', 20 | 'deleted_successfully' => 'Nota movida com sucesso para o lixo.', 21 | 'deletion_error' => 'Não foi possível mover a nota para o lixo.', 22 | ]; 23 | -------------------------------------------------------------------------------- /lang/pt_PT/pagination.php: -------------------------------------------------------------------------------- 1 | '« Anterior', 17 | 'next' => 'Próximo »', 18 | 19 | ]; 20 | -------------------------------------------------------------------------------- /lang/pt_PT/placeholder.php: -------------------------------------------------------------------------------- 1 | 'johndoe', 4 | 'email' => 'john.doe@example.com', 5 | 'password' => 'Palavra-passe', 6 | 'password_confirmed' => 'Palavra-passe confirmada', 7 | 8 | 'link_url' => 'https://github.com/Kovah/LinkAce', 9 | 'link_title' => 'Título do sítio Web', 10 | 11 | 'list_select' => 'Selecionar uma lista', 12 | 'tags_select' => 'Seleciona algumas etiquetas', 13 | 14 | 'list_name' => 'Nome real da lista', 15 | 'tag_name' => 'Nome real da etiqueta', 16 | 17 | 'two_factor_otp' => 'Palavra-passe única', 18 | 'two_factor_recovery_code' => 'Código de recuperação', 19 | ]; 20 | -------------------------------------------------------------------------------- /lang/pt_PT/stats.php: -------------------------------------------------------------------------------- 1 | 'Estatísticas', 6 | 'total_links' => 'Total de ligações', 7 | 'total_lists' => 'Total de listas', 8 | 'total_tags' => 'Total de etiquetas', 9 | 'total_notes' => 'Total Notas', 10 | 'total_broken_links' => 'Ligações quebradas', 11 | 12 | ]; 13 | -------------------------------------------------------------------------------- /lang/ro_RO/attributes.php: -------------------------------------------------------------------------------- 1 | [ 7 | ModelAttribute::VISIBILITY_PUBLIC => 'Public', 8 | ModelAttribute::VISIBILITY_INTERNAL => 'Interne', 9 | ModelAttribute::VISIBILITY_PRIVATE => 'Privat', 10 | ], 11 | ]; 12 | -------------------------------------------------------------------------------- /lang/ro_RO/export.php: -------------------------------------------------------------------------------- 1 | 'Exportare', 4 | 'start_export_html' => 'Exportare în HTML', 5 | 'start_export_csv' => 'Exportare în CSV', 6 | 7 | 'export_help' => 'Executarea funcției de exportare va salva toate marcajele existente într-un fișier obișnuit compatibil cu marcajele sau într-un fișier CSV, dacă se dorește acest lucru.', 8 | 9 | 'export_csv_error' => 'A apărut o eroare la generarea unui fișier CSV. Examinează fișierele de jurnal pentru mai multe detalii.', 10 | ]; 11 | -------------------------------------------------------------------------------- /lang/ro_RO/pagination.php: -------------------------------------------------------------------------------- 1 | '« Anterior', 17 | 'next' => 'Următorul »', 18 | 19 | ]; 20 | -------------------------------------------------------------------------------- /lang/ro_RO/placeholder.php: -------------------------------------------------------------------------------- 1 | 'ionpopescu', 4 | 'email' => 'ion.popescu@exemplu.ro', 5 | 'password' => 'Parolă', 6 | 'password_confirmed' => 'Parolă confirmată', 7 | 8 | 'link_url' => 'https://github.com/Kovah/LinkAce', 9 | 'link_title' => 'Titlul paginii de internet', 10 | 11 | 'list_select' => 'Selectează o listă', 12 | 'tags_select' => 'Selectează câteva etichete', 13 | 14 | 'list_name' => 'Denumirea actuală a listei', 15 | 'tag_name' => 'Denumirea actuală a etichetei', 16 | 17 | 'two_factor_otp' => 'Parolă de unică folosință', 18 | 'two_factor_recovery_code' => 'Cod de recuperare', 19 | ]; 20 | -------------------------------------------------------------------------------- /lang/ro_RO/stats.php: -------------------------------------------------------------------------------- 1 | 'Statistici', 6 | 'total_links' => 'Legături totale', 7 | 'total_lists' => 'Liste totale', 8 | 'total_tags' => 'Etichete totale', 9 | 'total_notes' => 'Observații totale', 10 | 'total_broken_links' => 'Legături nefuncționale', 11 | 12 | ]; 13 | -------------------------------------------------------------------------------- /lang/ru_RU/attributes.php: -------------------------------------------------------------------------------- 1 | [ 7 | ModelAttribute::VISIBILITY_PUBLIC => 'Публичный', 8 | ModelAttribute::VISIBILITY_INTERNAL => 'Внутренний', 9 | ModelAttribute::VISIBILITY_PRIVATE => 'Приватный', 10 | ], 11 | ]; 12 | -------------------------------------------------------------------------------- /lang/ru_RU/audit.php: -------------------------------------------------------------------------------- 1 | 'Журнал аудита', 6 | 'system_events' => 'Системные события', 7 | 'settings_history' => 'История настроек', 8 | 'user_history' => 'История пользователя', 9 | 'user_history_entry' => 'Пользователь :id: :change', 10 | 11 | 'no_logs_found' => 'Записей не найдено', 12 | 13 | 'activity_entry_with_causer' => ':change от :causer', 14 | 15 | 'logs' => [ 16 | 'system' => [ 17 | 'cron_token_regenerated' => 'Система: Токен Cron был сгенерирован повторно', 18 | ], 19 | 'user_settings' => [ 20 | 'api_token_generated' => 'API токен сгенерирован', 21 | 'api_token_revoken' => 'API-токен был отозван', 22 | ], 23 | ], 24 | ]; 25 | -------------------------------------------------------------------------------- /lang/ru_RU/export.php: -------------------------------------------------------------------------------- 1 | 'Экспорт', 4 | 'start_export_html' => 'Экспорт в HTML', 5 | 'start_export_csv' => 'Экспорт в CSV', 6 | 7 | 'export_help' => 'Запуск экспорта сохранит все существующие закладки в обычный файл, совместимый с закладками, или CSV-файл, если хотите.', 8 | 9 | 'export_csv_error' => 'При попытке сгенерировать CSV-файл произошла ошибка. Пожалуйста, проверьте файл журнала для получения более подробной информации.', 10 | ]; 11 | -------------------------------------------------------------------------------- /lang/ru_RU/note.php: -------------------------------------------------------------------------------- 1 | 'Заметка', 4 | 'notes' => 'Заметки', 5 | 6 | 'add' => 'Добавить заметку', 7 | 'show' => 'Показать заметку', 8 | 'edit' => 'Изменить заметку', 9 | 'update' => 'Обновить заметку', 10 | 'delete' => 'Удалить заметку', 11 | 12 | 'public' => 'Публичная заметка', 13 | 'internal' => 'Внутренняя заметка', 14 | 'private' => 'Личная заметка', 15 | 16 | 'note_content' => 'Содержание заметки', 17 | 18 | 'added_successfully' => 'Заметка успешно добавлена.', 19 | 'updated_successfully' => 'Заметка успешно обновлена.', 20 | 'deleted_successfully' => 'Заметка успешно перемещена в корзину.', 21 | 'deletion_error' => 'Заметку нельзя переместить в корзину.', 22 | ]; 23 | -------------------------------------------------------------------------------- /lang/ru_RU/pagination.php: -------------------------------------------------------------------------------- 1 | '« Предыдущий', 17 | 'next' => 'Следующий »', 18 | 19 | ]; 20 | -------------------------------------------------------------------------------- /lang/ru_RU/placeholder.php: -------------------------------------------------------------------------------- 1 | 'johndoe', 4 | 'email' => 'john.doe@example.com', 5 | 'password' => 'Пароль', 6 | 'password_confirmed' => 'Подтверждение пароля', 7 | 8 | 'link_url' => 'https://github.com/Kovah/LinkAce', 9 | 'link_title' => 'Заголовок сайта', 10 | 11 | 'list_select' => 'Выберите список', 12 | 'tags_select' => 'Выберите несколько тегов', 13 | 14 | 'list_name' => 'Фактическое название списка', 15 | 'tag_name' => 'Фактическое название метки', 16 | 17 | 'two_factor_otp' => 'Одноразовый пароль', 18 | 'two_factor_recovery_code' => 'Код восстановления', 19 | ]; 20 | -------------------------------------------------------------------------------- /lang/ru_RU/stats.php: -------------------------------------------------------------------------------- 1 | 'Статистика', 6 | 'total_links' => 'Всего ссылок', 7 | 'total_lists' => 'Всего списков', 8 | 'total_tags' => 'Всего тегов', 9 | 'total_notes' => 'Всего заметок', 10 | 'total_broken_links' => 'Неработающие ссылки', 11 | 12 | ]; 13 | -------------------------------------------------------------------------------- /lang/sv_SE/attributes.php: -------------------------------------------------------------------------------- 1 | [ 7 | ModelAttribute::VISIBILITY_PUBLIC => 'Allmänheten', 8 | ModelAttribute::VISIBILITY_INTERNAL => 'Internt', 9 | ModelAttribute::VISIBILITY_PRIVATE => 'Privat', 10 | ], 11 | ]; 12 | -------------------------------------------------------------------------------- /lang/sv_SE/export.php: -------------------------------------------------------------------------------- 1 | 'Exportera', 4 | 'start_export_html' => 'Exportera till HTML', 5 | 'start_export_csv' => 'Exportera till CSV', 6 | 7 | 'export_help' => 'Kör exporten kommer att spara alla befintliga bokmärken i en vanlig bokmärken-kompatibel fil, eller en CSV-fil om du vill.', 8 | 9 | 'export_csv_error' => 'Ett fel uppstod vid försök att generera en CSV-fil. Kontrollera loggfilerna för mer information.', 10 | ]; 11 | -------------------------------------------------------------------------------- /lang/sv_SE/pagination.php: -------------------------------------------------------------------------------- 1 | '« Föregående', 17 | 'next' => 'Nästa »', 18 | 19 | ]; 20 | -------------------------------------------------------------------------------- /lang/sv_SE/placeholder.php: -------------------------------------------------------------------------------- 1 | 'johndoe', 4 | 'email' => 'john.doe@exempel.se', 5 | 'password' => 'Lösenord', 6 | 'password_confirmed' => 'Bekräfta lösenord', 7 | 8 | 'link_url' => 'https://github.com/Kovah/LinkAce', 9 | 'link_title' => 'Webbplatsens titel', 10 | 11 | 'list_select' => 'Välj en lista', 12 | 'tags_select' => 'Välj några taggar', 13 | 14 | 'list_name' => 'Faktiskt namn på listan', 15 | 'tag_name' => 'Faktiskt namn på taggen', 16 | 17 | 'two_factor_otp' => 'Engångslösenord', 18 | 'two_factor_recovery_code' => 'Återställningskod', 19 | ]; 20 | -------------------------------------------------------------------------------- /lang/sv_SE/stats.php: -------------------------------------------------------------------------------- 1 | 'Statistik', 6 | 'total_links' => 'Totalt antal länkar', 7 | 'total_lists' => 'Totalt antal listor', 8 | 'total_tags' => 'Totalt antal taggar', 9 | 'total_notes' => 'Totalt antal anteckningar', 10 | 'total_broken_links' => 'Trasiga länkar', 11 | 12 | ]; 13 | -------------------------------------------------------------------------------- /lang/vendor/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /lang/vi_VN/export.php: -------------------------------------------------------------------------------- 1 | 'Xuất dữ liệu', 4 | 'start_export_html' => 'Xuất sang HTML', 5 | 'start_export_csv' => 'Xuất sang CSV', 6 | 7 | 'export_help' => 'Chạy xuất dữ liệu sẽ lưu toàn bộ các bookmarks hiện có vào file bookmarks chuẩn thông thường hoặc 1 file CSV nếu bạn muốn.', 8 | 9 | 'export_csv_error' => 'Có lỗi khi tạo file định dạng CSV. Xin vui lòng kiểm tra file nhật ký để biết thêm chi tiết.', 10 | ]; 11 | -------------------------------------------------------------------------------- /lang/vi_VN/note.php: -------------------------------------------------------------------------------- 1 | 'Ghi chú', 4 | 'notes' => 'Ghi chú', 5 | 6 | 'add' => 'Thêm ghi chú', 7 | 'show' => 'Hiện ghi chú', 8 | 'edit' => 'Sửa ghi chú', 9 | 'update' => 'Cập nhật ghi chú', 10 | 'delete' => 'Xóa ghi chú', 11 | 12 | 'private' => 'Ghi chú cá nhân', 13 | 14 | 'note_content' => 'Nội dung chi chú', 15 | 16 | 'added_successfully' => 'Ghi chú đã được thêm thành công.', 17 | 'updated_successfully' => 'Ghi chú đã được cập nhật thành công.', 18 | 'deleted_successfully' => 'Ghi chú được xóa thành công.', 19 | 'deletion_error' => 'Ghi chú không thể xóa.', 20 | ]; 21 | -------------------------------------------------------------------------------- /lang/vi_VN/pagination.php: -------------------------------------------------------------------------------- 1 | '« Trước', 17 | 'next' => 'Tiếp »', 18 | 19 | ]; 20 | -------------------------------------------------------------------------------- /lang/vi_VN/placeholder.php: -------------------------------------------------------------------------------- 1 | 'dzungdo', 4 | 'email' => 'dzungdo@f1.edu.vn', 5 | 'password' => 'Mật khẩu', 6 | 'password_confirmed' => 'Xác nhận mật khẩu', 7 | 8 | 'link_url' => 'https://github.com/Kovah/LinkAce', 9 | 'link_title' => 'Tiêu đề của website', 10 | 11 | 'list_select' => 'Chọn một danh sách', 12 | 'tags_select' => 'Lựa chọn một số thẻ', 13 | 14 | 'list_name' => 'Tên thực tế của danh sách', 15 | 'tag_name' => 'Tên thực tế của thẻ', 16 | 17 | 'two_factor_otp' => 'Mật khẩu một lần', 18 | 'two_factor_recovery_code' => 'Mã phục hồi', 19 | 20 | ]; 21 | -------------------------------------------------------------------------------- /lang/vi_VN/stats.php: -------------------------------------------------------------------------------- 1 | 'Thống kê', 6 | 'total_links' => 'Tổng số liên kết', 7 | 'total_lists' => 'Tổng số danh sách', 8 | 'total_tags' => 'Tổng số thẻ', 9 | 'total_notes' => 'Tổng số ghi chú', 10 | 'total_broken_links' => 'Liên kết hỏng', 11 | 12 | ]; 13 | -------------------------------------------------------------------------------- /lang/vi_VN/user.php: -------------------------------------------------------------------------------- 1 | 'Người dùng', 4 | 'users' => 'Người dùng', 5 | 6 | 'username' => 'Tên đăng nhập', 7 | 'email' => 'Email', 8 | 9 | 'hello' => 'Xin chào :user!', 10 | ]; 11 | -------------------------------------------------------------------------------- /lang/zh_CN/attributes.php: -------------------------------------------------------------------------------- 1 | [ 7 | ModelAttribute::VISIBILITY_PUBLIC => '公众', 8 | ModelAttribute::VISIBILITY_INTERNAL => '内部', 9 | ModelAttribute::VISIBILITY_PRIVATE => '仅自己可见', 10 | ], 11 | ]; 12 | -------------------------------------------------------------------------------- /lang/zh_CN/audit.php: -------------------------------------------------------------------------------- 1 | '审核日志', 6 | 'system_events' => '系统事件', 7 | 'settings_history' => '设置历史记录', 8 | 'user_history' => '用户历史', 9 | 'user_history_entry' => '用户 :id: :change', 10 | 11 | 'no_logs_found' => '未找到日志', 12 | 13 | 'activity_entry_with_causer' => ':change by :causer', 14 | 15 | 'logs' => [ 16 | 'system' => [ 17 | 'cron_token_regenerated' => '系统:重新生成了 Cron Token', 18 | ], 19 | 'user_settings' => [ 20 | 'api_token_generated' => '用户:已生成应用程序接口令牌', 21 | 'api_token_revoken' => '用户:API 令牌已撤销', 22 | ], 23 | ], 24 | ]; 25 | -------------------------------------------------------------------------------- /lang/zh_CN/export.php: -------------------------------------------------------------------------------- 1 | '导出', 4 | 'start_export_html' => '导出至HTML', 5 | 'start_export_csv' => '导出至 CSV', 6 | 7 | 'export_help' => '运行导出将会将所有现有书签保存到一个普通书签兼容的文件,或者如果您想要的话,将会保存到一个 CSV 文件。', 8 | 9 | 'export_csv_error' => '尝试生成 CSV 文件时发生错误。请检查日志文件的详细信息。', 10 | ]; 11 | -------------------------------------------------------------------------------- /lang/zh_CN/import.php: -------------------------------------------------------------------------------- 1 | '导入', 4 | 'import_queue' => '导入队列', 5 | 'failed_imports' => '失败的进口', 6 | 'scheduled_for' => '计划于', 7 | 'start_import' => '开始导入', 8 | 'import_running' => '正在运行导入...', 9 | 'import_file' => '从文件中导入', 10 | 11 | 'import_help' => '您可以在此导入现有的浏览器书签。通常,浏览器会将书签导出为 .html 文件。在此选择文件并开始导入。请注意,必须配置 cron 才能进行导入。', 12 | 13 | 'import_networkerror' => '试图导入书签时出错。请检查您的浏览器控制台的详细信息或查看应用程序日志。', 14 | 'import_error' => '试图导入书签时出错。请查询应用程序日志。', 15 | 'import_empty' => '无法导入任何书签。上传的文件可能已损坏或为空。', 16 | 'import_successfully' => ':queued links 是排队等待导入的链接,将被连续处理。 :skipped links 被跳过是因为它们已经存在于数据库中。所有导入的链接都将被赋予 :taglink 标签。', 17 | ]; 18 | -------------------------------------------------------------------------------- /lang/zh_CN/note.php: -------------------------------------------------------------------------------- 1 | '注释', 4 | 'notes' => '备注', 5 | 6 | 'add' => '添加注释', 7 | 'show' => '显示备注', 8 | 'edit' => '编辑注释', 9 | 'update' => '更新注释', 10 | 'delete' => '删除注释', 11 | 12 | 'public' => '公开说明', 13 | 'internal' => '内部说明', 14 | 'private' => '私人注释', 15 | 16 | 'note_content' => '备注内容', 17 | 18 | 'added_successfully' => '已添加注释。', 19 | 'updated_successfully' => '已更新注释。', 20 | 'deleted_successfully' => '注释已成功移至垃圾桶。', 21 | 'deletion_error' => 'Note 无法移至垃圾桶。', 22 | ]; 23 | -------------------------------------------------------------------------------- /lang/zh_CN/pagination.php: -------------------------------------------------------------------------------- 1 | '« 前进', 17 | 'next' => '后退 »', 18 | 19 | ]; 20 | -------------------------------------------------------------------------------- /lang/zh_CN/passwords.php: -------------------------------------------------------------------------------- 1 | '密码必须至少包含六个字符,并且与确认字符匹配。', 17 | 'reset' => '您的密码已重置!', 18 | 'sent' => '如果您的电子邮件地址存在账户,我们已通过电子邮件向您发送了密码重置链接。', 19 | 'token' => '此密码重置令牌无效。', 20 | 'user' => "我们没有找到使用这个邮箱地址的用户。", 21 | 22 | ]; 23 | -------------------------------------------------------------------------------- /lang/zh_CN/placeholder.php: -------------------------------------------------------------------------------- 1 | 'johndoe', 4 | 'email' => 'john.doe@example.com', 5 | 'password' => '密码', 6 | 'password_confirmed' => '已确认密码', 7 | 8 | 'link_url' => 'https://github.com/Kovah/LinkAce', 9 | 'link_title' => '网站标题', 10 | 11 | 'list_select' => '选择列表', 12 | 'tags_select' => '选择标签', 13 | 14 | 'list_name' => '列表的实际名称', 15 | 'tag_name' => '标签的实际名称', 16 | 17 | 'two_factor_otp' => '一次性密码', 18 | 'two_factor_recovery_code' => '恢复码', 19 | ]; 20 | -------------------------------------------------------------------------------- /lang/zh_CN/stats.php: -------------------------------------------------------------------------------- 1 | '统计', 6 | 'total_links' => '全部链接', 7 | 'total_lists' => '全部列表', 8 | 'total_tags' => '所有标签', 9 | 'total_notes' => '全部备注', 10 | 'total_broken_links' => '失效链接', 11 | 12 | ]; 13 | -------------------------------------------------------------------------------- /phpcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | KVH Code Standard ruleset 4 | 5 | 6 | ./app 7 | ./database/factories 8 | ./database/seeders 9 | ./tests 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | */tests/* 19 | 20 | 21 | 22 | 0 23 | 24 | 25 | -------------------------------------------------------------------------------- /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 | # Handle Front Controller... 18 | RewriteCond %{REQUEST_FILENAME} !-d 19 | RewriteCond %{REQUEST_FILENAME} !-f 20 | RewriteRule ^ index.php [L] 21 | 22 | -------------------------------------------------------------------------------- /public/android-chrome-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kovah/LinkAce/78ae9a2a073164cd1789859e8a690c11fc2b99c0/public/android-chrome-192x192.png -------------------------------------------------------------------------------- /public/android-chrome-384x384.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kovah/LinkAce/78ae9a2a073164cd1789859e8a690c11fc2b99c0/public/android-chrome-384x384.png -------------------------------------------------------------------------------- /public/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kovah/LinkAce/78ae9a2a073164cd1789859e8a690c11fc2b99c0/public/apple-touch-icon.png -------------------------------------------------------------------------------- /public/assets/.gitignore: -------------------------------------------------------------------------------- 1 | dist 2 | -------------------------------------------------------------------------------- /public/assets/fonts/IBMPlexSans-Bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kovah/LinkAce/78ae9a2a073164cd1789859e8a690c11fc2b99c0/public/assets/fonts/IBMPlexSans-Bold.woff -------------------------------------------------------------------------------- /public/assets/fonts/IBMPlexSans-Bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kovah/LinkAce/78ae9a2a073164cd1789859e8a690c11fc2b99c0/public/assets/fonts/IBMPlexSans-Bold.woff2 -------------------------------------------------------------------------------- /public/assets/fonts/IBMPlexSans-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kovah/LinkAce/78ae9a2a073164cd1789859e8a690c11fc2b99c0/public/assets/fonts/IBMPlexSans-Regular.woff -------------------------------------------------------------------------------- /public/assets/fonts/IBMPlexSans-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kovah/LinkAce/78ae9a2a073164cd1789859e8a690c11fc2b99c0/public/assets/fonts/IBMPlexSans-Regular.woff2 -------------------------------------------------------------------------------- /public/assets/fonts/IBMPlexSansCondensed-Bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kovah/LinkAce/78ae9a2a073164cd1789859e8a690c11fc2b99c0/public/assets/fonts/IBMPlexSansCondensed-Bold.woff -------------------------------------------------------------------------------- /public/assets/fonts/IBMPlexSansCondensed-Bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kovah/LinkAce/78ae9a2a073164cd1789859e8a690c11fc2b99c0/public/assets/fonts/IBMPlexSansCondensed-Bold.woff2 -------------------------------------------------------------------------------- /public/assets/fonts/IBMPlexSansCondensed-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kovah/LinkAce/78ae9a2a073164cd1789859e8a690c11fc2b99c0/public/assets/fonts/IBMPlexSansCondensed-Regular.woff -------------------------------------------------------------------------------- /public/assets/fonts/IBMPlexSansCondensed-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kovah/LinkAce/78ae9a2a073164cd1789859e8a690c11fc2b99c0/public/assets/fonts/IBMPlexSansCondensed-Regular.woff2 -------------------------------------------------------------------------------- /public/assets/img/linkace-social.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kovah/LinkAce/78ae9a2a073164cd1789859e8a690c11fc2b99c0/public/assets/img/linkace-social.jpg -------------------------------------------------------------------------------- /public/assets/img/linkace_logo_padded.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kovah/LinkAce/78ae9a2a073164cd1789859e8a690c11fc2b99c0/public/assets/img/linkace_logo_padded.png -------------------------------------------------------------------------------- /public/browserconfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | #ffffff 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /public/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kovah/LinkAce/78ae9a2a073164cd1789859e8a690c11fc2b99c0/public/favicon-16x16.png -------------------------------------------------------------------------------- /public/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kovah/LinkAce/78ae9a2a073164cd1789859e8a690c11fc2b99c0/public/favicon-32x32.png -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kovah/LinkAce/78ae9a2a073164cd1789859e8a690c11fc2b99c0/public/favicon.ico -------------------------------------------------------------------------------- /public/favicon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /public/manifest.webapp: -------------------------------------------------------------------------------- 1 | { 2 | "version": "2.0.0", 3 | "name": "LinkAce", 4 | "launch_path": "/", 5 | "description": "LinkAce is a self-hosted tool for effortlessly archiving, organizing, and sharing your favorite web links", 6 | "icons": { 7 | "128": "/android-chrome-192x192.png" 8 | }, 9 | "developer": { 10 | "name": "Kevin Woblick", 11 | "url": "https://www.linkace.org/" 12 | }, 13 | "installs_allowed_from": [ 14 | "*" 15 | ], 16 | "default_locale": "en", 17 | "permissions": {}, 18 | "locales": { 19 | "en": { 20 | "name": "LinkAce", 21 | "description": "LinkAce is a self-hosted tool for effortlessly archiving, organizing, and sharing your favorite web links" 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /public/mstile-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kovah/LinkAce/78ae9a2a073164cd1789859e8a690c11fc2b99c0/public/mstile-150x150.png -------------------------------------------------------------------------------- /public/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Disallow: 3 | -------------------------------------------------------------------------------- /public/site.webmanifest: -------------------------------------------------------------------------------- 1 | { 2 | "name": "LinkAce", 3 | "short_name": "LinkAce", 4 | "icons": [ 5 | { 6 | "src": "/android-chrome-192x192.png", 7 | "sizes": "192x192", 8 | "type": "image/png" 9 | }, 10 | { 11 | "src": "/android-chrome-384x384.png", 12 | "sizes": "384x384", 13 | "type": "image/png" 14 | } 15 | ], 16 | "theme_color": "#44679F", 17 | "background_color": "#ffffff", 18 | "display": "standalone" 19 | } 20 | -------------------------------------------------------------------------------- /resources/assets/js/components/Base.js: -------------------------------------------------------------------------------- 1 | export default class Base { 2 | 3 | constructor () { 4 | this.initAppData(); 5 | this.initBootstrapTooltips(); 6 | } 7 | 8 | initAppData () { 9 | // Load data passed by the backend to the JS 10 | let data = document.querySelector('meta[property="la-app-data"]')?.getAttribute('content'); 11 | if (data) { 12 | window.appData = JSON.parse(data); 13 | } 14 | } 15 | 16 | initBootstrapTooltips () { 17 | const tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]')) 18 | tooltipTriggerList.map(function (tooltipTriggerEl) { 19 | return new bootstrap.Tooltip(tooltipTriggerEl) 20 | }) 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /resources/assets/js/components/BookmarkTimer.js: -------------------------------------------------------------------------------- 1 | export default class BookmarkTimer { 2 | 3 | constructor ($el) { 4 | this.$el = $el; 5 | this.init(); 6 | } 7 | 8 | init () { 9 | window.setInterval(() => { 10 | this.$el.innerText = parseInt(this.$el.innerText) - 1; 11 | }, 1000); 12 | 13 | window.setTimeout(() => { 14 | window.close(); 15 | }, 5000); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /resources/assets/js/components/LoadingButton.js: -------------------------------------------------------------------------------- 1 | export default class LoadingButton { 2 | 3 | constructor ($el) { 4 | this.$btn = $el; 5 | this.$form = this.$btn.form; 6 | 7 | this.$btn.addEventListener('click', this.onClick.bind(this)); 8 | } 9 | 10 | onClick (event) { 11 | if (this.$form.checkValidity()) { 12 | if (typeof this.$form.dataset.confirmation !== 'undefined' && confirm(this.$form.dataset.confirmation) === false) { 13 | event.preventDefault(); 14 | return; 15 | } 16 | this.$btn.disabled = true; 17 | this.$form.submit(); 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /resources/assets/js/components/OpenLinksInTabs.js: -------------------------------------------------------------------------------- 1 | export default class OpenLinksInTabs { 2 | 3 | constructor ($el) { 4 | this.$toggle = $el; 5 | this.state = false; 6 | 7 | this.$toggle.addEventListener('click', this.onToggleClick.bind(this)); 8 | } 9 | 10 | onToggleClick () { 11 | const links = document.querySelectorAll('.link-wrapper .link-url'); 12 | 13 | links.forEach((link, index) => { 14 | window.open(link.href); 15 | }); 16 | 17 | const domain = window.location.protocol + "//" + window.location.host; 18 | console.info(`If only one tab is opening, please allow popups for ${domain} in your browser.`); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /resources/assets/js/components/ShareToggleAll.js: -------------------------------------------------------------------------------- 1 | export default class ShareToggleAll { 2 | 3 | constructor ($el) { 4 | this.$toggle = $el; 5 | this.state = false; 6 | this.shareToggles = document.documentElement.querySelectorAll('.sharing-checkbox-input'); 7 | 8 | this.$toggle.addEventListener('click', this.onToggleClick.bind(this)); 9 | } 10 | 11 | onToggleClick () { 12 | this.state = !this.state 13 | this.shareToggles.forEach(toggle => { 14 | toggle.checked = this.state; 15 | }) 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /resources/assets/js/lib/helper.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Debounce a function with a given timeout 3 | * 4 | * @see https://gist.github.com/makenova/7885923 5 | * @param {CallableFunction} callback 6 | * @param {int} [timeout=500] timeout 7 | */ 8 | export function debounce (callback, timeout = 500) { 9 | if (window.timeoutId) { 10 | window.clearTimeout(window.timeoutId); 11 | } 12 | 13 | window.timeoutId = window.setTimeout(function () { 14 | callback(); 15 | }, timeout); 16 | } 17 | -------------------------------------------------------------------------------- /resources/assets/sass/app-dark.scss: -------------------------------------------------------------------------------- 1 | @import "fonts"; 2 | // Bootstrap import 3 | @import "~bootstrap/scss/functions"; 4 | @import "variables"; 5 | @import "variables-dark"; 6 | @import "third-party/bootstrap/bootstrap5"; 7 | // Tom Select 8 | @import "third-party/tom-select/variables"; 9 | @import "third-party/tom-select/variables-dark"; 10 | @import "third-party/tom-select/select"; 11 | // Custom styles 12 | @import "custom/app"; 13 | @import "custom/helper"; 14 | @import "custom/fixes"; 15 | @import "custom/dark-fixes"; 16 | -------------------------------------------------------------------------------- /resources/assets/sass/app.scss: -------------------------------------------------------------------------------- 1 | @import "fonts"; 2 | // Bootstrap import 3 | @import "~bootstrap/scss/functions"; 4 | @import "variables"; 5 | @import "third-party/bootstrap/bootstrap5"; 6 | // Tom Select 7 | @import "third-party/tom-select/variables"; 8 | @import "third-party/tom-select/select"; 9 | // Custom styles 10 | @import "custom/app"; 11 | @import "custom/helper"; 12 | @import "custom/fixes"; 13 | -------------------------------------------------------------------------------- /resources/assets/sass/custom/_dark-fixes.scss: -------------------------------------------------------------------------------- 1 | .form-control { 2 | 3 | &:disabled, 4 | &[readonly] { 5 | opacity: .5; 6 | } 7 | } 8 | 9 | .card { 10 | box-shadow: $box-shadow-sm; 11 | border-left: 0; 12 | border-right: 0; 13 | border-color: transparent; 14 | } 15 | 16 | .card-table { 17 | padding: 0 1px; 18 | } 19 | 20 | .table thead th { 21 | border-top: 0; 22 | } 23 | -------------------------------------------------------------------------------- /resources/assets/sass/third-party/tom-select/_select.scss: -------------------------------------------------------------------------------- 1 | @import "~tom-select/src/scss/tom-select.bootstrap5"; 2 | 3 | .#{$select-ns}-control { 4 | > input::placeholder { 5 | color: $input-placeholder-color; 6 | } 7 | 8 | .item.active .text-muted { 9 | color: $select-color-input !important; 10 | } 11 | } 12 | 13 | .#{$select-ns}-dropdown, 14 | .#{$select-ns}-dropdown.form-control, 15 | .#{$select-ns}-dropdown.form-select { 16 | border: 1px solid $select-color-dropdown-border-top; 17 | } 18 | -------------------------------------------------------------------------------- /resources/docker/Caddyfile: -------------------------------------------------------------------------------- 1 | { 2 | servers { 3 | trusted_proxies static private_ranges 4 | } 5 | } 6 | 7 | :{$PORT:80} { 8 | root * /app/public 9 | encode zstd gzip 10 | php_fastcgi {$CADDY_PHP_HOST:php}:9000 11 | file_server 12 | } 13 | -------------------------------------------------------------------------------- /resources/docker/dockerfiles/release-base.Dockerfile: -------------------------------------------------------------------------------- 1 | FROM docker.io/library/php:8.4-fpm-alpine 2 | 3 | # Install package and PHP dependencies 4 | RUN apk add --no-cache mariadb-client postgresql-client postgresql-dev sqlite zip libzip-dev supervisor \ 5 | && docker-php-ext-install bcmath pdo_mysql pdo_pgsql zip ftp \ 6 | && mkdir /ssl-certs \ 7 | && mkdir /etc/supervisor.d \ 8 | && mkdir /etc/caddy \ 9 | && docker-php-source delete \ 10 | && rm -f /usr/src/php.tar.xz /usr/src/php.tar.xz.asc \ 11 | && apk del --no-cache postgresql-dev 12 | 13 | # Copy Caddy executable 14 | COPY --from=caddy:2 /usr/bin/caddy /usr/bin/caddy 15 | -------------------------------------------------------------------------------- /resources/docker/php/php-dev.ini: -------------------------------------------------------------------------------- 1 | 2 | ; miscellaneous 3 | ; ------------- 4 | 5 | expose_php = Off 6 | 7 | ; resource limits 8 | ; --------------- 9 | 10 | max_execution_time = 90 11 | max_input_time = 90 12 | memory_limit = -1 13 | upload_max_filesize = 20M 14 | post_max_size = 20M 15 | 16 | ; xDebug 17 | ; ------- 18 | 19 | xdebug.mode = profile 20 | xdebug.client_host = docker.for.mac.localhost 21 | xdebug.client_port = 9003 22 | xdebug.idekey = docker 23 | xdebug.start_with_request = yes 24 | xdebug.log = /tmp/xdebug_remote.log 25 | 26 | ; opcache 27 | ; ------- 28 | 29 | opcache.enable = 1 30 | opcache.revalidate_freq = 2 31 | opcache.validate_timestamps = 1 32 | opcache.interned_strings_buffer = 32 33 | opcache.memory_consumption = 256 34 | -------------------------------------------------------------------------------- /resources/docker/php/php.ini: -------------------------------------------------------------------------------- 1 | 2 | ; miscellaneous 3 | ; ------------- 4 | 5 | expose_php = Off 6 | error_reporting = E_ALL & ~E_DEPRECATED & ~E_USER_DEPRECATED 7 | 8 | ; resource limits 9 | ; --------------- 10 | 11 | max_execution_time = 60 12 | max_input_time = 60 13 | memory_limit = 256M 14 | upload_max_filesize = 20M 15 | post_max_size = 20M 16 | 17 | ; opcache 18 | ; ------- 19 | 20 | opcache.enable = 1 21 | opcache.validate_timestamps = 0 22 | opcache.interned_strings_buffer = 32 23 | opcache.memory_consumption = 256 24 | -------------------------------------------------------------------------------- /resources/docker/ssl.Caddyfile: -------------------------------------------------------------------------------- 1 | { 2 | servers { 3 | trusted_proxies static private_ranges 4 | } 5 | } 6 | 7 | {$LINKACE_DOMAIN} { 8 | root * /app/public 9 | encode zstd gzip 10 | php_fastcgi {$CADDY_PHP_HOST:php}:9000 11 | file_server 12 | } 13 | -------------------------------------------------------------------------------- /resources/docker/supervisord.ini: -------------------------------------------------------------------------------- 1 | [supervisord] 2 | nodaemon=true 3 | directory=/tmp 4 | pidfile=/tmp/supervisord.pid 5 | logfile=/tmp/supervisord.log 6 | logfile_maxbytes=50MB 7 | logfile_backups=0 8 | loglevel=info 9 | 10 | [program:php-fpm] 11 | command=/usr/local/sbin/php-fpm -F 12 | stdout_logfile=/dev/stdout 13 | stdout_logfile_maxbytes=0 14 | stderr_logfile=/dev/stderr 15 | stderr_logfile_maxbytes=0 16 | priority=10 17 | autorestart=unexpected 18 | 19 | [program:caddy] 20 | command=/usr/bin/caddy run --config /etc/caddy/Caddyfile 21 | stdout_logfile=/dev/stdout 22 | stdout_logfile_maxbytes=0 23 | stderr_logfile=/dev/stderr 24 | stderr_logfile_maxbytes=0 25 | priority=20 26 | autorestart=unexpected 27 | -------------------------------------------------------------------------------- /resources/views/admin/system-settings/index.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.app') 2 | 3 | @section('content') 4 | 5 | @include('admin.system-settings.partials.updates') 6 | 7 | @include('admin.system-settings.partials.cron') 8 | 9 | @include('admin.system-settings.partials.general-settings') 10 | 11 | @include('admin.system-settings.partials.guest-settings') 12 | 13 | @endsection 14 | -------------------------------------------------------------------------------- /resources/views/admin/system-settings/partials/updates.blade.php: -------------------------------------------------------------------------------- 1 |
2 |
3 | @lang('settings.update_check') 4 |
5 |
6 |

@lang('linkace.version', ['version' => $linkaceVersion])

7 | 8 |
9 |
10 | -------------------------------------------------------------------------------- /resources/views/admin/users/index.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.app') 2 | 3 | @section('content') 4 | 5 | @include('admin.users.partials.user-list') 6 | @include('admin.users.partials.invitations') 7 | 8 | @endsection 9 | -------------------------------------------------------------------------------- /resources/views/app/bookmarklet/complete.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.bookmarklet') 2 | 3 | @section('content') 4 | 5 |
6 |

@lang('linkace.bookmarklet_close')

7 | 8 | 9 | 10 | @lang('linkace.open_linkace') 11 | 12 |
13 | 14 | @endsection 15 | -------------------------------------------------------------------------------- /resources/views/app/bookmarklet/create.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.bookmarklet') 2 | 3 | @section('content') 4 | @include('models.links.partials.create-form') 5 | @endsection 6 | -------------------------------------------------------------------------------- /resources/views/app/bookmarklet/login.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.bookmarklet') 2 | 3 | @section('content') 4 | @if(config('auth.sso.regular_login_disabled') !== true) 5 | @include('auth.login-form') 6 | @endif 7 | @if(config('auth.sso.enabled') === true) 8 | @include('auth.oauth') 9 | @endif 10 | @endsection 11 | -------------------------------------------------------------------------------- /resources/views/app/contact.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.app') 2 | 3 | @section('content') 4 |
5 |

{{ $title ?? trans('linkace.contact') }}

6 | 7 |
8 |
9 | {!! \Illuminate\Support\Str::markdown($content) !!} 10 |
11 |
12 |
13 | @endsection 14 | -------------------------------------------------------------------------------- /resources/views/app/export/html-export.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | {{ config('app.name') }} 7 |
8 |

9 | @foreach($links as $link) 10 |

11 | tags) TAGS="{{ implode(',', $link->tags->pluck('name')->all()) }}" @endif >{{ $link->title }} 12 | @if($link->description) 13 |
{{ $link->description }} 14 | @endif 15 | @endforeach 16 |
17 | -------------------------------------------------------------------------------- /resources/views/app/settings/partials/bookmarklet.blade.php: -------------------------------------------------------------------------------- 1 |
2 |
3 | @lang('settings.bookmarklet') 4 |
5 |
6 | 7 |

@lang('settings.bookmarklet_help')

8 | 9 | 10 | @lang('settings.bookmarklet') 11 | 12 | 13 |

@lang('settings.bookmarklet_button')

14 | 15 |
16 |
17 | -------------------------------------------------------------------------------- /resources/views/app/settings/user.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.app') 2 | 3 | @section('content') 4 | 5 | @include('app.settings.partials.bookmarklet') 6 | 7 | @include('app.settings.partials.account-settings') 8 | 9 | @include('app.settings.partials.change-pw') 10 | 11 | @include('app.settings.partials.two-factor') 12 | 13 | @include('app.settings.partials.app-settings') 14 | 15 | @endsection 16 | -------------------------------------------------------------------------------- /resources/views/auth/login.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.auth') 2 | 3 | @section('content') 4 | 5 |
6 |
7 | @if(config('app.demo')) 8 |
@lang('linkace.demo_login_hint')
9 | @endif 10 | @include('partials.alerts') 11 | @if(config('auth.sso.regular_login_disabled') !== true) 12 | @include('auth.login-form') 13 | @endif 14 | @if(config('auth.sso.enabled') === true) 15 | @include('auth.oauth') 16 | @endif 17 |
18 |
19 | 20 | @endsection 21 | -------------------------------------------------------------------------------- /resources/views/auth/oauth.blade.php: -------------------------------------------------------------------------------- 1 |
2 |
3 |

@lang('linkace.login_with')

4 |
5 | @foreach(config('auth.sso.providers') as $provider) 6 | @if(config('services.'.$provider.'.enabled') === true) 7 | 8 | @lang('auth.sso_provider.'.$provider) 9 | 10 | @endif 11 | @endforeach 12 |
13 |
14 |
15 | -------------------------------------------------------------------------------- /resources/views/components/forms/visibility-options.blade.php: -------------------------------------------------------------------------------- 1 | @props(['setting']) 2 | 6 | 10 | 14 | -------------------------------------------------------------------------------- /resources/views/components/forms/yes-no-options.blade.php: -------------------------------------------------------------------------------- 1 | @props(['setting']) 2 | 5 | 8 | -------------------------------------------------------------------------------- /resources/views/components/history-entry.blade.php: -------------------------------------------------------------------------------- 1 | @foreach($changes as $change) 2 |
{{ $timestamp }}: {!! $change !!}
3 | @endforeach 4 | -------------------------------------------------------------------------------- /resources/views/components/icon/ban.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'icon', 'viewBox' =>'0 0 512 512', 'xmlns' => 'http://www.w3.org/2000/svg', 'aria-hidden' => 'true', 'focusable' => 'false']) }}> 2 | -------------------------------------------------------------------------------- /resources/views/components/icon/bookmark.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'icon', 'viewBox' =>'0 0 384 512', 'xmlns' => 'http://www.w3.org/2000/svg', 'aria-hidden' => 'true', 'focusable' => 'false']) }}> 2 | -------------------------------------------------------------------------------- /resources/views/components/icon/brand/apple.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'icon', 'viewBox' =>'0 0 384 512', 'xmlns' => 'http://www.w3.org/2000/svg', 'aria-hidden' => 'true', 'focusable' => 'false']) }}> 2 | -------------------------------------------------------------------------------- /resources/views/components/icon/brand/artstation.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'icon', 'viewBox' =>'0 0 512 512', 'xmlns' => 'http://www.w3.org/2000/svg', 'aria-hidden' => 'true', 'focusable' => 'false']) }}> 2 | -------------------------------------------------------------------------------- /resources/views/components/icon/brand/atlassian.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'icon', 'viewBox' =>'0 0 512 512', 'xmlns' => 'http://www.w3.org/2000/svg', 'aria-hidden' => 'true', 'focusable' => 'false']) }}> 2 | -------------------------------------------------------------------------------- /resources/views/components/icon/brand/azure.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'icon', 'viewBox' =>'0 0 448 512', 'xmlns' => 'http://www.w3.org/2000/svg', 'aria-hidden' => 'true', 'focusable' => 'false']) }}> 2 | -------------------------------------------------------------------------------- /resources/views/components/icon/brand/bandcamp.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'icon', 'viewBox' =>'0 0 512 512', 'xmlns' => 'http://www.w3.org/2000/svg', 'aria-hidden' => 'true', 'focusable' => 'false']) }}> 2 | -------------------------------------------------------------------------------- /resources/views/components/icon/brand/bitbucket.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'icon', 'viewBox' =>'0 0 512 512', 'xmlns' => 'http://www.w3.org/2000/svg', 'aria-hidden' => 'true', 'focusable' => 'false']) }}> 2 | -------------------------------------------------------------------------------- /resources/views/components/icon/brand/bluesky.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'icon']) }} xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512" aria-hidden="true" focusable="false"> 2 | -------------------------------------------------------------------------------- /resources/views/components/icon/brand/chrome.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'icon', 'viewBox' =>'0 0 496 512', 'xmlns' => 'http://www.w3.org/2000/svg', 'aria-hidden' => 'true', 'focusable' => 'false']) }}> 2 | -------------------------------------------------------------------------------- /resources/views/components/icon/brand/deviantart.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'icon', 'viewBox' =>'0 0 320 512', 'xmlns' => 'http://www.w3.org/2000/svg', 'aria-hidden' => 'true', 'focusable' => 'false']) }}> 2 | -------------------------------------------------------------------------------- /resources/views/components/icon/brand/dropbox.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'icon', 'viewBox' =>'0 0 528 512', 'xmlns' => 'http://www.w3.org/2000/svg', 'aria-hidden' => 'true', 'focusable' => 'false']) }}> 2 | -------------------------------------------------------------------------------- /resources/views/components/icon/brand/facebook.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'icon', 'viewBox' =>'0 0 448 512', 'xmlns' => 'http://www.w3.org/2000/svg', 'aria-hidden' => 'true', 'focusable' => 'false']) }}> 2 | -------------------------------------------------------------------------------- /resources/views/components/icon/brand/flickr.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'icon', 'viewBox' =>'0 0 448 512', 'xmlns' => 'http://www.w3.org/2000/svg', 'aria-hidden' => 'true', 'focusable' => 'false']) }}> 2 | -------------------------------------------------------------------------------- /resources/views/components/icon/brand/flipboard.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'icon', 'viewBox' =>'0 0 448 512', 'xmlns' => 'http://www.w3.org/2000/svg', 'aria-hidden' => 'true', 'focusable' => 'false']) }}> 2 | -------------------------------------------------------------------------------- /resources/views/components/icon/brand/get-pocket.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'icon', 'viewBox' =>'0 0 448 512', 'xmlns' => 'http://www.w3.org/2000/svg', 'aria-hidden' => 'true', 'focusable' => 'false']) }}> 2 | -------------------------------------------------------------------------------- /resources/views/components/icon/brand/gitlab.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'icon', 'viewBox' =>'0 0 512 512', 'xmlns' => 'http://www.w3.org/2000/svg', 'aria-hidden' => 'true', 'focusable' => 'false']) }}> 2 | -------------------------------------------------------------------------------- /resources/views/components/icon/brand/gitter.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'icon', 'viewBox' =>'0 0 384 512', 'xmlns' => 'http://www.w3.org/2000/svg', 'aria-hidden' => 'true', 'focusable' => 'false']) }}> 2 | -------------------------------------------------------------------------------- /resources/views/components/icon/brand/google-drive.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'icon', 'viewBox' =>'0 0 512 512', 'xmlns' => 'http://www.w3.org/2000/svg', 'aria-hidden' => 'true', 'focusable' => 'false']) }}> 2 | -------------------------------------------------------------------------------- /resources/views/components/icon/brand/google-play.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'icon', 'viewBox' =>'0 0 512 512', 'xmlns' => 'http://www.w3.org/2000/svg', 'aria-hidden' => 'true', 'focusable' => 'false']) }}> 2 | -------------------------------------------------------------------------------- /resources/views/components/icon/brand/google.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'icon', 'viewBox' =>'0 0 488 512', 'xmlns' => 'http://www.w3.org/2000/svg', 'aria-hidden' => 'true', 'focusable' => 'false']) }}> 2 | -------------------------------------------------------------------------------- /resources/views/components/icon/brand/hacker-news.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'icon', 'viewBox' =>'0 0 448 512', 'xmlns' => 'http://www.w3.org/2000/svg', 'aria-hidden' => 'true', 'focusable' => 'false']) }}> 2 | -------------------------------------------------------------------------------- /resources/views/components/icon/brand/keycloak.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'icon', 'aria-label' => 'Keycloak']) }} xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"> 2 | -------------------------------------------------------------------------------- /resources/views/components/icon/brand/kickstarter.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'icon', 'viewBox' =>'0 0 448 512', 'xmlns' => 'http://www.w3.org/2000/svg', 'aria-hidden' => 'true', 'focusable' => 'false']) }}> 2 | -------------------------------------------------------------------------------- /resources/views/components/icon/brand/linkedin.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'icon', 'viewBox' =>'0 0 448 512', 'xmlns' => 'http://www.w3.org/2000/svg', 'aria-hidden' => 'true', 'focusable' => 'false']) }}> 2 | -------------------------------------------------------------------------------- /resources/views/components/icon/brand/medium.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'icon', 'viewBox' =>'0 0 448 512', 'xmlns' => 'http://www.w3.org/2000/svg', 'aria-hidden' => 'true', 'focusable' => 'false']) }}> 2 | -------------------------------------------------------------------------------- /resources/views/components/icon/brand/microsoft.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'icon', 'viewBox' =>'0 0 448 512', 'xmlns' => 'http://www.w3.org/2000/svg', 'aria-hidden' => 'true', 'focusable' => 'false']) }}> 2 | -------------------------------------------------------------------------------- /resources/views/components/icon/brand/npm.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'icon', 'viewBox' =>'0 0 576 512', 'xmlns' => 'http://www.w3.org/2000/svg', 'aria-hidden' => 'true', 'focusable' => 'false']) }}> 2 | -------------------------------------------------------------------------------- /resources/views/components/icon/brand/oidc.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'icon', 'aria-label' => 'OpenID Connect']) }} xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"> 2 | -------------------------------------------------------------------------------- /resources/views/components/icon/brand/openid.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'icon', 'viewBox' =>'0 0 448 512', 'xmlns' => 'http://www.w3.org/2000/svg', 'aria-hidden' => 'true', 'focusable' => 'false']) }}> 2 | -------------------------------------------------------------------------------- /resources/views/components/icon/brand/patreon.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'icon', 'viewBox' =>'0 0 512 512', 'xmlns' => 'http://www.w3.org/2000/svg', 'aria-hidden' => 'true', 'focusable' => 'false']) }}> 2 | -------------------------------------------------------------------------------- /resources/views/components/icon/brand/paypal.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'icon', 'viewBox' =>'0 0 384 512', 'xmlns' => 'http://www.w3.org/2000/svg', 'aria-hidden' => 'true', 'focusable' => 'false']) }}> 2 | -------------------------------------------------------------------------------- /resources/views/components/icon/brand/product-hunt.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'icon', 'viewBox' =>'0 0 512 512', 'xmlns' => 'http://www.w3.org/2000/svg', 'aria-hidden' => 'true', 'focusable' => 'false']) }}> 2 | -------------------------------------------------------------------------------- /resources/views/components/icon/brand/quora.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'icon', 'viewBox' =>'0 0 448 512', 'xmlns' => 'http://www.w3.org/2000/svg', 'aria-hidden' => 'true', 'focusable' => 'false']) }}> 2 | -------------------------------------------------------------------------------- /resources/views/components/icon/brand/stack-exchange.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'icon', 'viewBox' =>'0 0 448 512', 'xmlns' => 'http://www.w3.org/2000/svg', 'aria-hidden' => 'true', 'focusable' => 'false']) }}> 2 | -------------------------------------------------------------------------------- /resources/views/components/icon/brand/stack-overflow.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'icon', 'viewBox' =>'0 0 384 512', 'xmlns' => 'http://www.w3.org/2000/svg', 'aria-hidden' => 'true', 'focusable' => 'false']) }}> 2 | -------------------------------------------------------------------------------- /resources/views/components/icon/brand/telegram.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'icon', 'viewBox' =>'0 0 496 512', 'xmlns' => 'http://www.w3.org/2000/svg', 'aria-hidden' => 'true', 'focusable' => 'false']) }}> 2 | -------------------------------------------------------------------------------- /resources/views/components/icon/brand/trello.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'icon', 'viewBox' =>'0 0 448 512', 'xmlns' => 'http://www.w3.org/2000/svg', 'aria-hidden' => 'true', 'focusable' => 'false']) }}> 2 | -------------------------------------------------------------------------------- /resources/views/components/icon/brand/tumblr.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'icon', 'viewBox' =>'0 0 448 512', 'xmlns' => 'http://www.w3.org/2000/svg', 'aria-hidden' => 'true', 'focusable' => 'false']) }}> 2 | -------------------------------------------------------------------------------- /resources/views/components/icon/brand/twitch.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'icon', 'viewBox' =>'0 0 512 512', 'xmlns' => 'http://www.w3.org/2000/svg', 'aria-hidden' => 'true', 'focusable' => 'false']) }}> 2 | -------------------------------------------------------------------------------- /resources/views/components/icon/brand/vimeo.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'icon', 'viewBox' =>'0 0 448 512', 'xmlns' => 'http://www.w3.org/2000/svg', 'aria-hidden' => 'true', 'focusable' => 'false']) }}> 2 | -------------------------------------------------------------------------------- /resources/views/components/icon/brand/xing.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'icon', 'viewBox' =>'0 0 448 512', 'xmlns' => 'http://www.w3.org/2000/svg', 'aria-hidden' => 'true', 'focusable' => 'false']) }}> 2 | -------------------------------------------------------------------------------- /resources/views/components/icon/brand/youtube.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'icon', 'viewBox' =>'0 0 448 512', 'xmlns' => 'http://www.w3.org/2000/svg', 'aria-hidden' => 'true', 'focusable' => 'false']) }}> 2 | -------------------------------------------------------------------------------- /resources/views/components/icon/caret-down.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'icon', 'viewBox' =>'0 0 320 512', 'xmlns' => 'http://www.w3.org/2000/svg', 'aria-hidden' => 'true', 'focusable' => 'false']) }}> 2 | -------------------------------------------------------------------------------- /resources/views/components/icon/check.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'icon', 'viewBox' =>'0 0 512 512', 'xmlns' => 'http://www.w3.org/2000/svg', 'aria-hidden' => 'true', 'focusable' => 'false']) }}> 2 | -------------------------------------------------------------------------------- /resources/views/components/icon/edit.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'icon', 'viewBox' =>'0 0 576 512', 'xmlns' => 'http://www.w3.org/2000/svg', 'aria-hidden' => 'true', 'focusable' => 'false']) }}> 2 | -------------------------------------------------------------------------------- /resources/views/components/icon/envelope.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'icon', 'viewBox' =>'0 0 512 512', 'xmlns' => 'http://www.w3.org/2000/svg', 'aria-hidden' => 'true', 'focusable' => 'false']) }}> 2 | -------------------------------------------------------------------------------- /resources/views/components/icon/external-link.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'icon', 'viewBox' =>'0 0 512 512', 'xmlns' => 'http://www.w3.org/2000/svg', 'aria-hidden' => 'true', 'focusable' => 'false']) }}> 2 | -------------------------------------------------------------------------------- /resources/views/components/icon/file-import.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'icon', 'viewBox' =>'0 0 512 512', 'xmlns' => 'http://www.w3.org/2000/svg', 'aria-hidden' => 'true', 'focusable' => 'false']) }}> 2 | -------------------------------------------------------------------------------- /resources/views/components/icon/info.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'icon', 'viewBox' =>'0 0 512 512', 'xmlns' => 'http://www.w3.org/2000/svg', 'aria-hidden' => 'true', 'focusable' => 'false']) }}> 2 | -------------------------------------------------------------------------------- /resources/views/components/icon/key.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'icon', 'viewBox' =>'0 0 512 512', 'xmlns' => 'http://www.w3.org/2000/svg', 'aria-hidden' => 'true', 'focusable' => 'false']) }}> 2 | -------------------------------------------------------------------------------- /resources/views/components/icon/list-cards.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'icon', 'aria-label' => 'List of Cards']) }} viewBox="0 0 128 128" fill="none" xmlns="http://www.w3.org/2000/svg"> 2 | 3 | 4 | -------------------------------------------------------------------------------- /resources/views/components/icon/list-detailed.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'icon', 'aria-label' => 'Detailed List']) }} viewBox="0 0 128 128" fill="none" xmlns="http://www.w3.org/2000/svg"> 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /resources/views/components/icon/list-simple.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'icon', 'aria-label' => 'Simple List']) }} viewBox="0 0 128 128" fill="none" xmlns="http://www.w3.org/2000/svg"> 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /resources/views/components/icon/list.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'icon', 'viewBox' =>'0 0 512 512', 'xmlns' => 'http://www.w3.org/2000/svg', 'aria-hidden' => 'true', 'focusable' => 'false']) }}> 2 | -------------------------------------------------------------------------------- /resources/views/components/icon/lock.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'icon', 'viewBox' =>'0 0 448 512', 'xmlns' => 'http://www.w3.org/2000/svg', 'aria-hidden' => 'true', 'focusable' => 'false']) }}> 2 | -------------------------------------------------------------------------------- /resources/views/components/icon/plus.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'icon', 'viewBox' =>'0 0 448 512', 'xmlns' => 'http://www.w3.org/2000/svg', 'aria-hidden' => 'true', 'focusable' => 'false']) }}> 2 | -------------------------------------------------------------------------------- /resources/views/components/icon/reply.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'icon', 'viewBox' =>'0 0 512 512', 'xmlns' => 'http://www.w3.org/2000/svg', 'aria-hidden' => 'true', 'focusable' => 'false']) }}> 2 | -------------------------------------------------------------------------------- /resources/views/components/icon/save.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'icon', 'viewBox' =>'0 0 448 512', 'xmlns' => 'http://www.w3.org/2000/svg', 'aria-hidden' => 'true', 'focusable' => 'false']) }}> 2 | -------------------------------------------------------------------------------- /resources/views/components/icon/search.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'icon', 'viewBox' =>'0 0 512 512', 'xmlns' => 'http://www.w3.org/2000/svg', 'aria-hidden' => 'true', 'focusable' => 'false']) }}> 2 | -------------------------------------------------------------------------------- /resources/views/components/icon/share.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'icon', 'viewBox' =>'0 0 448 512', 'xmlns' => 'http://www.w3.org/2000/svg', 'aria-hidden' => 'true', 'focusable' => 'false']) }}> 2 | -------------------------------------------------------------------------------- /resources/views/components/icon/shield.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'icon', 'viewBox' =>'0 0 512 512', 'xmlns' => 'http://www.w3.org/2000/svg', 'aria-hidden' => 'true', 'focusable' => 'false']) }}> 2 | -------------------------------------------------------------------------------- /resources/views/components/icon/sort-down.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'icon', 'viewBox' =>'0 0 320 512', 'xmlns' => 'http://www.w3.org/2000/svg', 'aria-hidden' => 'true', 'focusable' => 'false']) }}> 2 | -------------------------------------------------------------------------------- /resources/views/components/icon/sort-up.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'icon', 'viewBox' =>'0 0 320 512', 'xmlns' => 'http://www.w3.org/2000/svg', 'aria-hidden' => 'true', 'focusable' => 'false']) }}> 2 | -------------------------------------------------------------------------------- /resources/views/components/icon/sort.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'icon', 'viewBox' =>'0 0 320 512', 'xmlns' => 'http://www.w3.org/2000/svg', 'aria-hidden' => 'true', 'focusable' => 'false']) }}> 2 | -------------------------------------------------------------------------------- /resources/views/components/icon/tags.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'icon', 'viewBox' =>'0 0 640 512', 'xmlns' => 'http://www.w3.org/2000/svg', 'aria-hidden' => 'true', 'focusable' => 'false']) }}> 2 | -------------------------------------------------------------------------------- /resources/views/components/icon/toggle-on.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'icon', 'viewBox' =>'0 0 576 512', 'xmlns' => 'http://www.w3.org/2000/svg', 'aria-hidden' => 'true', 'focusable' => 'false']) }}> 2 | -------------------------------------------------------------------------------- /resources/views/components/icon/trash.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'icon', 'viewBox' =>'0 0 448 512', 'xmlns' => 'http://www.w3.org/2000/svg', 'aria-hidden' => 'true', 'focusable' => 'false']) }}> 2 | -------------------------------------------------------------------------------- /resources/views/components/icon/unlock.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'icon', 'viewBox' =>'0 0 448 512', 'xmlns' => 'http://www.w3.org/2000/svg', 'aria-hidden' => 'true', 'focusable' => 'false']) }}> 2 | -------------------------------------------------------------------------------- /resources/views/components/icon/upload.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'icon', 'viewBox' =>'0 0 512 512', 'xmlns' => 'http://www.w3.org/2000/svg', 'aria-hidden' => 'true', 'focusable' => 'false']) }}> 2 | -------------------------------------------------------------------------------- /resources/views/components/icon/warning.blade.php: -------------------------------------------------------------------------------- 1 | merge(['class' => 'icon', 'viewBox' =>'0 0 512 512', 'xmlns' => 'http://www.w3.org/2000/svg', 'aria-hidden' => 'true', 'focusable' => 'false']) }}> 2 | -------------------------------------------------------------------------------- /resources/views/components/models/author.blade.php: -------------------------------------------------------------------------------- 1 | @props(['model']) 2 | @if($model->user->trashed()) 3 | merge(['title' => trans('user.is_deleted'), 'class' => 'author']) }}>{{ $model->user->name }} 4 | @else 5 | merge(['class' => 'author']) }}>{{ $model->user->name }} 6 | @endif 7 | -------------------------------------------------------------------------------- /resources/views/components/models/name-with-user.blade.php: -------------------------------------------------------------------------------- 1 | @props(['model']) 2 |
merge(['class' => 'd-inline author']) }}> 3 | {{ $model->user->name }}/{{ $model->name }} 4 |
5 | -------------------------------------------------------------------------------- /resources/views/components/models/open-all.blade.php: -------------------------------------------------------------------------------- 1 |
merge(['class' => 'open-in-tabs']) }}> 2 | 5 |
6 | -------------------------------------------------------------------------------- /resources/views/components/update-check.blade.php: -------------------------------------------------------------------------------- 1 |
merge(['class' => 'update-check']) }} data-current-version="{{ \App\Helper\UpdateHelper::currentVersion() }}"> 2 |
@lang('settings.update_check_running')
3 |
@lang('settings.update_check_version_found')
4 |
@lang('settings.update_check_success')
5 |
@lang('settings.update_check_failed')
6 |
7 | -------------------------------------------------------------------------------- /resources/views/errors/401.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.errors') 2 | 3 | @section('title', __('Unauthorized')) 4 | @section('code', '401') 5 | @section('message', __($exception->getMessage() ?: 'Unauthorized')) 6 | -------------------------------------------------------------------------------- /resources/views/errors/403.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.errors') 2 | 3 | @section('title', __('Forbidden')) 4 | @section('code', '403') 5 | @section('message', __($exception->getMessage() ?: 'Forbidden')) 6 | -------------------------------------------------------------------------------- /resources/views/errors/404.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.errors') 2 | 3 | @section('title', __('Not Found')) 4 | @section('code', '404') 5 | @section('message', __($exception->getMessage() ?: 'Page not Found')) 6 | -------------------------------------------------------------------------------- /resources/views/errors/419.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.errors') 2 | 3 | @section('title', __('Page Expired')) 4 | @section('code', '419') 5 | @section('message', __($exception->getMessage() ?: 'Page Expired')) 6 | -------------------------------------------------------------------------------- /resources/views/errors/429.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.errors') 2 | 3 | @section('title', __('Too Many Requests')) 4 | @section('code', '429') 5 | @section('message', __($exception->getMessage() ?: 'Too Many Requests')) 6 | -------------------------------------------------------------------------------- /resources/views/errors/500.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.errors') 2 | 3 | @section('title', __('Server Error')) 4 | @section('code', '500') 5 | @section('message', __('An internal server error occured. If you are the administrator, consult the application logs for details.')) 6 | -------------------------------------------------------------------------------- /resources/views/errors/503.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.errors') 2 | 3 | @section('title', __('Service Unavailable')) 4 | @section('code', '503') 5 | @section('message', __('This service is currently not available. If you are the administrator, consult the application logs for details.')) 6 | -------------------------------------------------------------------------------- /resources/views/guest/links/partials/list-cards.blade.php: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /resources/views/guest/links/partials/list-detailed.blade.php: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /resources/views/guest/links/partials/list-simple.blade.php: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /resources/views/guest/tags/partials/single.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | {{ $tag->links_count }} 9 | 10 | 11 | -------------------------------------------------------------------------------- /resources/views/guest/tags/partials/table.blade.php: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 | 5 | 8 | 11 | 12 | 13 | 14 | @foreach($tags as $tag) 15 | @include('guest.tags.partials.single') 16 | @endforeach 17 | 18 |
6 | {!! tableSorter(trans('tag.name'), $route, 'name', $orderBy, $orderDir) !!} 7 | 9 | {!! tableSorter(trans('link.links'), $route, 'links_count', $orderBy, $orderDir) !!} 10 |
19 |
20 | -------------------------------------------------------------------------------- /resources/views/layouts/app.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | @include('layouts.partials.header') 5 | 6 | 7 |
8 | 9 | @include('partials.nav') 10 | 11 |
12 | @include('partials.alerts') 13 | @yield('content') 14 |
15 | 16 | @include('layouts.partials.footer') 17 | 18 |
19 | 20 | 21 | -------------------------------------------------------------------------------- /resources/views/layouts/auth.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | @include('layouts.partials.header') 5 | 6 | 7 |
8 | 9 | @include('partials.nav') 10 | 11 |
12 | @yield('content') 13 |
14 | 15 | @include('layouts.partials.footer') 16 | 17 |
18 | 19 | 20 | -------------------------------------------------------------------------------- /resources/views/layouts/bookmarklet.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | @include('layouts.partials.header') 5 | 6 | 7 |
8 | 9 |
10 |
11 | 15 |
16 | 17 | @include('partials.alerts') 18 | @yield('content') 19 |
20 | 21 |
22 | 23 | 24 | -------------------------------------------------------------------------------- /resources/views/layouts/guest.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | @include('layouts.partials.header') 5 | 6 | 7 |
8 | 9 | @include('guest.partials.nav') 10 | 11 |
12 | @include('partials.alerts') 13 | @yield('content') 14 |
15 | 16 | @include('layouts.partials.footer') 17 | 18 |
19 | 20 | 21 | -------------------------------------------------------------------------------- /resources/views/mail/mail-check.blade.php: -------------------------------------------------------------------------------- 1 | @component('mail::message') 2 | 3 | This is a test email to check the mail configuration and credentials of your LinkAce setup. If you received this email, everything is good! 4 | 5 | @component('mail::button', ['url' => route('dashboard')]) 6 | Go to LinkAce 7 | @endcomponent 8 | 9 | @lang('link.happy_bookmarking'),
10 | {{ config('app.name') }} 11 | @endcomponent 12 | -------------------------------------------------------------------------------- /resources/views/mail/notifications/linkcheck.blade.php: -------------------------------------------------------------------------------- 1 | @component('mail::message') 2 | 3 | @lang('link.notifications.linkcheck.errors') 4 | 5 | @if(count($moved_links) > 0) 6 | @lang('link.notifications.linkcheck.errors.moved') 7 | 8 | @foreach($moved_links as $link) 9 | * [{{ $link->title }}]({{ $link->url }}) 10 | @endforeach 11 | @endif 12 | 13 | @if(count($broken_links) > 0) 14 | @lang('link.notifications.linkcheck.errors.broken') 15 | 16 | @foreach($broken_links as $link) 17 | * [{{ $link->title }}]({{ $link->url }}) 18 | @endforeach 19 | @endif 20 | 21 | @component('mail::button', ['url' => $linkace_url]) 22 | @lang('linkace.open_linkace') 23 | @endcomponent 24 | 25 | @lang('link.happy_bookmarking'),
26 | {{ config('app.name') }} 27 | @endcomponent 28 | -------------------------------------------------------------------------------- /resources/views/models/links/create.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.app') 2 | 3 | @section('content') 4 | @include('models.links.partials.create-form') 5 | @endsection 6 | -------------------------------------------------------------------------------- /resources/views/models/links/partials/link-icon.blade.php: -------------------------------------------------------------------------------- 1 | 2 | {{ $title }} 3 | -------------------------------------------------------------------------------- /resources/views/models/links/partials/share-link.blade.php: -------------------------------------------------------------------------------- 1 | 3 | 4 | {{ $title }} 5 | 6 | -------------------------------------------------------------------------------- /resources/views/models/links/partials/show/link-notes.blade.php: -------------------------------------------------------------------------------- 1 | 14 | -------------------------------------------------------------------------------- /resources/views/models/links/show.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.app') 2 | 3 | @section('content') 4 | 5 | 11 | 12 | @endsection 13 | -------------------------------------------------------------------------------- /resources/views/models/lists/show.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.app') 2 | 3 | @section('content') 4 | 5 | @include('models.lists.partials.show.details') 6 | @include('models.lists.partials.show.links') 7 | @include('models.lists.partials.show.history') 8 | 9 | @endsection 10 | -------------------------------------------------------------------------------- /resources/views/models/tags/show.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.app') 2 | 3 | @section('content') 4 | 5 | @include('models.tags.partials.show.details') 6 | @include('models.tags.partials.show.links') 7 | @include('models.tags.partials.show.history') 8 | 9 | @endsection 10 | -------------------------------------------------------------------------------- /resources/views/partials/alerts.blade.php: -------------------------------------------------------------------------------- 1 | @include('flash::message') 2 | 3 | @if ($errors->any()) 4 |
5 | 10 |
11 | @endif 12 | -------------------------------------------------------------------------------- /resources/views/partials/configure-darkmode.blade.php: -------------------------------------------------------------------------------- 1 | @if(usersettings('darkmode_setting') === 1 || (auth()->guest() && guestsettings('darkmode_setting') === 1)) 2 | 3 | @elseif(usersettings('darkmode_setting') === 2 || (auth()->guest() && guestsettings('darkmode_setting') === 2)) 4 | 5 | 6 | @else 7 | 8 | @endif 9 | -------------------------------------------------------------------------------- /resources/views/partials/table-sorter.blade.php: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 | 5 | 6 | 7 | {{ $label }} 8 |
9 | -------------------------------------------------------------------------------- /resources/views/setup/complete.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.setup') 2 | 3 | @section('content') 4 | 5 |
6 |
7 | 8 |
9 |
10 | @lang('setup.complete') 11 |
12 |
13 | 14 |

@lang('setup.outro')

15 | 16 | 17 | @lang('linkace.go_to_dashboard') 18 | 19 |
20 |
21 | 22 |
23 |
24 | 25 | @endsection 26 | -------------------------------------------------------------------------------- /routes/channels.php: -------------------------------------------------------------------------------- 1 | create(['name' => 'MrTestUser']); 16 | $this->actingAs($user); 17 | 18 | $response = $this->get('dashboard'); 19 | 20 | $response->assertOk() 21 | ->assertSee('Hello MrTestUser!'); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /tests/Controller/Auth/VariousAuthenticationTest.php: -------------------------------------------------------------------------------- 1 | create(); 17 | 18 | $confirmView = $this->actingAs($user)->get('user/confirm-password'); 19 | $confirmView->assertSee('Confirmation required'); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /tests/CreatesApplication.php: -------------------------------------------------------------------------------- 1 | make(Kernel::class)->bootstrap(); 18 | 19 | return $app; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /tests/Migrations/MigratesUpTo.php: -------------------------------------------------------------------------------- 1 | getMigrationFiles($dbPath)) 15 | ->takeWhile(fn ($file) => $file !== $dbPath . '/' . $migration); 16 | 17 | $migrations->prepend(database_path('schema/sqlite-schema.dump')); 18 | 19 | Artisan::call('migrate:fresh', ['--realpath' => 'true', '--path' => $migrations->values()]); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /tests/TestCase.php: -------------------------------------------------------------------------------- 1 | true, 23 | ]); 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /webpack.mix.js: -------------------------------------------------------------------------------- 1 | const mix = require('laravel-mix'); 2 | 3 | mix.options({ 4 | processCssUrls: false 5 | }) 6 | .disableNotifications() 7 | .setPublicPath('public') 8 | .version(); 9 | 10 | mix.js('resources/assets/js/app.js', 'assets/dist/js') 11 | .sourceMaps(); 12 | 13 | mix.combine([ 14 | 'node_modules/bootstrap/dist/js/bootstrap.bundle.min.js' 15 | ], 'public/assets/dist/js/dependencies.js'); 16 | 17 | mix.sass('resources/assets/sass/app.scss', 'assets/dist/css') 18 | .sass('resources/assets/sass/app-dark.scss', 'assets/dist/css'); 19 | --------------------------------------------------------------------------------