├── .ruby-version ├── .xcode-version ├── fastlane ├── metadata │ ├── ar-SA │ │ ├── .gitkeep │ │ ├── keywords.txt │ │ └── release_notes.txt │ ├── de-DE │ │ ├── .gitkeep │ │ ├── promotional_text.txt │ │ ├── keywords.txt │ │ └── release_notes.txt │ ├── es-ES │ │ ├── .gitkeep │ │ ├── subtitle.txt │ │ ├── promotional_text.txt │ │ ├── keywords.txt │ │ └── release_notes.txt │ ├── fr-FR │ │ ├── .gitkeep │ │ ├── promotional_text.txt │ │ ├── keywords.txt │ │ └── release_notes.txt │ ├── he │ │ ├── .gitkeep │ │ ├── subtitle.txt │ │ ├── keywords.txt │ │ └── release_notes.txt │ ├── id │ │ ├── .gitkeep │ │ ├── promotional_text.txt │ │ ├── keywords.txt │ │ └── release_notes.txt │ ├── it │ │ ├── .gitkeep │ │ ├── subtitle.txt │ │ ├── promotional_text.txt │ │ ├── keywords.txt │ │ └── release_notes.txt │ ├── ja │ │ ├── .gitkeep │ │ ├── subtitle.txt │ │ ├── promotional_text.txt │ │ ├── keywords.txt │ │ ├── release_notes.txt │ │ └── description.txt │ ├── ko │ │ ├── .gitkeep │ │ ├── promotional_text.txt │ │ ├── subtitle.txt │ │ ├── keywords.txt │ │ ├── release_notes.txt │ │ └── description.txt │ ├── nl-NL │ │ ├── .gitkeep │ │ ├── promotional_text.txt │ │ ├── keywords.txt │ │ └── release_notes.txt │ ├── pt-BR │ │ ├── .gitkeep │ │ ├── promotional_text.txt │ │ ├── keywords.txt │ │ └── release_notes.txt │ ├── ru │ │ ├── .gitkeep │ │ ├── promotional_text.txt │ │ ├── keywords.txt │ │ └── release_notes.txt │ ├── sv │ │ ├── .gitkeep │ │ ├── promotional_text.txt │ │ ├── keywords.txt │ │ └── release_notes.txt │ ├── tr │ │ ├── .gitkeep │ │ ├── promotional_text.txt │ │ ├── subtitle.txt │ │ ├── keywords.txt │ │ └── release_notes.txt │ ├── zh-Hans │ │ ├── .gitkeep │ │ ├── promotional_text.txt │ │ ├── subtitle.txt │ │ ├── keywords.txt │ │ ├── release_notes.txt │ │ └── description.txt │ ├── zh-Hant │ │ ├── .gitkeep │ │ ├── promotional_text.txt │ │ ├── subtitle.txt │ │ ├── keywords.txt │ │ ├── release_notes.txt │ │ └── description.txt │ ├── default │ │ ├── marketing_url.txt │ │ ├── privacy_url.txt │ │ ├── promotional_text.txt │ │ ├── support_url.txt │ │ ├── keywords.txt │ │ └── release_notes.txt │ └── en-US │ │ └── promotional_text.txt ├── appstoreres │ └── metadata │ │ └── source │ │ ├── subtitle.txt │ │ └── keywords.txt ├── Appfile └── env │ └── user.env-example ├── External ├── Sparkle │ ├── Frameworks │ │ └── Sparkle.framework │ │ │ ├── Versions │ │ │ ├── Current │ │ │ └── A │ │ │ │ ├── Resources │ │ │ │ ├── Updater.app │ │ │ │ │ └── Contents │ │ │ │ │ │ ├── PkgInfo │ │ │ │ │ │ ├── Resources │ │ │ │ │ │ ├── fr_CA.lproj │ │ │ │ │ │ ├── pt.lproj │ │ │ │ │ │ ├── SUStatus.nib │ │ │ │ │ │ ├── ca.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── cs.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── da.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── de.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── el.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── es.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── fi.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── fr.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── he.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── hr.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── is.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── it.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── ja.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── ko.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── nb.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── nl.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── pl.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── ro.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── ru.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── sk.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── sl.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── sv.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── th.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── tr.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── uk.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── Base.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── pt_BR.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── pt_PT.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── zh_CN.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ └── zh_TW.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ └── MacOS │ │ │ │ │ │ └── Updater │ │ │ │ ├── Autoupdate │ │ │ │ ├── SUStatus.nib │ │ │ │ ├── ca.lproj │ │ │ │ │ ├── Sparkle.strings │ │ │ │ │ └── SUUpdateAlert.strings │ │ │ │ ├── cs.lproj │ │ │ │ │ ├── Sparkle.strings │ │ │ │ │ ├── SUUpdateAlert.strings │ │ │ │ │ └── SUUpdatePermissionPrompt.strings │ │ │ │ ├── da.lproj │ │ │ │ │ ├── Sparkle.strings │ │ │ │ │ ├── SUUpdateAlert.strings │ │ │ │ │ └── SUUpdatePermissionPrompt.strings │ │ │ │ ├── de.lproj │ │ │ │ │ ├── Sparkle.strings │ │ │ │ │ ├── SUUpdateAlert.strings │ │ │ │ │ └── SUUpdatePermissionPrompt.strings │ │ │ │ ├── el.lproj │ │ │ │ │ ├── Sparkle.strings │ │ │ │ │ ├── SUUpdateAlert.strings │ │ │ │ │ └── SUUpdatePermissionPrompt.strings │ │ │ │ ├── es.lproj │ │ │ │ │ ├── Sparkle.strings │ │ │ │ │ ├── SUUpdateAlert.strings │ │ │ │ │ └── SUUpdatePermissionPrompt.strings │ │ │ │ ├── fi.lproj │ │ │ │ │ ├── Sparkle.strings │ │ │ │ │ ├── SUUpdateAlert.strings │ │ │ │ │ └── SUUpdatePermissionPrompt.strings │ │ │ │ ├── fr.lproj │ │ │ │ │ ├── Sparkle.strings │ │ │ │ │ ├── SUUpdateAlert.strings │ │ │ │ │ └── SUUpdatePermissionPrompt.strings │ │ │ │ ├── he.lproj │ │ │ │ │ ├── Sparkle.strings │ │ │ │ │ └── SUUpdateAlert.strings │ │ │ │ ├── hr.lproj │ │ │ │ │ ├── Sparkle.strings │ │ │ │ │ └── SUUpdateAlert.strings │ │ │ │ ├── is.lproj │ │ │ │ │ ├── Sparkle.strings │ │ │ │ │ ├── SUUpdateAlert.strings │ │ │ │ │ └── SUUpdatePermissionPrompt.strings │ │ │ │ ├── it.lproj │ │ │ │ │ ├── Sparkle.strings │ │ │ │ │ ├── SUUpdateAlert.strings │ │ │ │ │ └── SUUpdatePermissionPrompt.strings │ │ │ │ ├── ja.lproj │ │ │ │ │ ├── Sparkle.strings │ │ │ │ │ ├── SUUpdateAlert.strings │ │ │ │ │ └── SUUpdatePermissionPrompt.strings │ │ │ │ ├── ko.lproj │ │ │ │ │ ├── Sparkle.strings │ │ │ │ │ ├── SUUpdateAlert.strings │ │ │ │ │ └── SUUpdatePermissionPrompt.strings │ │ │ │ ├── nb.lproj │ │ │ │ │ ├── Sparkle.strings │ │ │ │ │ ├── SUUpdateAlert.strings │ │ │ │ │ └── SUUpdatePermissionPrompt.strings │ │ │ │ ├── nl.lproj │ │ │ │ │ ├── Sparkle.strings │ │ │ │ │ ├── SUUpdateAlert.strings │ │ │ │ │ └── SUUpdatePermissionPrompt.strings │ │ │ │ ├── pl.lproj │ │ │ │ │ ├── Sparkle.strings │ │ │ │ │ ├── SUUpdateAlert.strings │ │ │ │ │ └── SUUpdatePermissionPrompt.strings │ │ │ │ ├── ro.lproj │ │ │ │ │ ├── Sparkle.strings │ │ │ │ │ ├── SUUpdateAlert.strings │ │ │ │ │ └── SUUpdatePermissionPrompt.strings │ │ │ │ ├── ru.lproj │ │ │ │ │ ├── Sparkle.strings │ │ │ │ │ ├── SUUpdateAlert.strings │ │ │ │ │ └── SUUpdatePermissionPrompt.strings │ │ │ │ ├── sk.lproj │ │ │ │ │ ├── Sparkle.strings │ │ │ │ │ ├── SUUpdateAlert.strings │ │ │ │ │ └── SUUpdatePermissionPrompt.strings │ │ │ │ ├── sl.lproj │ │ │ │ │ ├── Sparkle.strings │ │ │ │ │ ├── SUUpdateAlert.strings │ │ │ │ │ └── SUUpdatePermissionPrompt.strings │ │ │ │ ├── sv.lproj │ │ │ │ │ ├── Sparkle.strings │ │ │ │ │ ├── SUUpdateAlert.strings │ │ │ │ │ └── SUUpdatePermissionPrompt.strings │ │ │ │ ├── th.lproj │ │ │ │ │ ├── Sparkle.strings │ │ │ │ │ ├── SUUpdateAlert.strings │ │ │ │ │ └── SUUpdatePermissionPrompt.strings │ │ │ │ ├── tr.lproj │ │ │ │ │ ├── Sparkle.strings │ │ │ │ │ ├── SUUpdateAlert.strings │ │ │ │ │ └── SUUpdatePermissionPrompt.strings │ │ │ │ ├── uk.lproj │ │ │ │ │ ├── Sparkle.strings │ │ │ │ │ ├── SUUpdateAlert.strings │ │ │ │ │ └── SUUpdatePermissionPrompt.strings │ │ │ │ ├── Base.lproj │ │ │ │ │ ├── SUUpdateAlert.nib │ │ │ │ │ ├── Sparkle.strings │ │ │ │ │ └── SUUpdatePermissionPrompt.nib │ │ │ │ ├── pt_BR.lproj │ │ │ │ │ ├── Sparkle.strings │ │ │ │ │ ├── SUUpdateAlert.strings │ │ │ │ │ └── SUUpdatePermissionPrompt.strings │ │ │ │ ├── pt_PT.lproj │ │ │ │ │ ├── Sparkle.strings │ │ │ │ │ ├── SUUpdateAlert.strings │ │ │ │ │ └── SUUpdatePermissionPrompt.strings │ │ │ │ ├── zh_CN.lproj │ │ │ │ │ ├── Sparkle.strings │ │ │ │ │ ├── SUUpdateAlert.strings │ │ │ │ │ └── SUUpdatePermissionPrompt.strings │ │ │ │ ├── zh_TW.lproj │ │ │ │ │ ├── Sparkle.strings │ │ │ │ │ ├── SUUpdateAlert.strings │ │ │ │ │ └── SUUpdatePermissionPrompt.strings │ │ │ │ ├── ar.lproj │ │ │ │ │ ├── SUUpdateAlert.strings │ │ │ │ │ └── SUUpdatePermissionPrompt.strings │ │ │ │ ├── hu.lproj │ │ │ │ │ └── SUUpdatePermissionPrompt.strings │ │ │ │ ├── ReleaseNotesColorStyle.css │ │ │ │ └── en.lproj │ │ │ │ │ └── SUUpdateAlert.strings │ │ │ │ ├── Sparkle │ │ │ │ ├── Modules │ │ │ │ └── module.modulemap │ │ │ │ └── Headers │ │ │ │ ├── SUExport.h │ │ │ │ └── SUVersionDisplayProtocol.h │ │ │ ├── Headers │ │ │ ├── Modules │ │ │ ├── Sparkle │ │ │ └── Resources │ ├── XPCServices │ │ ├── org.sparkle-project.InstallerLauncher.xpc │ │ │ └── Contents │ │ │ │ └── MacOS │ │ │ │ ├── Updater.app │ │ │ │ └── Contents │ │ │ │ │ ├── PkgInfo │ │ │ │ │ ├── MacOS │ │ │ │ │ └── Updater │ │ │ │ │ └── Resources │ │ │ │ │ ├── SUStatus.nib │ │ │ │ │ ├── ca.lproj │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ ├── cs.lproj │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ ├── da.lproj │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ ├── de.lproj │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ ├── el.lproj │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ ├── es.lproj │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ ├── fi.lproj │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ ├── fr.lproj │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ ├── he.lproj │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ ├── hr.lproj │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ ├── is.lproj │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ ├── it.lproj │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ ├── ja.lproj │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ ├── ko.lproj │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ ├── nb.lproj │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ ├── nl.lproj │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ ├── pl.lproj │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ ├── pt.lproj │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ ├── ro.lproj │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ ├── ru.lproj │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ ├── sk.lproj │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ ├── sl.lproj │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ ├── sv.lproj │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ ├── th.lproj │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ ├── tr.lproj │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ ├── uk.lproj │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ ├── Base.lproj │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ ├── fr_CA.lproj │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ ├── pt_BR.lproj │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ ├── pt_PT.lproj │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ ├── zh_CN.lproj │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ └── zh_TW.lproj │ │ │ │ │ └── Sparkle.strings │ │ │ │ ├── Autoupdate │ │ │ │ └── org.sparkle-project.InstallerLauncher │ │ ├── org.sparkle-project.InstallerStatus.xpc │ │ │ └── Contents │ │ │ │ └── MacOS │ │ │ │ └── org.sparkle-project.InstallerStatus │ │ └── org.sparkle-project.InstallerConnection.xpc │ │ │ └── Contents │ │ │ └── MacOS │ │ │ └── org.sparkle-project.InstallerConnection │ └── bin │ │ ├── BinaryDelta │ │ ├── sign_update │ │ ├── generate_keys │ │ └── generate_appcast ├── Hoextdown │ ├── version.c │ ├── escape.h │ └── version.h └── Notepad │ ├── Storage.h │ ├── Style.swift │ └── Extensions.swift ├── config ├── Simplenote.debug.xcconfig ├── Simplenote.release.xcconfig ├── Project.Debug.xcconfig ├── Project.xcconfig ├── Project.Release.xcconfig └── Version.public.xcconfig ├── .gitattributes ├── Simplenote ├── en.lproj │ ├── InfoPlist.strings │ └── Credits.rtf ├── Images.xcassets │ ├── Contents.json │ ├── Icons │ │ ├── Contents.json │ │ ├── icon_pin.imageset │ │ │ ├── pinned.pdf │ │ │ └── Contents.json │ │ ├── icon_wp.imageset │ │ │ ├── icon_wp.pdf │ │ │ └── Contents.json │ │ ├── icon_mail.imageset │ │ │ ├── icon_mail.pdf │ │ │ └── Contents.json │ │ ├── icon_shared.imageset │ │ │ ├── publish.pdf │ │ │ └── Contents.json │ │ ├── icon_simplenote.imageset │ │ │ ├── logo.png │ │ │ ├── logo@2x.png │ │ │ ├── logo@3x.png │ │ │ └── Contents.json │ │ ├── icon_task_checked.imageset │ │ │ ├── task-checked.pdf │ │ │ └── Contents.json │ │ ├── icon_chevron_down.imageset │ │ │ ├── disclosure-down.pdf │ │ │ └── Contents.json │ │ ├── icon_task_unchecked.imageset │ │ │ ├── task-unchecked.pdf │ │ │ └── Contents.json │ │ ├── icon_arrow_top_right.imageset │ │ │ ├── arrow-top-right.pdf │ │ │ └── Contents.json │ │ ├── icon_simplenote_login.imageset │ │ │ ├── icon_simplenote.pdf │ │ │ └── Contents.json │ │ ├── icon_disclosure_right.imageset │ │ │ ├── icon_disclosure_right.pdf │ │ │ └── Contents.json │ │ └── icon_simplenote_inner.imageset │ │ │ ├── icon_simplenote_inner.pdf │ │ │ └── Contents.json │ └── Buttons │ │ ├── Contents.json │ │ ├── button_info.imageset │ │ ├── info.pdf │ │ └── Contents.json │ │ ├── button_cross.imageset │ │ ├── cross.pdf │ │ └── Contents.json │ │ ├── button_share.imageset │ │ ├── share.pdf │ │ └── Contents.json │ │ ├── button_trash.imageset │ │ ├── trash.pdf │ │ └── Contents.json │ │ ├── button_all_notes.imageset │ │ ├── notes.pdf │ │ └── Contents.json │ │ ├── button_history.imageset │ │ ├── history.pdf │ │ └── Contents.json │ │ ├── button_restore.imageset │ │ ├── restore.pdf │ │ └── Contents.json │ │ ├── button_search.imageset │ │ ├── search.pdf │ │ └── Contents.json │ │ ├── button_ellipsis.imageset │ │ ├── ellipsis.pdf │ │ └── Contents.json │ │ ├── button_untagged.imageset │ │ ├── untagged.pdf │ │ └── Contents.json │ │ ├── button_tags_open.imageset │ │ ├── tags-open.pdf │ │ └── Contents.json │ │ ├── button_tags_close.imageset │ │ ├── tags-close.pdf │ │ └── Contents.json │ │ ├── button_new_note.imageset │ │ ├── button_new_note.pdf │ │ └── Contents.json │ │ ├── button_checklist.imageset │ │ ├── button_checklist.pdf │ │ └── Contents.json │ │ ├── button_preview_off.imageset │ │ ├── visibility-hidden.pdf │ │ └── Contents.json │ │ ├── button_preview_on.imageset │ │ ├── visibility-visible.pdf │ │ └── Contents.json │ │ ├── button_ellipsis_outline.imageset │ │ ├── ellipsis-outline.pdf │ │ └── Contents.json │ │ └── button_settings.imageset │ │ └── Contents.json ├── Icons.xcassets │ ├── Contents.json │ ├── AppIcon.appiconset │ │ ├── icon_16x16.png │ │ ├── icon_32x32.png │ │ ├── icon_128x128.png │ │ ├── icon_16x16@2x.png │ │ ├── icon_256x256.png │ │ ├── icon_32x32@2x.png │ │ ├── icon_512x512.png │ │ ├── icon_128x128@2x.png │ │ ├── icon_256x256@2x.png │ │ └── icon_512x512@2x.png │ └── AppIcon-Beta.appiconset │ │ ├── icon_16x16.png │ │ ├── icon_32x32.png │ │ ├── icon_128x128.png │ │ ├── icon_16x16@2x.png │ │ ├── icon_256x256.png │ │ ├── icon_32x32@2x.png │ │ ├── icon_512x512.png │ │ ├── icon_128x128@2x.png │ │ ├── icon_256x256@2x.png │ │ └── icon_512x512@2x.png ├── Simplenote.xcdatamodeld │ ├── Simplenote.xcdatamodel │ │ ├── layout │ │ └── elements │ └── .xccurrentversion ├── Preferences.h ├── Resources │ └── release_notes.txt ├── NSString+Metadata.h ├── NoteEditorMetadata.swift ├── NSEdgeInsets+Simplenote.swift ├── NSViewController+Simplenote.swift ├── Simperium+Simplenote.h ├── NSFont+Simplenote.swift ├── SpacerTableViewCell.swift ├── NSFont+Theme.swift ├── Simplenote-Prefix.pch ├── NSRange+Simplenote.swift ├── Date+Simplenote.swift ├── NSWindowFrameAutosaveName+Simplenote.swift ├── DateTransformer.h ├── main.m ├── NSObject+Helpers.swift ├── NSSearchField+Simplenote.swift ├── NSScreen+Simplenote.swift ├── WPAuthHandler.h ├── NSBox+Simplenote.swift ├── NSButton+Extensions.swift ├── NSTextStorage+Simplenote.swift ├── ActivityType.swift ├── NSNotification+Simplenote.swift ├── SPAboutTextField.swift ├── NumberFormatter+Simplenote.swift ├── NSProcessInfo+Simplenote.swift ├── NSTableViewCell+Simplenote.swift ├── Preferences.m ├── SimperiumAuthenticatorProtocol.swift ├── StatusChecker.h ├── FileManagerProtocol.swift ├── NSPasteboard+Simplenote.swift ├── SeparatorTableViewCell.swift ├── SPAuthenticationTextField+Simplenote.swift ├── UnicodeScalar+Simplenote.swift ├── JSONKit+Simplenote.h ├── SPMarkdownParser.h ├── SearchQuery+Simplenote.swift ├── Simperium+Simplenote.m ├── NSAppearance+Simplenote.swift ├── FontSettings.swift ├── DateTransformer.m ├── CSS │ ├── markdown-dark.css │ └── markdown-light.css ├── Tag.h ├── HeaderTableCellView.swift ├── FileStorage.swift ├── NSAlert+Simplenote.swift ├── NSAnimationContext+Simplenote.swift ├── NSAlert+AuthErrors.swift ├── NSVisualEffectView+Simplenote.swift ├── AppKitConstants.swift ├── NSScrollView+Simplenote.swift ├── CharacterCountLimiter.swift ├── NSManagedObjectContext+Simplenote.swift ├── Simplenote-Bridging-Header.h ├── DateFormatter+Simplenote.swift ├── NSNotification+Simplenote.h ├── URL+Interlink.swift ├── Note+Interlinks.swift ├── NSImage+Simplenote.swift ├── SimplenoteDebug.entitlements ├── NSColor+Simplenote.swift ├── ContentSlice.swift ├── SearchMapView.swift ├── Array+Simplenote.swift ├── SplitView.swift ├── ClipView.swift ├── NSView+Simplenote.swift ├── TagListFilter.swift └── NoteListPrefixFormatter.swift ├── .bundle └── config ├── .configure-files └── SPCredentials.swift.enc ├── BuildTools ├── Empty.swift └── Package.resolved ├── SimplenoteTests ├── Constants.swift ├── MockStorageSettings.swift ├── URLRequest+Simplenote.swift ├── MockURLSessionDataTask.swift ├── NSUserDefaults+Tests.swift ├── MockStorageValidator.swift ├── MockSimperiumAuthenticator.swift ├── AccountVerificationController+TestHelpers.swift ├── Simplenote.xctestplan ├── Info.plist ├── MockLoginRemote.swift ├── MockTextView.swift └── MockAccountVerificationRemote.swift ├── .buildkite ├── commands │ ├── build-and-test.sh │ ├── build-and-test-app-store.sh │ └── build-and-upload-release.sh ├── release-builds.yml ├── shared-pipeline-vars └── pipeline.yml ├── Simplenote.xcodeproj └── project.xcworkspace │ └── contents.xcworkspacedata ├── .editorconfig ├── .rubocop.yml ├── .configure ├── Scripts └── Build-Phases │ └── copy-secret.xcfilelist ├── Gemfile ├── IntentsExtension ├── IntentHandlers │ └── OpenNewNoteIntentHandler.swift ├── Extensions │ ├── NSString+Intents.swift │ ├── IntentTag+Helpers.swift │ ├── FileManager+Intents.swift │ └── NSURLSessionConfiguration+Extensions.swift ├── Tools │ ├── IntentsConstants.swift │ └── ExtensionCoreDataWrapper.swift ├── Support Files │ ├── IntentsExtension.entitlements │ └── IntentsExtensionDebug.entitlements └── Models │ ├── Tag+Intents.swift │ └── SPManagedObject+Intents.swift ├── .github ├── workflows │ ├── run-danger.yml │ └── validate-issues.yml └── ISSUE_TEMPLATE │ └── ---feature-request.md ├── Simplenote.entitlements └── .gitignore /.ruby-version: -------------------------------------------------------------------------------- 1 | 3.2.2 2 | -------------------------------------------------------------------------------- /.xcode-version: -------------------------------------------------------------------------------- 1 | 15.4 2 | -------------------------------------------------------------------------------- /fastlane/metadata/ar-SA/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /fastlane/metadata/de-DE/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /fastlane/metadata/es-ES/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /fastlane/metadata/fr-FR/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /fastlane/metadata/he/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /fastlane/metadata/id/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /fastlane/metadata/it/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /fastlane/metadata/ja/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /fastlane/metadata/ko/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /fastlane/metadata/nl-NL/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /fastlane/metadata/pt-BR/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /fastlane/metadata/ru/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /fastlane/metadata/sv/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /fastlane/metadata/tr/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /fastlane/metadata/zh-Hans/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /fastlane/metadata/zh-Hant/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /fastlane/metadata/ja/subtitle.txt: -------------------------------------------------------------------------------- 1 | メモを残す最も簡単な方法です。 2 | -------------------------------------------------------------------------------- /fastlane/metadata/ja/promotional_text.txt: -------------------------------------------------------------------------------- 1 | メモを残す最も簡単な方法です。 -------------------------------------------------------------------------------- /fastlane/metadata/zh-Hans/promotional_text.txt: -------------------------------------------------------------------------------- 1 | 记录笔记最简单的方法。 -------------------------------------------------------------------------------- /fastlane/metadata/zh-Hans/subtitle.txt: -------------------------------------------------------------------------------- 1 | 记录笔记最简单的方法。 2 | -------------------------------------------------------------------------------- /fastlane/metadata/zh-Hant/promotional_text.txt: -------------------------------------------------------------------------------- 1 | 輕鬆作筆記的最佳方式。 -------------------------------------------------------------------------------- /fastlane/metadata/zh-Hant/subtitle.txt: -------------------------------------------------------------------------------- 1 | 輕鬆作筆記的最佳方式。 2 | -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/Current: -------------------------------------------------------------------------------- 1 | A -------------------------------------------------------------------------------- /fastlane/metadata/ko/promotional_text.txt: -------------------------------------------------------------------------------- 1 | 메모를 보관하는 가장 간단한 방법입니다. -------------------------------------------------------------------------------- /fastlane/metadata/ko/subtitle.txt: -------------------------------------------------------------------------------- 1 | 메모를 보관하는 가장 간단한 방법입니다. 2 | -------------------------------------------------------------------------------- /fastlane/metadata/he/subtitle.txt: -------------------------------------------------------------------------------- 1 | הדרך הפשוטה ביותר לרשום פתקים. 2 | -------------------------------------------------------------------------------- /fastlane/metadata/it/subtitle.txt: -------------------------------------------------------------------------------- 1 | Predere nota ora è semplice. 2 | -------------------------------------------------------------------------------- /fastlane/metadata/tr/promotional_text.txt: -------------------------------------------------------------------------------- 1 | Not tutmanın en basit yolu. -------------------------------------------------------------------------------- /fastlane/metadata/tr/subtitle.txt: -------------------------------------------------------------------------------- 1 | Not tutmanın en basit yolu. 2 | -------------------------------------------------------------------------------- /config/Simplenote.debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Project.Debug.xcconfig" 2 | -------------------------------------------------------------------------------- /fastlane/metadata/default/marketing_url.txt: -------------------------------------------------------------------------------- 1 | https://simplenote.com 2 | -------------------------------------------------------------------------------- /fastlane/metadata/es-ES/subtitle.txt: -------------------------------------------------------------------------------- 1 | Lo más fácil para tener notas. 2 | -------------------------------------------------------------------------------- /fastlane/metadata/it/promotional_text.txt: -------------------------------------------------------------------------------- 1 | Predere nota ora è semplice. -------------------------------------------------------------------------------- /fastlane/metadata/ru/promotional_text.txt: -------------------------------------------------------------------------------- 1 | Простой способ хранить заметки. -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Headers: -------------------------------------------------------------------------------- 1 | Versions/Current/Headers -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Modules: -------------------------------------------------------------------------------- 1 | Versions/Current/Modules -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Sparkle: -------------------------------------------------------------------------------- 1 | Versions/Current/Sparkle -------------------------------------------------------------------------------- /config/Simplenote.release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Project.Release.xcconfig" 2 | -------------------------------------------------------------------------------- /fastlane/metadata/default/privacy_url.txt: -------------------------------------------------------------------------------- 1 | https://automattic.com/privacy/ 2 | -------------------------------------------------------------------------------- /fastlane/metadata/default/promotional_text.txt: -------------------------------------------------------------------------------- 1 | The simplest way to keep notes. -------------------------------------------------------------------------------- /fastlane/metadata/default/support_url.txt: -------------------------------------------------------------------------------- 1 | https://simplenote.com/contact 2 | -------------------------------------------------------------------------------- /fastlane/metadata/en-US/promotional_text.txt: -------------------------------------------------------------------------------- 1 | The simplest way to keep notes. -------------------------------------------------------------------------------- /fastlane/metadata/es-ES/promotional_text.txt: -------------------------------------------------------------------------------- 1 | Lo más fácil para tener notas. -------------------------------------------------------------------------------- /fastlane/metadata/id/promotional_text.txt: -------------------------------------------------------------------------------- 1 | Cara paling mudah menyimpan catatan. -------------------------------------------------------------------------------- /fastlane/metadata/pt-BR/promotional_text.txt: -------------------------------------------------------------------------------- 1 | A melhor forma de manter notas. -------------------------------------------------------------------------------- /fastlane/metadata/sv/promotional_text.txt: -------------------------------------------------------------------------------- 1 | Det enklaste sättet att anteckna på. -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Resources: -------------------------------------------------------------------------------- 1 | Versions/Current/Resources -------------------------------------------------------------------------------- /fastlane/appstoreres/metadata/source/subtitle.txt: -------------------------------------------------------------------------------- 1 | The simplest way to keep notes. -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | RELEASE-NOTES.txt merge=union 2 | 3 | .configure-files/*.enc binary 4 | -------------------------------------------------------------------------------- /fastlane/metadata/de-DE/promotional_text.txt: -------------------------------------------------------------------------------- 1 | Die einfachste Art, sich Notizen zu machen. -------------------------------------------------------------------------------- /fastlane/metadata/ja/keywords.txt: -------------------------------------------------------------------------------- 1 | simplenote,メモ,メモ,同期,同期,リスト,todo,シンプル,markdown,アイデア 2 | -------------------------------------------------------------------------------- /fastlane/metadata/ko/keywords.txt: -------------------------------------------------------------------------------- 1 | simplenote,메모,메모,동기화,동기화 중,목록,할 일,심플,마크다운,아이디어 2 | -------------------------------------------------------------------------------- /Simplenote/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ 2 | 3 | -------------------------------------------------------------------------------- /fastlane/metadata/fr-FR/promotional_text.txt: -------------------------------------------------------------------------------- 1 | La manière la plus simple de conserver des notes. -------------------------------------------------------------------------------- /fastlane/metadata/nl-NL/promotional_text.txt: -------------------------------------------------------------------------------- 1 | De eenvoudigste manier om notities bij te houden. -------------------------------------------------------------------------------- /fastlane/metadata/zh-Hans/keywords.txt: -------------------------------------------------------------------------------- 1 | simplenote,笔记,笔记,同步,正在同步,列表,待办事项,简单,markdown,想法 2 | -------------------------------------------------------------------------------- /fastlane/metadata/zh-Hant/keywords.txt: -------------------------------------------------------------------------------- 1 | simplenote,筆記,筆記本,同步,同步功能,清單,待辦事項,簡單,markdown,想法 2 | -------------------------------------------------------------------------------- /.bundle/config: -------------------------------------------------------------------------------- 1 | --- 2 | BUNDLE_PATH: "vendor/bundle" 3 | BUNDLE_RETRY: "3" 4 | BUNDLE_JOBS: "3" 5 | -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Updater.app/Contents/PkgInfo: -------------------------------------------------------------------------------- 1 | APPL???? -------------------------------------------------------------------------------- /fastlane/metadata/default/keywords.txt: -------------------------------------------------------------------------------- 1 | simplenote,note,notes,sync,syncing,list,todo,simple,markdown,ideas -------------------------------------------------------------------------------- /config/Project.Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Project.xcconfig" 2 | 3 | CODE_SIGN_IDENTITY = Apple Development 4 | -------------------------------------------------------------------------------- /fastlane/metadata/tr/keywords.txt: -------------------------------------------------------------------------------- 1 | simplenote,not,notlar,eşitleme,liste,yaqpılacak,basit,markdown,fikirler 2 | -------------------------------------------------------------------------------- /fastlane/metadata/zh-Hant/release_notes.txt: -------------------------------------------------------------------------------- 1 | - 更新了加州使用者的隱私權聲明連結 2 | - 停止處理超長備註的選填備註 3 | - 修正在淺色模式中列印多頁時的錯誤 4 | -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Updater.app/Contents/Resources/fr_CA.lproj: -------------------------------------------------------------------------------- 1 | fr.lproj -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Updater.app/Contents/Resources/pt.lproj: -------------------------------------------------------------------------------- 1 | pt_BR.lproj -------------------------------------------------------------------------------- /fastlane/appstoreres/metadata/source/keywords.txt: -------------------------------------------------------------------------------- 1 | simplenote,note,notes,sync,syncing,list,todo,simple,markdown,ideas -------------------------------------------------------------------------------- /fastlane/metadata/ar-SA/keywords.txt: -------------------------------------------------------------------------------- 1 | simplenote، ملحوظة، ملحوظات، مزامنة، قائمة، قائمة المهام، بسيط، الضبط، أفكار 2 | -------------------------------------------------------------------------------- /fastlane/metadata/he/keywords.txt: -------------------------------------------------------------------------------- 1 | simplenote, פתק, פתקים, סנכרון, מסנכרן, רשימה, משימות, פשוט, markdown, רעיונות 2 | -------------------------------------------------------------------------------- /fastlane/metadata/ru/keywords.txt: -------------------------------------------------------------------------------- 1 | simplenote,заметка,заметки,синхронизация,спиоск,списокдел,просто,markdown,идеи 2 | -------------------------------------------------------------------------------- /fastlane/metadata/zh-Hans/release_notes.txt: -------------------------------------------------------------------------------- 1 | - 更新了面向加州用户的隐私声明的链接 2 | - 已禁用超长备注的可选处理功能 3 | - 修复了在浅色模式下打印多页时出现的错误 4 | -------------------------------------------------------------------------------- /External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/Updater.app/Contents/PkgInfo: -------------------------------------------------------------------------------- 1 | APPL???? -------------------------------------------------------------------------------- /Simplenote/Images.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /fastlane/metadata/es-ES/keywords.txt: -------------------------------------------------------------------------------- 1 | simplenote,nota,notas,sincronizar,sincronizando,lista,parahacer,simple,notas,ideas 2 | -------------------------------------------------------------------------------- /fastlane/metadata/fr-FR/keywords.txt: -------------------------------------------------------------------------------- 1 | simplenote,note,notes,sync,synchronisation,liste,à faire,simple,markdown,idées 2 | -------------------------------------------------------------------------------- /fastlane/metadata/id/keywords.txt: -------------------------------------------------------------------------------- 1 | simplenote,catatan,sinkronisasi,menyinkronisasi,daftar,tugas,sederhana,markdown,ide 2 | -------------------------------------------------------------------------------- /External/Sparkle/bin/BinaryDelta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/bin/BinaryDelta -------------------------------------------------------------------------------- /External/Sparkle/bin/sign_update: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/bin/sign_update -------------------------------------------------------------------------------- /Simplenote/Icons.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /fastlane/metadata/it/keywords.txt: -------------------------------------------------------------------------------- 1 | simplenote,nota,note,sincronizzare,sincronizzazione,elenco,dafare,semplice,markdown,idee 2 | -------------------------------------------------------------------------------- /fastlane/metadata/sv/keywords.txt: -------------------------------------------------------------------------------- 1 | simplenote,anteckning,anteckningar,synk,synkronisering,lista,attgöra,enkel,markdown,ideer 2 | -------------------------------------------------------------------------------- /External/Sparkle/bin/generate_keys: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/bin/generate_keys -------------------------------------------------------------------------------- /Simplenote/Images.xcassets/Icons/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /fastlane/metadata/de-DE/keywords.txt: -------------------------------------------------------------------------------- 1 | simplenote,Notiz,Notizen,synchronisieren,Synchronisierung,Liste,To-do,einfach,Markdown,Ideen 2 | -------------------------------------------------------------------------------- /External/Sparkle/bin/generate_appcast: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/bin/generate_appcast -------------------------------------------------------------------------------- /Simplenote/Images.xcassets/Buttons/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /fastlane/metadata/nl-NL/keywords.txt: -------------------------------------------------------------------------------- 1 | simplenote,notitie,notities,synchronisatie,synchroniseren,lijst,todo,eenvoudig,markdown,ideeën 2 | -------------------------------------------------------------------------------- /fastlane/metadata/pt-BR/keywords.txt: -------------------------------------------------------------------------------- 1 | simplenote,anotação,anotações,sincronizar,sincronização,lista,tarefas,simples,markdown,ideias 2 | -------------------------------------------------------------------------------- /.configure-files/SPCredentials.swift.enc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/.configure-files/SPCredentials.swift.enc -------------------------------------------------------------------------------- /fastlane/metadata/ko/release_notes.txt: -------------------------------------------------------------------------------- 1 | - 캘리포니아 사용자를 위한 개인정보 공지 링크 업데이트함 2 | - 매우 긴 참고 사항에 대한 선택적 참고 사항 처리 중지 3 | - 밝게 모드에서 여러 페이지 인쇄 시 버그 수정함 4 | -------------------------------------------------------------------------------- /fastlane/metadata/ja/release_notes.txt: -------------------------------------------------------------------------------- 1 | - カリフォルニア州のユーザーへのプライバシー通知のリンクを更新しました 2 | - ノートが非常に長い場合にオプションのノート処理を停止します 3 | -ライトモードで複数ページを印刷する際のバグを修正しました 4 | -------------------------------------------------------------------------------- /BuildTools/Empty.swift: -------------------------------------------------------------------------------- 1 | // Here only to satisfy SwiftPM requirement. 2 | // See https://github.com/nicklockwood/SwiftFormat#1-create-a-buildtools-folder-and-packageswift 3 | -------------------------------------------------------------------------------- /Simplenote/Icons.xcassets/AppIcon.appiconset/icon_16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/Simplenote/Icons.xcassets/AppIcon.appiconset/icon_16x16.png -------------------------------------------------------------------------------- /Simplenote/Icons.xcassets/AppIcon.appiconset/icon_32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/Simplenote/Icons.xcassets/AppIcon.appiconset/icon_32x32.png -------------------------------------------------------------------------------- /Simplenote/Icons.xcassets/AppIcon.appiconset/icon_128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/Simplenote/Icons.xcassets/AppIcon.appiconset/icon_128x128.png -------------------------------------------------------------------------------- /Simplenote/Icons.xcassets/AppIcon.appiconset/icon_16x16@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/Simplenote/Icons.xcassets/AppIcon.appiconset/icon_16x16@2x.png -------------------------------------------------------------------------------- /Simplenote/Icons.xcassets/AppIcon.appiconset/icon_256x256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/Simplenote/Icons.xcassets/AppIcon.appiconset/icon_256x256.png -------------------------------------------------------------------------------- /Simplenote/Icons.xcassets/AppIcon.appiconset/icon_32x32@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/Simplenote/Icons.xcassets/AppIcon.appiconset/icon_32x32@2x.png -------------------------------------------------------------------------------- /Simplenote/Icons.xcassets/AppIcon.appiconset/icon_512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/Simplenote/Icons.xcassets/AppIcon.appiconset/icon_512x512.png -------------------------------------------------------------------------------- /Simplenote/Images.xcassets/Icons/icon_pin.imageset/pinned.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/Simplenote/Images.xcassets/Icons/icon_pin.imageset/pinned.pdf -------------------------------------------------------------------------------- /Simplenote/Images.xcassets/Icons/icon_wp.imageset/icon_wp.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/Simplenote/Images.xcassets/Icons/icon_wp.imageset/icon_wp.pdf -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Sparkle: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Sparkle -------------------------------------------------------------------------------- /Simplenote/Icons.xcassets/AppIcon-Beta.appiconset/icon_16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/Simplenote/Icons.xcassets/AppIcon-Beta.appiconset/icon_16x16.png -------------------------------------------------------------------------------- /Simplenote/Icons.xcassets/AppIcon-Beta.appiconset/icon_32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/Simplenote/Icons.xcassets/AppIcon-Beta.appiconset/icon_32x32.png -------------------------------------------------------------------------------- /Simplenote/Icons.xcassets/AppIcon.appiconset/icon_128x128@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/Simplenote/Icons.xcassets/AppIcon.appiconset/icon_128x128@2x.png -------------------------------------------------------------------------------- /Simplenote/Icons.xcassets/AppIcon.appiconset/icon_256x256@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/Simplenote/Icons.xcassets/AppIcon.appiconset/icon_256x256@2x.png -------------------------------------------------------------------------------- /Simplenote/Icons.xcassets/AppIcon.appiconset/icon_512x512@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/Simplenote/Icons.xcassets/AppIcon.appiconset/icon_512x512@2x.png -------------------------------------------------------------------------------- /Simplenote/Images.xcassets/Buttons/button_info.imageset/info.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/Simplenote/Images.xcassets/Buttons/button_info.imageset/info.pdf -------------------------------------------------------------------------------- /Simplenote/Images.xcassets/Icons/icon_mail.imageset/icon_mail.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/Simplenote/Images.xcassets/Icons/icon_mail.imageset/icon_mail.pdf -------------------------------------------------------------------------------- /Simplenote/Images.xcassets/Icons/icon_shared.imageset/publish.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/Simplenote/Images.xcassets/Icons/icon_shared.imageset/publish.pdf -------------------------------------------------------------------------------- /Simplenote/Simplenote.xcdatamodeld/Simplenote.xcdatamodel/layout: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/Simplenote/Simplenote.xcdatamodeld/Simplenote.xcdatamodel/layout -------------------------------------------------------------------------------- /SimplenoteTests/Constants.swift: -------------------------------------------------------------------------------- 1 | /// Unit Tests Constants 2 | struct Constants { 3 | 4 | /// Default Expectation Timeout 5 | static let expectationTimeout = TimeInterval(10) 6 | } 7 | -------------------------------------------------------------------------------- /Simplenote/Icons.xcassets/AppIcon-Beta.appiconset/icon_128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/Simplenote/Icons.xcassets/AppIcon-Beta.appiconset/icon_128x128.png -------------------------------------------------------------------------------- /Simplenote/Icons.xcassets/AppIcon-Beta.appiconset/icon_16x16@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/Simplenote/Icons.xcassets/AppIcon-Beta.appiconset/icon_16x16@2x.png -------------------------------------------------------------------------------- /Simplenote/Icons.xcassets/AppIcon-Beta.appiconset/icon_256x256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/Simplenote/Icons.xcassets/AppIcon-Beta.appiconset/icon_256x256.png -------------------------------------------------------------------------------- /Simplenote/Icons.xcassets/AppIcon-Beta.appiconset/icon_32x32@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/Simplenote/Icons.xcassets/AppIcon-Beta.appiconset/icon_32x32@2x.png -------------------------------------------------------------------------------- /Simplenote/Icons.xcassets/AppIcon-Beta.appiconset/icon_512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/Simplenote/Icons.xcassets/AppIcon-Beta.appiconset/icon_512x512.png -------------------------------------------------------------------------------- /Simplenote/Images.xcassets/Buttons/button_cross.imageset/cross.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/Simplenote/Images.xcassets/Buttons/button_cross.imageset/cross.pdf -------------------------------------------------------------------------------- /Simplenote/Images.xcassets/Buttons/button_share.imageset/share.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/Simplenote/Images.xcassets/Buttons/button_share.imageset/share.pdf -------------------------------------------------------------------------------- /Simplenote/Images.xcassets/Buttons/button_trash.imageset/trash.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/Simplenote/Images.xcassets/Buttons/button_trash.imageset/trash.pdf -------------------------------------------------------------------------------- /Simplenote/Images.xcassets/Icons/icon_simplenote.imageset/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/Simplenote/Images.xcassets/Icons/icon_simplenote.imageset/logo.png -------------------------------------------------------------------------------- /Simplenote/Simplenote.xcdatamodeld/Simplenote.xcdatamodel/elements: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/Simplenote/Simplenote.xcdatamodeld/Simplenote.xcdatamodel/elements -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Modules/module.modulemap: -------------------------------------------------------------------------------- 1 | framework module Sparkle { 2 | umbrella header "Sparkle.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Simplenote/Icons.xcassets/AppIcon-Beta.appiconset/icon_128x128@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/Simplenote/Icons.xcassets/AppIcon-Beta.appiconset/icon_128x128@2x.png -------------------------------------------------------------------------------- /Simplenote/Icons.xcassets/AppIcon-Beta.appiconset/icon_256x256@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/Simplenote/Icons.xcassets/AppIcon-Beta.appiconset/icon_256x256@2x.png -------------------------------------------------------------------------------- /Simplenote/Icons.xcassets/AppIcon-Beta.appiconset/icon_512x512@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/Simplenote/Icons.xcassets/AppIcon-Beta.appiconset/icon_512x512@2x.png -------------------------------------------------------------------------------- /Simplenote/Images.xcassets/Buttons/button_all_notes.imageset/notes.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/Simplenote/Images.xcassets/Buttons/button_all_notes.imageset/notes.pdf -------------------------------------------------------------------------------- /Simplenote/Images.xcassets/Buttons/button_history.imageset/history.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/Simplenote/Images.xcassets/Buttons/button_history.imageset/history.pdf -------------------------------------------------------------------------------- /Simplenote/Images.xcassets/Buttons/button_restore.imageset/restore.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/Simplenote/Images.xcassets/Buttons/button_restore.imageset/restore.pdf -------------------------------------------------------------------------------- /Simplenote/Images.xcassets/Buttons/button_search.imageset/search.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/Simplenote/Images.xcassets/Buttons/button_search.imageset/search.pdf -------------------------------------------------------------------------------- /Simplenote/Images.xcassets/Icons/icon_simplenote.imageset/logo@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/Simplenote/Images.xcassets/Icons/icon_simplenote.imageset/logo@2x.png -------------------------------------------------------------------------------- /Simplenote/Images.xcassets/Icons/icon_simplenote.imageset/logo@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/Simplenote/Images.xcassets/Icons/icon_simplenote.imageset/logo@3x.png -------------------------------------------------------------------------------- /.buildkite/commands/build-and-test.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash -eu 2 | 3 | echo "--- :rubygems: Setting up Gems" 4 | install_gems 5 | 6 | echo "--- :hammer_and_wrench: Build and Test" 7 | bundle exec fastlane test 8 | -------------------------------------------------------------------------------- /Simplenote/Images.xcassets/Buttons/button_ellipsis.imageset/ellipsis.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/Simplenote/Images.xcassets/Buttons/button_ellipsis.imageset/ellipsis.pdf -------------------------------------------------------------------------------- /Simplenote/Images.xcassets/Buttons/button_untagged.imageset/untagged.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/Simplenote/Images.xcassets/Buttons/button_untagged.imageset/untagged.pdf -------------------------------------------------------------------------------- /Simplenote/Preferences.h: -------------------------------------------------------------------------------- 1 | @import Simperium.SPManagedObject; 2 | 3 | 4 | @interface Preferences: SPManagedObject 5 | 6 | @property (nullable, nonatomic, copy) NSNumber *analytics_enabled; 7 | 8 | @end 9 | -------------------------------------------------------------------------------- /Simplenote/Images.xcassets/Buttons/button_tags_open.imageset/tags-open.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/Simplenote/Images.xcassets/Buttons/button_tags_open.imageset/tags-open.pdf -------------------------------------------------------------------------------- /config/Project.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Version.public.xcconfig" 2 | 3 | DEVELOPMENT_TEAM = PZYM8XX95Q 4 | CODE_SIGN_STYLE = Manual 5 | 6 | // Required to export for Notarization 7 | ENABLE_HARDENED_RUNTIME = YES 8 | -------------------------------------------------------------------------------- /fastlane/Appfile: -------------------------------------------------------------------------------- 1 | app_identifier("com.automattic.SimplenoteMac") # The bundle identifier of your app 2 | 3 | itc_team_id("299112") # App Store Connect Team ID 4 | team_id("PZYM8XX95Q") # Developer Portal Team ID -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate -------------------------------------------------------------------------------- /Simplenote/Images.xcassets/Buttons/button_tags_close.imageset/tags-close.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/Simplenote/Images.xcassets/Buttons/button_tags_close.imageset/tags-close.pdf -------------------------------------------------------------------------------- /Simplenote/Images.xcassets/Icons/icon_task_checked.imageset/task-checked.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/Simplenote/Images.xcassets/Icons/icon_task_checked.imageset/task-checked.pdf -------------------------------------------------------------------------------- /Simplenote/Resources/release_notes.txt: -------------------------------------------------------------------------------- 1 | - Updated link to privacy notice for California users 2 | - Stop optional note processing for very long notes 3 | - Fixed a bug when printing multiple pages when in light mode 4 | -------------------------------------------------------------------------------- /fastlane/metadata/he/release_notes.txt: -------------------------------------------------------------------------------- 1 | - עדכנו את הקישור להצהרת הפרטיות עבור משתמשים בקליפורניה 2 | - ניתן להפסיק את העיבוד האופציונלי של הפתקים בפתקים ארוכים מאוד 3 | - תיקנו באג בהדפסה של מספר עמודים במצב בהיר 4 | -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/SUStatus.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/SUStatus.nib -------------------------------------------------------------------------------- /Simplenote/Images.xcassets/Buttons/button_new_note.imageset/button_new_note.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/Simplenote/Images.xcassets/Buttons/button_new_note.imageset/button_new_note.pdf -------------------------------------------------------------------------------- /Simplenote/Images.xcassets/Icons/icon_chevron_down.imageset/disclosure-down.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/Simplenote/Images.xcassets/Icons/icon_chevron_down.imageset/disclosure-down.pdf -------------------------------------------------------------------------------- /Simplenote/Images.xcassets/Icons/icon_task_unchecked.imageset/task-unchecked.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/Simplenote/Images.xcassets/Icons/icon_task_unchecked.imageset/task-unchecked.pdf -------------------------------------------------------------------------------- /Simplenote/NSString+Metadata.h: -------------------------------------------------------------------------------- 1 | 2 | @interface NSString (Metadata) 3 | 4 | - (BOOL)containsEmailAddress; 5 | - (NSInteger)convertCursorLocation:(NSInteger)oldLocation toLocationInText:(NSString *)newText; 6 | 7 | @end 8 | -------------------------------------------------------------------------------- /Simplenote/NoteEditorMetadata.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | // MARK: - NoteEditorMetadata 4 | // 5 | struct NoteEditorMetadata: Codable { 6 | let scrollPosition: CGFloat? 7 | let cursorLocation: Int? 8 | } 9 | -------------------------------------------------------------------------------- /fastlane/metadata/default/release_notes.txt: -------------------------------------------------------------------------------- 1 | - Updated link to privacy notice for California users 2 | - Stop optional note processing for very long notes 3 | - Fixed a bug when printing multiple pages when in light mode 4 | -------------------------------------------------------------------------------- /Simplenote.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Simplenote/Images.xcassets/Buttons/button_checklist.imageset/button_checklist.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/Simplenote/Images.xcassets/Buttons/button_checklist.imageset/button_checklist.pdf -------------------------------------------------------------------------------- /Simplenote/Images.xcassets/Icons/icon_arrow_top_right.imageset/arrow-top-right.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/Simplenote/Images.xcassets/Icons/icon_arrow_top_right.imageset/arrow-top-right.pdf -------------------------------------------------------------------------------- /Simplenote/NSEdgeInsets+Simplenote.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | // MARK: - NSEdgeInsets + Simplenote 4 | // 5 | extension NSEdgeInsets { 6 | 7 | static let zero = NSEdgeInsetsMake(.zero, .zero, .zero, .zero) 8 | } 9 | -------------------------------------------------------------------------------- /.buildkite/commands/build-and-test-app-store.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash -eu 2 | 3 | echo "--- :rubygems: Setting up Gems" 4 | install_gems 5 | 6 | echo "--- :hammer_and_wrench: Build and Test" 7 | bundle exec fastlane test_app_store_build 8 | -------------------------------------------------------------------------------- /Simplenote/Images.xcassets/Buttons/button_preview_off.imageset/visibility-hidden.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/Simplenote/Images.xcassets/Buttons/button_preview_off.imageset/visibility-hidden.pdf -------------------------------------------------------------------------------- /Simplenote/Images.xcassets/Buttons/button_preview_on.imageset/visibility-visible.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/Simplenote/Images.xcassets/Buttons/button_preview_on.imageset/visibility-visible.pdf -------------------------------------------------------------------------------- /Simplenote/Images.xcassets/Icons/icon_simplenote_login.imageset/icon_simplenote.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/Simplenote/Images.xcassets/Icons/icon_simplenote_login.imageset/icon_simplenote.pdf -------------------------------------------------------------------------------- /Simplenote/NSViewController+Simplenote.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | extension NSViewController { 4 | var containingNavigationController: SPNavigationController? { 5 | parent as? SPNavigationController 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /Simplenote/Images.xcassets/Buttons/button_ellipsis_outline.imageset/ellipsis-outline.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/Simplenote/Images.xcassets/Buttons/button_ellipsis_outline.imageset/ellipsis-outline.pdf -------------------------------------------------------------------------------- /Simplenote/Images.xcassets/Icons/icon_disclosure_right.imageset/icon_disclosure_right.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/Simplenote/Images.xcassets/Icons/icon_disclosure_right.imageset/icon_disclosure_right.pdf -------------------------------------------------------------------------------- /Simplenote/Images.xcassets/Icons/icon_simplenote_inner.imageset/icon_simplenote_inner.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/Simplenote/Images.xcassets/Icons/icon_simplenote_inner.imageset/icon_simplenote_inner.pdf -------------------------------------------------------------------------------- /Simplenote/Simperium+Simplenote.h: -------------------------------------------------------------------------------- 1 | #import 2 | #import "Preferences.h" 3 | @import Simperium; 4 | 5 | 6 | @interface Simperium (Simplenote) 7 | 8 | - (Preferences *)preferencesObject; 9 | 10 | @end 11 | -------------------------------------------------------------------------------- /fastlane/metadata/ar-SA/release_notes.txt: -------------------------------------------------------------------------------- 1 | - تم تحديث رابط إشعار الخصوصية الخاص بالمستخدمين في كاليفورنيا 2 | - إيقاف معالجة الملحوظات الاختيارية للملحوظات الطويلة للغاية 3 | - تم إصلاح خطأ عند طباعة صفحات متعددة عندما تكون في الوضع الفاتح 4 | -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/ca.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/ca.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/cs.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/cs.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/da.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/da.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/de.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/de.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/el.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/el.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/es.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/es.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/fi.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/fi.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/fr.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/fr.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/he.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/he.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/hr.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/hr.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/is.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/is.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/it.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/it.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/ja.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/ja.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/ko.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/ko.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/nb.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/nb.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/nl.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/nl.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/pl.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/pl.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/ro.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/ro.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/ru.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/ru.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/sk.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/sk.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/sl.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/sl.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/sv.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/sv.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/th.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/th.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/tr.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/tr.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/uk.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/uk.lproj/Sparkle.strings -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # Apply to all files 2 | [*] 3 | end_of_line = lf 4 | insert_final_newline = true 5 | trim_trailing_whitespace = true 6 | 7 | # Ruby specific rules 8 | [{*.rb,Fastfile,Gemfile}] 9 | indent_style = space 10 | indent_size = 2 11 | -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Base.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Base.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Base.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Base.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Simplenote/NSFont+Simplenote.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | import AppKit 3 | 4 | // MARK: - NSFont + Simplenote 5 | // 6 | extension NSFont { 7 | 8 | var lineHeight: CGFloat { 9 | ceil(ascender - descender) 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Simplenote/SpacerTableViewCell.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | import AppKit 3 | 4 | // MARK: - SpacerTableViewCell: Literally an empty TableViewCell, which allows us to inject spacing 5 | // 6 | class SpacerTableViewCell: NSTableCellView { 7 | 8 | } 9 | -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/ar.lproj/SUUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/ar.lproj/SUUpdateAlert.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/cs.lproj/SUUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/cs.lproj/SUUpdateAlert.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/da.lproj/SUUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/da.lproj/SUUpdateAlert.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdateAlert.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/el.lproj/SUUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/el.lproj/SUUpdateAlert.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdateAlert.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/fi.lproj/SUUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/fi.lproj/SUUpdateAlert.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/is.lproj/SUUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/is.lproj/SUUpdateAlert.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/ja.lproj/SUUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/ja.lproj/SUUpdateAlert.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/ko.lproj/SUUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/ko.lproj/SUUpdateAlert.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/nb.lproj/SUUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/nb.lproj/SUUpdateAlert.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdateAlert.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdateAlert.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/ro.lproj/SUUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/ro.lproj/SUUpdateAlert.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdateAlert.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/sk.lproj/SUUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/sk.lproj/SUUpdateAlert.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/sl.lproj/SUUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/sl.lproj/SUUpdateAlert.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdateAlert.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/th.lproj/SUUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/th.lproj/SUUpdateAlert.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdateAlert.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/uk.lproj/SUUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/uk.lproj/SUUpdateAlert.strings -------------------------------------------------------------------------------- /External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/Autoupdate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/Autoupdate -------------------------------------------------------------------------------- /fastlane/metadata/de-DE/release_notes.txt: -------------------------------------------------------------------------------- 1 | - Aktualisierter Link zu den Datenschutzhinweisen für Benutzer in Kalifornien 2 | - Optionale Notizenverarbeitung für sehr lange Notizen anhalten 3 | - Fehler beim Drucken mehrerer Seiten im Hell-Modus behoben 4 | -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/SUUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/SUUpdateAlert.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/SUUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/SUUpdateAlert.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdateAlert.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUUpdateAlert.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUUpdateAlert.strings -------------------------------------------------------------------------------- /Simplenote/NSFont+Theme.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | // MARK: - NSFont + Theme API 4 | // 5 | extension NSFont { 6 | 7 | @objc 8 | static var simplenoteSecondaryTextFont: NSFont { 9 | .systemFont(ofSize: 13) 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /fastlane/metadata/ru/release_notes.txt: -------------------------------------------------------------------------------- 1 | - Обновлена ссылка на заявление о конфиденциальности для пользователей из Калифорнии. 2 | - Прекращена опциональная обработка слишком длинных заметок. 3 | - Исправлена ошибка печати нескольких страниц в светлом режиме. 4 | -------------------------------------------------------------------------------- /fastlane/metadata/tr/release_notes.txt: -------------------------------------------------------------------------------- 1 | - Kaliforniya'daki kullanıcılar için gizlilik bildirimine giden bağlantı güncellendi 2 | - Çok uzun notlar için isteğe bağlı not işlemeyi durdurun 3 | - Açık modda birden çok sayfa yazdırırken oluşan bir hata düzeltildi 4 | -------------------------------------------------------------------------------- /.buildkite/commands/build-and-upload-release.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash -eu 2 | 3 | echo "--- :rubygems: Setting up Gems" 4 | install_gems 5 | 6 | echo "--- :hammer_and_wrench: Build and Test" 7 | bundle exec fastlane build_and_upload_app_store create_github_release:true 8 | -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Updater.app/Contents/MacOS/Updater: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Updater.app/Contents/MacOS/Updater -------------------------------------------------------------------------------- /Simplenote/Simplenote-Prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // Prefix header for all source files of the 'Simplenote' target in the 'Simplenote' project 3 | // 4 | 5 | #ifdef __OBJC__ 6 | #import 7 | #import 8 | #endif 9 | -------------------------------------------------------------------------------- /fastlane/metadata/id/release_notes.txt: -------------------------------------------------------------------------------- 1 | - Pembaruan tautan pada pemberitahuan privasi bagi pengguna di California 2 | - Pemrosesan catatan opsional untuk catatan yang terlalu panjang dihentikan 3 | - Perbaikan bug saat mencetak beberapa halaman dalam mode terang 4 | -------------------------------------------------------------------------------- /Simplenote/NSRange+Simplenote.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | // MARK: - NSRange Simplenote Methods 4 | // 5 | extension NSRange { 6 | 7 | /// Range at (zero, zero)! 8 | /// 9 | static let zero = NSRange(location: .zero, length: .zero) 10 | } 11 | -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Base.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Base.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /fastlane/metadata/it/release_notes.txt: -------------------------------------------------------------------------------- 1 | - Aggiornato il link alla nota sulla privacy per utenti in California 2 | - Introdotta l'interruzione facoltativa dell'elaborazione in caso di note molto lunghe 3 | - Corretto un bug durante la stampa di più pagine in modalità chiara 4 | -------------------------------------------------------------------------------- /fastlane/metadata/nl-NL/release_notes.txt: -------------------------------------------------------------------------------- 1 | - Link naar privacyverklaring voor gebruikers in Californië bijgewerkt 2 | - De verwerking van optionele notities voor zeer lange notities stopgezet 3 | - Een bug verholpen bij het afdrukken van meerdere pagina's in de lichte modus 4 | -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Updater.app/Contents/Resources/SUStatus.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Updater.app/Contents/Resources/SUStatus.nib -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/ar.lproj/SUUpdatePermissionPrompt.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/ar.lproj/SUUpdatePermissionPrompt.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/cs.lproj/SUUpdatePermissionPrompt.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/cs.lproj/SUUpdatePermissionPrompt.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/da.lproj/SUUpdatePermissionPrompt.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/da.lproj/SUUpdatePermissionPrompt.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdatePermissionPrompt.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdatePermissionPrompt.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/el.lproj/SUUpdatePermissionPrompt.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/el.lproj/SUUpdatePermissionPrompt.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdatePermissionPrompt.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdatePermissionPrompt.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/fi.lproj/SUUpdatePermissionPrompt.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/fi.lproj/SUUpdatePermissionPrompt.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdatePermissionPrompt.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdatePermissionPrompt.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/hu.lproj/SUUpdatePermissionPrompt.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/hu.lproj/SUUpdatePermissionPrompt.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/is.lproj/SUUpdatePermissionPrompt.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/is.lproj/SUUpdatePermissionPrompt.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdatePermissionPrompt.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdatePermissionPrompt.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/ja.lproj/SUUpdatePermissionPrompt.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/ja.lproj/SUUpdatePermissionPrompt.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/ko.lproj/SUUpdatePermissionPrompt.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/ko.lproj/SUUpdatePermissionPrompt.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/nb.lproj/SUUpdatePermissionPrompt.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/nb.lproj/SUUpdatePermissionPrompt.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdatePermissionPrompt.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdatePermissionPrompt.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdatePermissionPrompt.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdatePermissionPrompt.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/ro.lproj/SUUpdatePermissionPrompt.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/ro.lproj/SUUpdatePermissionPrompt.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdatePermissionPrompt.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdatePermissionPrompt.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/sk.lproj/SUUpdatePermissionPrompt.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/sk.lproj/SUUpdatePermissionPrompt.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/sl.lproj/SUUpdatePermissionPrompt.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/sl.lproj/SUUpdatePermissionPrompt.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdatePermissionPrompt.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdatePermissionPrompt.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/th.lproj/SUUpdatePermissionPrompt.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/th.lproj/SUUpdatePermissionPrompt.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdatePermissionPrompt.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdatePermissionPrompt.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/uk.lproj/SUUpdatePermissionPrompt.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/uk.lproj/SUUpdatePermissionPrompt.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/SUUpdatePermissionPrompt.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/SUUpdatePermissionPrompt.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/SUUpdatePermissionPrompt.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/SUUpdatePermissionPrompt.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdatePermissionPrompt.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdatePermissionPrompt.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUUpdatePermissionPrompt.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUUpdatePermissionPrompt.strings -------------------------------------------------------------------------------- /.buildkite/release-builds.yml: -------------------------------------------------------------------------------- 1 | steps: 2 | - label: "🛠 App Store Upload" 3 | command: .buildkite/commands/build-and-upload-release.sh 4 | priority: 1 5 | plugins: [$CI_TOOLKIT_PLUGIN] 6 | agents: 7 | queue: mac 8 | env: 9 | IMAGE_ID: $IMAGE_ID 10 | -------------------------------------------------------------------------------- /fastlane/metadata/fr-FR/release_notes.txt: -------------------------------------------------------------------------------- 1 | - Mise à jour du lien vers l’avis de confidentialité pour les utilisateurs californiens 2 | - Arrêt du traitement des notes facultatives pour les notes très longues 3 | - Correction d’un bug lors de l’impression de plusieurs pages en mode clair 4 | -------------------------------------------------------------------------------- /fastlane/metadata/es-ES/release_notes.txt: -------------------------------------------------------------------------------- 1 | - Se ha actualizado el enlace que lleva al aviso de privacidad para usuarios de California 2 | - Se ha detenido el procesamiento opcional para notas muy largas 3 | - Se ha corregido un error que se producía al imprimir varias páginas en el modo claro 4 | -------------------------------------------------------------------------------- /fastlane/metadata/pt-BR/release_notes.txt: -------------------------------------------------------------------------------- 1 | - Link do aviso de privacidade para usuários residentes da Califórnia atualizado 2 | - Capacidade de interromper o processamento opcional de anotações muito longas adicionada 3 | - Corrigido um bug que ocorria ao imprimir várias páginas no modo claro 4 | -------------------------------------------------------------------------------- /External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/Updater.app/Contents/MacOS/Updater: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/Updater.app/Contents/MacOS/Updater -------------------------------------------------------------------------------- /External/Sparkle/XPCServices/org.sparkle-project.InstallerStatus.xpc/Contents/MacOS/org.sparkle-project.InstallerStatus: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/XPCServices/org.sparkle-project.InstallerStatus.xpc/Contents/MacOS/org.sparkle-project.InstallerStatus -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Updater.app/Contents/Resources/ca.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Updater.app/Contents/Resources/ca.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Updater.app/Contents/Resources/cs.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Updater.app/Contents/Resources/cs.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Updater.app/Contents/Resources/da.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Updater.app/Contents/Resources/da.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Updater.app/Contents/Resources/de.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Updater.app/Contents/Resources/de.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Updater.app/Contents/Resources/el.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Updater.app/Contents/Resources/el.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Updater.app/Contents/Resources/es.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Updater.app/Contents/Resources/es.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Updater.app/Contents/Resources/fi.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Updater.app/Contents/Resources/fi.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Updater.app/Contents/Resources/fr.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Updater.app/Contents/Resources/fr.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Updater.app/Contents/Resources/he.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Updater.app/Contents/Resources/he.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Updater.app/Contents/Resources/hr.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Updater.app/Contents/Resources/hr.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Updater.app/Contents/Resources/is.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Updater.app/Contents/Resources/is.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Updater.app/Contents/Resources/it.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Updater.app/Contents/Resources/it.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Updater.app/Contents/Resources/ja.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Updater.app/Contents/Resources/ja.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Updater.app/Contents/Resources/ko.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Updater.app/Contents/Resources/ko.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Updater.app/Contents/Resources/nb.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Updater.app/Contents/Resources/nb.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Updater.app/Contents/Resources/nl.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Updater.app/Contents/Resources/nl.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Updater.app/Contents/Resources/pl.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Updater.app/Contents/Resources/pl.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Updater.app/Contents/Resources/ro.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Updater.app/Contents/Resources/ro.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Updater.app/Contents/Resources/ru.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Updater.app/Contents/Resources/ru.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Updater.app/Contents/Resources/sk.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Updater.app/Contents/Resources/sk.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Updater.app/Contents/Resources/sl.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Updater.app/Contents/Resources/sl.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Updater.app/Contents/Resources/sv.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Updater.app/Contents/Resources/sv.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Updater.app/Contents/Resources/th.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Updater.app/Contents/Resources/th.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Updater.app/Contents/Resources/tr.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Updater.app/Contents/Resources/tr.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Updater.app/Contents/Resources/uk.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Updater.app/Contents/Resources/uk.lproj/Sparkle.strings -------------------------------------------------------------------------------- /fastlane/metadata/sv/release_notes.txt: -------------------------------------------------------------------------------- 1 | - Vi har uppdaterat länken till integritetsnotisen för användare i Kalifornien 2 | - Vi har lagt till möjligheten att stoppa valfri anteckningsbehandling för mycket långa anteckningar 3 | - Vi har åtgärdat en bugg som uppstod när flera sidor skrevs ut i ljust läge 4 | -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Updater.app/Contents/Resources/Base.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Updater.app/Contents/Resources/Base.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Updater.app/Contents/Resources/pt_BR.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Updater.app/Contents/Resources/pt_BR.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Updater.app/Contents/Resources/pt_PT.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Updater.app/Contents/Resources/pt_PT.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Updater.app/Contents/Resources/zh_CN.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Updater.app/Contents/Resources/zh_CN.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Updater.app/Contents/Resources/zh_TW.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/Updater.app/Contents/Resources/zh_TW.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/org.sparkle-project.InstallerLauncher: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/org.sparkle-project.InstallerLauncher -------------------------------------------------------------------------------- /Simplenote/Date+Simplenote.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | extension Date { 4 | func increased(byDays days: Int) -> Date? { 5 | var components = DateComponents() 6 | components.day = days 7 | return Calendar.current.date(byAdding: components, to: self) 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /External/Hoextdown/version.c: -------------------------------------------------------------------------------- 1 | #include "version.h" 2 | 3 | void 4 | hoedown_version(int *major, int *minor, int *revision, int *extras) 5 | { 6 | *major = HOEDOWN_VERSION_MAJOR; 7 | *minor = HOEDOWN_VERSION_MINOR; 8 | *revision = HOEDOWN_VERSION_REVISION; 9 | *extras = HOEDOWN_VERSION_EXTRAS; 10 | } 11 | -------------------------------------------------------------------------------- /External/Sparkle/XPCServices/org.sparkle-project.InstallerConnection.xpc/Contents/MacOS/org.sparkle-project.InstallerConnection: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/XPCServices/org.sparkle-project.InstallerConnection.xpc/Contents/MacOS/org.sparkle-project.InstallerConnection -------------------------------------------------------------------------------- /External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/Updater.app/Contents/Resources/SUStatus.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/Updater.app/Contents/Resources/SUStatus.nib -------------------------------------------------------------------------------- /config/Project.Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Project.xcconfig" 2 | 3 | // Each target using this will interpolate its own computed value for the bundle id 4 | PROVISIONING_PROFILE_SPECIFIER = match AppStore $(PRODUCT_BUNDLE_IDENTIFIER) macos 5 | 6 | CODE_SIGN_IDENTITY = Apple Distribution: Automattic, Inc. (PZYM8XX95Q) 7 | -------------------------------------------------------------------------------- /Simplenote/NSWindowFrameAutosaveName+Simplenote.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | // MARK: - NSWindow.FrameAutosaveName 4 | // 5 | extension NSWindow.FrameAutosaveName { 6 | 7 | /// Main Window Autosave Name 8 | /// 9 | static var mainWindow: NSWindow.FrameAutosaveName = "SimplenoteMainWindow" 10 | } 11 | -------------------------------------------------------------------------------- /Simplenote/DateTransformer.h: -------------------------------------------------------------------------------- 1 | // 2 | // DateTransformer.h 3 | // Simplenote 4 | // 5 | // Created by Rainieri Ventura on 1/28/12. 6 | // Copyright (c) 2012 Simperium. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface DateTransformer : NSValueTransformer 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/Updater.app/Contents/Resources/ca.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/Updater.app/Contents/Resources/ca.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/Updater.app/Contents/Resources/cs.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/Updater.app/Contents/Resources/cs.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/Updater.app/Contents/Resources/da.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/Updater.app/Contents/Resources/da.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/Updater.app/Contents/Resources/de.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/Updater.app/Contents/Resources/de.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/Updater.app/Contents/Resources/el.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/Updater.app/Contents/Resources/el.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/Updater.app/Contents/Resources/es.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/Updater.app/Contents/Resources/es.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/Updater.app/Contents/Resources/fi.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/Updater.app/Contents/Resources/fi.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/Updater.app/Contents/Resources/fr.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/Updater.app/Contents/Resources/fr.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/Updater.app/Contents/Resources/he.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/Updater.app/Contents/Resources/he.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/Updater.app/Contents/Resources/hr.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/Updater.app/Contents/Resources/hr.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/Updater.app/Contents/Resources/is.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/Updater.app/Contents/Resources/is.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/Updater.app/Contents/Resources/it.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/Updater.app/Contents/Resources/it.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/Updater.app/Contents/Resources/ja.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/Updater.app/Contents/Resources/ja.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/Updater.app/Contents/Resources/ko.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/Updater.app/Contents/Resources/ko.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/Updater.app/Contents/Resources/nb.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/Updater.app/Contents/Resources/nb.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/Updater.app/Contents/Resources/nl.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/Updater.app/Contents/Resources/nl.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/Updater.app/Contents/Resources/pl.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/Updater.app/Contents/Resources/pl.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/Updater.app/Contents/Resources/pt.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/Updater.app/Contents/Resources/pt.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/Updater.app/Contents/Resources/ro.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/Updater.app/Contents/Resources/ro.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/Updater.app/Contents/Resources/ru.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/Updater.app/Contents/Resources/ru.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/Updater.app/Contents/Resources/sk.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/Updater.app/Contents/Resources/sk.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/Updater.app/Contents/Resources/sl.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/Updater.app/Contents/Resources/sl.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/Updater.app/Contents/Resources/sv.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/Updater.app/Contents/Resources/sv.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/Updater.app/Contents/Resources/th.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/Updater.app/Contents/Resources/th.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/Updater.app/Contents/Resources/tr.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/Updater.app/Contents/Resources/tr.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/Updater.app/Contents/Resources/uk.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/Updater.app/Contents/Resources/uk.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Simplenote/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // Simplenote 4 | // 5 | // Created by Michael Johnston on 11-08-22. 6 | // Copyright (c) 2011 Simperium. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | int main(int argc, char *argv[]) 12 | { 13 | return NSApplicationMain(argc, (const char **)argv); 14 | } 15 | -------------------------------------------------------------------------------- /config/Version.public.xcconfig: -------------------------------------------------------------------------------- 1 | VERSION_SHORT=2.22 2 | 3 | // Public long version. Example: 2.0.0.0. The last 0 means the first build for 4 | // version 2.0.0 5 | VERSION_LONG=2.22.0.1 6 | 7 | // This is the value for the CFBundleVersion it should be incremented on every 8 | // build that gets distributed 9 | BUILD_NUMBER=11263 10 | -------------------------------------------------------------------------------- /External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/Updater.app/Contents/Resources/Base.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/Updater.app/Contents/Resources/Base.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/Updater.app/Contents/Resources/fr_CA.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/Updater.app/Contents/Resources/fr_CA.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/Updater.app/Contents/Resources/pt_BR.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/Updater.app/Contents/Resources/pt_BR.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/Updater.app/Contents/Resources/pt_PT.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/Updater.app/Contents/Resources/pt_PT.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/Updater.app/Contents/Resources/zh_CN.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/Updater.app/Contents/Resources/zh_CN.lproj/Sparkle.strings -------------------------------------------------------------------------------- /External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/Updater.app/Contents/Resources/zh_TW.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Automattic/simplenote-macos/HEAD/External/Sparkle/XPCServices/org.sparkle-project.InstallerLauncher.xpc/Contents/MacOS/Updater.app/Contents/Resources/zh_TW.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Simplenote/Simplenote.xcdatamodeld/.xccurrentversion: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | _XCCurrentVersionName 6 | Simplenote 3.xcdatamodel 7 | 8 | 9 | -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/ReleaseNotesColorStyle.css: -------------------------------------------------------------------------------- 1 | @media (prefers-color-scheme: dark) { 2 | html { 3 | color: white; 4 | background: transparent; 5 | } 6 | :link { 7 | color: #419CFF; 8 | } 9 | :link:active { 10 | color: #FF1919; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Simplenote/NSObject+Helpers.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | /// NSObject: Helper Methods 4 | /// 5 | extension NSObject { 6 | 7 | /// Returns the receiver's classname as a string, not including the namespace. 8 | /// 9 | class var classNameWithoutNamespaces: String { 10 | return String(describing: self) 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Simplenote/NSSearchField+Simplenote.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | // MARK: - NSSearchField Methods 4 | // 5 | extension NSSearchField { 6 | 7 | func cancelSearch() { 8 | stringValue = "" 9 | 10 | let searchCell = cell as? NSSearchFieldCell 11 | searchCell?.cancelButtonCell?.performClick(self) 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /.rubocop.yml: -------------------------------------------------------------------------------- 1 | AllCops: 2 | NewCops: enable 3 | SuggestExtensions: 4 | rubocop-rake: false 5 | 6 | Metrics/MethodLength: 7 | Max: 30 8 | 9 | Layout/LineLength: 10 | Max: 180 11 | 12 | Metrics/BlockLength: 13 | Exclude: 14 | - fastlane/Fastfile 15 | - Rakefile 16 | 17 | Style/HashSyntax: 18 | EnforcedShorthandSyntax: never 19 | -------------------------------------------------------------------------------- /Simplenote/NSScreen+Simplenote.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | // MARK: - NSScreen Simplenote Methods 4 | // 5 | extension NSScreen { 6 | 7 | /// Returns the ratio between 1 point and 1 pixel in the current device. 8 | /// 9 | @objc 10 | var pointToPixelRatio: CGFloat { 11 | return 1.0 / backingScaleFactor 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Simplenote/WPAuthHandler.h: -------------------------------------------------------------------------------- 1 | // 2 | // WPAuthHandler.h 3 | // Simplenote 4 | // Handles oauth authentication with WordPress.com 5 | // 6 | 7 | @import Simperium; 8 | 9 | @interface WPAuthHandler : NSObject 10 | + (BOOL)isWPAuthenticationUrl:(NSURL*)url; 11 | + (SPUser *)authorizeSimplenoteUserFromUrl:(NSURL*)url forAppId:(NSString *)appId; 12 | @end 13 | -------------------------------------------------------------------------------- /Simplenote/NSBox+Simplenote.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | // MARK: - NSBox.BoxType 4 | // 5 | extension NSBox.BoxType { 6 | 7 | /// Sidebar Box Type: We'll disable Desktop Tinting whenever we're in Light Mode 8 | /// 9 | static var simplenoteSidebarBoxType: NSBox.BoxType { 10 | SPUserInterface.isDark ? .primary : .custom 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Simplenote/NSButton+Extensions.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | extension NSButton { 4 | func setTitleColor(_ color: NSColor) { 5 | let currentTitle = NSMutableAttributedString(string: title) 6 | currentTitle.addAttribute(.foregroundColor, value: color, range: currentTitle.fullRange) 7 | attributedTitle = currentTitle 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /Simplenote/NSTextStorage+Simplenote.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | // MARK: - NSTextStorage 4 | // 5 | extension NSTextStorage { 6 | 7 | /// Returns the font at the specified character, if any 8 | /// 9 | func font(at charIndex: Int) -> NSFont? { 10 | return attribute(.font, at: charIndex, effectiveRange: nil) as? NSFont 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Simplenote/Images.xcassets/Icons/icon_task_checked.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "task-checked.pdf", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | }, 12 | "properties" : { 13 | "preserves-vector-representation" : true 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Simplenote/ActivityType.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ActivityType.swift 3 | // Simplenote 4 | // 5 | // Created by Charlie Scheer on 5/23/24. 6 | // Copyright © 2024 Simperium. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | enum ActivityType: String { 12 | case newNoteShortcut = "OpenNewNoteIntent" 13 | case openNoteShortcut = "OpenNoteIntent" 14 | } 15 | -------------------------------------------------------------------------------- /Simplenote/Images.xcassets/Icons/icon_simplenote_login.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "icon_simplenote.pdf", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | }, 12 | "properties" : { 13 | "preserves-vector-representation" : true 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Simplenote/Images.xcassets/Icons/icon_task_unchecked.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "task-unchecked.pdf", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | }, 12 | "properties" : { 13 | "preserves-vector-representation" : true 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Simplenote/NSNotification+Simplenote.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | import AppKit 3 | 4 | // MARK: - NSNotification Simplenote Methods 5 | // 6 | extension NSNotification { 7 | 8 | /// Returns the associated FieldEditor (if any) 9 | /// 10 | @objc 11 | var fieldEditor: NSTextView? { 12 | userInfo?["NSFieldEditor"] as? NSTextView 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /SimplenoteTests/MockStorageSettings.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | @testable import Simplenote 3 | 4 | class MockStorageSettings: StorageSettings { 5 | override var legacyStorageURL: URL { 6 | URL(string: "file:///legacyStorage.com")! 7 | } 8 | 9 | override var sharedStorageURL: URL { 10 | URL(string: "//sharedStorage.url")! 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /SimplenoteTests/URLRequest+Simplenote.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | extension URLRequest { 4 | func decodeHtmlBody() throws -> T? { 5 | guard let _ = httpBody else { 6 | return nil 7 | } 8 | 9 | return try httpBody.map { 10 | try JSONDecoder().decode(T.self, from: $0) 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Simplenote/SPAboutTextField.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SPAboutTextField.swift 3 | // Simplenote 4 | // 5 | // An NSTextField that shows a hand pointer on hover 👆 6 | // 7 | 8 | import Cocoa 9 | 10 | @objc class SPAboutTextField: NSTextField { 11 | 12 | override func resetCursorRects() { 13 | self.addCursorRect(self.bounds, cursor: NSCursor.pointingHand) 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /Simplenote/en.lproj/Credits.rtf: -------------------------------------------------------------------------------- 1 | {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf370 2 | {\fonttbl\f0\fswiss\fcharset0 Helvetica;} 3 | {\colortbl;\red255\green255\blue255;} 4 | \vieww9600\viewh8400\viewkind0 5 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc 6 | {\field{\*\fldinst{HYPERLINK "http://simplenote.com"}}{\fldrslt 7 | \f0\b\fs24 \cf0 simplenote.com}}} -------------------------------------------------------------------------------- /Simplenote/Images.xcassets/Icons/icon_pin.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "pinned.pdf", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | }, 12 | "properties" : { 13 | "preserves-vector-representation" : true, 14 | "template-rendering-intent" : "template" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Simplenote/Images.xcassets/Icons/icon_wp.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "icon_wp.pdf", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | }, 12 | "properties" : { 13 | "preserves-vector-representation" : true, 14 | "template-rendering-intent" : "template" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Simplenote/NumberFormatter+Simplenote.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | // MARK: - NumberFormatter 4 | // 5 | extension NumberFormatter { 6 | 7 | class func localizedString(from integer: Int, style: NumberFormatter.Style) -> String { 8 | let wrappedInt = NSNumber(integerLiteral: integer) 9 | return NumberFormatter.localizedString(from: wrappedInt, number: style) 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /SimplenoteTests/MockURLSessionDataTask.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | // MARK: - MockURLSessionDataTask 4 | // 5 | class MockURLSessionDataTask: URLSessionDataTask { 6 | private let completion: () -> Void 7 | 8 | init(completion: @escaping () -> Void) { 9 | self.completion = completion 10 | } 11 | 12 | override func resume() { 13 | completion() 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /SimplenoteTests/NSUserDefaults+Tests.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | // MARK: - UserDefaults Extension Methods 4 | // 5 | extension UserDefaults { 6 | 7 | /// Resets all of the receiver's values 8 | /// 9 | func reset() { 10 | for (key, _) in dictionaryRepresentation() { 11 | removeObject(forKey: key) 12 | } 13 | 14 | synchronize() 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Simplenote/Images.xcassets/Buttons/button_cross.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "cross.pdf", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | }, 12 | "properties" : { 13 | "preserves-vector-representation" : true, 14 | "template-rendering-intent" : "template" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Simplenote/Images.xcassets/Buttons/button_info.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "info.pdf", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | }, 12 | "properties" : { 13 | "preserves-vector-representation" : true, 14 | "template-rendering-intent" : "template" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Simplenote/Images.xcassets/Buttons/button_search.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "search.pdf", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | }, 12 | "properties" : { 13 | "preserves-vector-representation" : true, 14 | "template-rendering-intent" : "template" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Simplenote/Images.xcassets/Buttons/button_share.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "share.pdf", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | }, 12 | "properties" : { 13 | "preserves-vector-representation" : true, 14 | "template-rendering-intent" : "template" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Simplenote/Images.xcassets/Buttons/button_trash.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "trash.pdf", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | }, 12 | "properties" : { 13 | "preserves-vector-representation" : true, 14 | "template-rendering-intent" : "template" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Simplenote/Images.xcassets/Icons/icon_mail.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "icon_mail.pdf", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | }, 12 | "properties" : { 13 | "preserves-vector-representation" : true, 14 | "template-rendering-intent" : "template" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Simplenote/Images.xcassets/Icons/icon_shared.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "publish.pdf", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | }, 12 | "properties" : { 13 | "preserves-vector-representation" : true, 14 | "template-rendering-intent" : "template" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Simplenote/Images.xcassets/Buttons/button_all_notes.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "notes.pdf", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | }, 12 | "properties" : { 13 | "preserves-vector-representation" : true, 14 | "template-rendering-intent" : "template" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Simplenote/Images.xcassets/Buttons/button_ellipsis.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "ellipsis.pdf", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | }, 12 | "properties" : { 13 | "preserves-vector-representation" : true, 14 | "template-rendering-intent" : "template" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Simplenote/Images.xcassets/Buttons/button_history.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "history.pdf", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | }, 12 | "properties" : { 13 | "preserves-vector-representation" : true, 14 | "template-rendering-intent" : "template" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Simplenote/Images.xcassets/Buttons/button_restore.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "restore.pdf", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | }, 12 | "properties" : { 13 | "preserves-vector-representation" : true, 14 | "template-rendering-intent" : "template" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Simplenote/Images.xcassets/Buttons/button_untagged.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "untagged.pdf", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | }, 12 | "properties" : { 13 | "preserves-vector-representation" : true, 14 | "template-rendering-intent" : "template" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Simplenote/NSProcessInfo+Simplenote.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | // MARK: - ProcessInfo 4 | // 5 | extension ProcessInfo { 6 | 7 | /// Indicates if we're running Unit Tests, or we're happily in a regular environment =) 8 | /// 9 | @objc 10 | static func isRunningTests() -> Bool { 11 | return ProcessInfo.processInfo.environment["XCTestConfigurationFilePath"] != nil 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /.configure: -------------------------------------------------------------------------------- 1 | { 2 | "project_name": "simplenote-macos", 3 | "branch": "trunk", 4 | "pinned_hash": "bfac58335805e9a8295412734b3492fa6ce7a008", 5 | "files_to_copy": [ 6 | { 7 | "file": "macOS/simplenote/SPCredentials.swift", 8 | "destination": "~/.configure/simplenote-macos/secrets/SPCredentials.swift", 9 | "encrypt": true 10 | } 11 | ], 12 | "file_dependencies": [ 13 | 14 | ] 15 | } -------------------------------------------------------------------------------- /Simplenote/Images.xcassets/Buttons/button_tags_close.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "tags-close.pdf", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | }, 12 | "properties" : { 13 | "preserves-vector-representation" : true, 14 | "template-rendering-intent" : "template" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Simplenote/Images.xcassets/Buttons/button_tags_open.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "tags-open.pdf", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | }, 12 | "properties" : { 13 | "preserves-vector-representation" : true, 14 | "template-rendering-intent" : "template" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Simplenote/Images.xcassets/Buttons/button_checklist.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "button_checklist.pdf", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | }, 12 | "properties" : { 13 | "preserves-vector-representation" : true, 14 | "template-rendering-intent" : "template" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Simplenote/Images.xcassets/Buttons/button_new_note.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "button_new_note.pdf", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | }, 12 | "properties" : { 13 | "preserves-vector-representation" : true, 14 | "template-rendering-intent" : "template" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Simplenote/Images.xcassets/Icons/icon_arrow_top_right.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "arrow-top-right.pdf", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | }, 12 | "properties" : { 13 | "preserves-vector-representation" : true, 14 | "template-rendering-intent" : "template" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Simplenote/Images.xcassets/Icons/icon_chevron_down.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "disclosure-down.pdf", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | }, 12 | "properties" : { 13 | "preserves-vector-representation" : true, 14 | "template-rendering-intent" : "template" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Simplenote/NSTableViewCell+Simplenote.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | import AppKit 3 | 4 | /// NSTableCellView Helpers 5 | /// 6 | extension NSTableCellView { 7 | 8 | /// Returns a reuseIdentifier that matches the receiver's classname (non namespaced). 9 | /// 10 | class var reuseIdentifier: NSUserInterfaceItemIdentifier { 11 | NSUserInterfaceItemIdentifier(classNameWithoutNamespaces) 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /SimplenoteTests/MockStorageValidator.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | @testable import Simplenote 3 | 4 | class MockStorageValidator: CoreDataValidator { 5 | var validationShouldSucceed = true 6 | 7 | override func validateStorage(withModelURL modelURL: URL, storageURL: URL) throws { 8 | if !validationShouldSucceed { 9 | throw NSError(domain: "TestError", code: 1) 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Simplenote/Images.xcassets/Buttons/button_ellipsis_outline.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "ellipsis-outline.pdf", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | }, 12 | "properties" : { 13 | "preserves-vector-representation" : true, 14 | "template-rendering-intent" : "template" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Simplenote/Images.xcassets/Buttons/button_preview_off.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "visibility-hidden.pdf", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | }, 12 | "properties" : { 13 | "preserves-vector-representation" : true, 14 | "template-rendering-intent" : "template" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Simplenote/Images.xcassets/Buttons/button_preview_on.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "visibility-visible.pdf", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | }, 12 | "properties" : { 13 | "preserves-vector-representation" : true, 14 | "template-rendering-intent" : "template" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Simplenote/Images.xcassets/Icons/icon_disclosure_right.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "icon_disclosure_right.pdf", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | }, 12 | "properties" : { 13 | "preserves-vector-representation" : true, 14 | "template-rendering-intent" : "template" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Simplenote/Images.xcassets/Icons/icon_simplenote_inner.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "icon_simplenote_inner.pdf", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | }, 12 | "properties" : { 13 | "preserves-vector-representation" : true, 14 | "template-rendering-intent" : "template" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /fastlane/env/user.env-example: -------------------------------------------------------------------------------- 1 | GHHELPER_ACCESS= 2 | SENTRY_AUTH_TOKEN= 3 | 4 | # Fastlane Match 5 | MATCH_S3_ACCESS_KEY= 6 | MATCH_S3_SECRET_ACCESS_KEY= 7 | MATCH_PASSWORD= 8 | 9 | # App Store Connect API 10 | APP_STORE_CONNECT_API_KEY_KEY_ID= 11 | APP_STORE_CONNECT_API_KEY_ISSUER_ID= 13 | -------------------------------------------------------------------------------- /Simplenote/Preferences.m: -------------------------------------------------------------------------------- 1 | #import 2 | #import 3 | #import "Preferences.h" 4 | #import "Simplenote-Swift.h" 5 | 6 | @implementation Preferences 7 | 8 | @dynamic ghostData; 9 | @dynamic simperiumKey; 10 | 11 | @dynamic analytics_enabled; 12 | 13 | - (void)awakeFromLocalInsert 14 | { 15 | [super awakeFromLocalInsert]; 16 | self.analytics_enabled = @(false); 17 | } 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /Simplenote/SimperiumAuthenticatorProtocol.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | import SimplenoteEndpoints 3 | import Simperium 4 | 5 | 6 | // MARK: - SimperiumAuthenticatorProtocol 7 | // 8 | protocol SimperiumAuthenticatorProtocol { 9 | func authenticate(withUsername username: String, token: String) 10 | } 11 | 12 | 13 | extension SPAuthenticator: SimperiumAuthenticatorProtocol { } 14 | 15 | 16 | extension SPUser: UserProtocol { } 17 | -------------------------------------------------------------------------------- /Simplenote/StatusChecker.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | 4 | 5 | @class Simperium; 6 | 7 | #pragma mark ================================================================================ 8 | #pragma mark StatusChecker 9 | #pragma mark ================================================================================ 10 | 11 | @interface StatusChecker : NSObject 12 | 13 | + (BOOL)hasUnsentChanges:(Simperium *)simperium; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Headers/SUExport.h: -------------------------------------------------------------------------------- 1 | // 2 | // SUExport.h 3 | // Sparkle 4 | // 5 | // Created by Jake Petroules on 2014-08-23. 6 | // Copyright (c) 2014 Sparkle Project. All rights reserved. 7 | // 8 | 9 | #ifndef SUEXPORT_H 10 | #define SUEXPORT_H 11 | 12 | #ifdef BUILDING_SPARKLE 13 | #define SU_EXPORT __attribute__((visibility("default"))) 14 | #else 15 | #define SU_EXPORT 16 | #endif 17 | 18 | #endif 19 | -------------------------------------------------------------------------------- /Scripts/Build-Phases/copy-secret.xcfilelist: -------------------------------------------------------------------------------- 1 | # Inputs for the build phase run script marshalling the secrets for the app, 2 | # currently running from the SimplenoteSecrets aggregate targets 3 | ${HOME}/.configure/simplenote-macos/secrets/SPCredentials.swift 4 | ${SRCROOT}/Simplenote/SPCredentials-demo.swift 5 | # Add the script itself as an input, so the build system will know to run it 6 | # if it changes 7 | ${SRCROOT}/Scripts/Build-Phases/copy-secret.sh 8 | -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | source 'https://rubygems.org' 4 | 5 | gem 'danger-dangermattic', '~> 1.0' 6 | gem 'fastlane', '~> 2.222' 7 | gem 'fastlane-plugin-sentry', '~> 1.14' 8 | gem 'fastlane-plugin-wpmreleasetoolkit', '~> 9.2' 9 | gem 'rake', '~> 12.3' 10 | gem 'xcpretty-travis-formatter', '~> 1.0' 11 | 12 | plugins_path = File.join(File.dirname(__FILE__), 'fastlane', 'Pluginfile') 13 | eval_gemfile(plugins_path) if File.exist?(plugins_path) 14 | -------------------------------------------------------------------------------- /Simplenote/Images.xcassets/Buttons/button_settings.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "settings.svg", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Simplenote/FileManagerProtocol.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | protocol FileManagerProtocol { 4 | func fileExists(atPath path: String) -> Bool 5 | func directoryExistsAtURL(_ url: URL) -> Bool 6 | func copyItem(at srcURL: URL, to dstURL: URL) throws 7 | func moveItem(at srcURL: URL, to dstURL: URL) throws 8 | func removeItem(at URL: URL) throws 9 | func createDirectory(at url: URL, withIntermediateDirectories createIntermediates: Bool) throws 10 | } 11 | -------------------------------------------------------------------------------- /SimplenoteTests/MockSimperiumAuthenticator.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | @testable import Simplenote 3 | 4 | 5 | // MARK: - MockSimperiumAuthenticator 6 | // 7 | class MockSimperiumAuthenticator: SimperiumAuthenticatorProtocol { 8 | 9 | var onAuthenticationRequest: ((_ username: String, _ token: String) -> Void)? 10 | 11 | func authenticate(withUsername username: String, token: String) { 12 | onAuthenticationRequest?(username, token) 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /BuildTools/Package.resolved: -------------------------------------------------------------------------------- 1 | { 2 | "originHash" : "cd02791f9079102404056ed65d89c5c6bb997332bbfd1b03550dfdd51e57551e", 3 | "pins" : [ 4 | { 5 | "identity" : "swiftlintplugins", 6 | "kind" : "remoteSourceControl", 7 | "location" : "https://github.com/SimplyDanny/SwiftLintPlugins", 8 | "state" : { 9 | "revision" : "7a3d77f3dd9f91d5cea138e52c20cfceabf352de", 10 | "version" : "0.58.2" 11 | } 12 | } 13 | ], 14 | "version" : 3 15 | } 16 | -------------------------------------------------------------------------------- /Simplenote/NSPasteboard+Simplenote.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | // MARK: - NSPasteboard + Interlink 4 | // 5 | extension NSPasteboard { 6 | 7 | /// Copies the Internal Link (Markdown Reference) into the OS Pasteboard 8 | /// 9 | func copyInterlink(to note: Note) { 10 | guard let link = note.markdownInterlink else { 11 | return 12 | } 13 | 14 | declareTypes([.string], owner: nil) 15 | setString(link, forType: .string) 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /SimplenoteTests/AccountVerificationController+TestHelpers.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | import SimplenoteEndpoints 3 | @testable import Simplenote 4 | 5 | 6 | extension AccountVerificationController { 7 | func randomResult() -> Result { 8 | if Bool.random() { 9 | return .success(nil) 10 | } 11 | 12 | let error = RemoteError(statusCode: .zero, response: nil, networkError: nil) 13 | return .failure(error) 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /External/Notepad/Storage.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | @class Theme; 4 | 5 | NS_ASSUME_NONNULL_BEGIN 6 | 7 | @interface Storage : NSTextStorage 8 | 9 | @property(nonatomic, strong, readonly) NSMutableAttributedString *backingStore; 10 | @property(nonatomic, strong, readonly) Theme *theme; 11 | 12 | - (void)refreshStyleWithMarkdownEnabled:(BOOL)markdownEnabled NS_SWIFT_NAME(refreshStyle(markdownEnabled:)); 13 | 14 | - (void)endEditingWithoutRestyling; 15 | 16 | @end 17 | 18 | NS_ASSUME_NONNULL_END 19 | -------------------------------------------------------------------------------- /Simplenote/SeparatorTableViewCell.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | import AppKit 3 | 4 | // MARK: - SeparatorTableViewCell 5 | // 6 | class SeparatorTableViewCell: NSTableCellView { 7 | 8 | /// Draws the main separator 9 | /// 10 | @IBOutlet private weak var separatorView: BackgroundView! 11 | 12 | // MARK: - Overridden API(s) 13 | 14 | override func viewWillDraw() { 15 | super.viewWillDraw() 16 | separatorView.fillColor = .simplenotePlaceholderTintColor 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Simplenote/SPAuthenticationTextField+Simplenote.swift: -------------------------------------------------------------------------------- 1 | import Simperium 2 | 3 | extension SPAuthenticationTextField { 4 | @discardableResult 5 | override open func becomeFirstResponder() -> Bool { 6 | let responderStatus = textField.becomeFirstResponder() 7 | 8 | let selectedRange = textField.currentEditor()?.selectedRange 9 | textField.currentEditor()?.selectedRange = NSMakeRange(selectedRange?.length ?? .zero, .zero) 10 | 11 | return responderStatus 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Simplenote/UnicodeScalar+Simplenote.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | // MARK: - UnicodeScalar Simplenote Methods 4 | // 5 | extension UnicodeScalar { 6 | 7 | /// UnicodeScalar for NSTextAttachment Marker Characters 8 | /// 9 | static var textAttachment = UnicodeScalar(NSTextAttachment.character)! 10 | 11 | /// Indicates if the receiver is a Whitespace character (Spaces / Tabs alike) 12 | /// 13 | var isWhitespace: Bool { 14 | CharacterSet.whitespaces.contains(self) 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /External/Notepad/Style.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Style.swift 3 | // Notepad 4 | // 5 | // Created by Rudd Fawcett on 10/14/16. 6 | // Copyright © 2016 Rudd Fawcett. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | struct Style { 12 | let regex: NSRegularExpression 13 | let attributes: [NSAttributedString.Key: AnyObject] 14 | 15 | init(element: Element, attributes: [NSAttributedString.Key: AnyObject]) { 16 | self.regex = element.toRegex() 17 | self.attributes = attributes 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /Simplenote/Images.xcassets/Icons/icon_simplenote.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "logo.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "logo@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "logo@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Simplenote/JSONKit+Simplenote.h: -------------------------------------------------------------------------------- 1 | // 2 | // JSONKit+Simplenote.h 3 | // Simplenote 4 | // 5 | // Created by Jorge Leandro Perez on 1/4/14. 6 | // Copyright (c) 2014 Simperium. All rights reserved. 7 | // 8 | 9 | 10 | 11 | @interface NSArray (JSONKit) 12 | - (NSString *)JSONString; 13 | @end 14 | 15 | @interface NSDictionary (JSONKit) 16 | - (NSString *)JSONString; 17 | @end 18 | 19 | @interface NSString (JSONKit) 20 | - (id)objectFromJSONString; 21 | @end 22 | 23 | @interface NSData (JSONKit) 24 | - (id)objectFromJSONString; 25 | @end 26 | -------------------------------------------------------------------------------- /IntentsExtension/IntentHandlers/OpenNewNoteIntentHandler.swift: -------------------------------------------------------------------------------- 1 | // 2 | // OpenNewNoteIntentHandler.swift 3 | // Simplenote 4 | // 5 | // Created by Charlie Scheer on 5/23/24. 6 | // Copyright © 2024 Simperium. All rights reserved. 7 | // 8 | 9 | import Intents 10 | 11 | class OpenNewNoteIntentHandler: NSObject, OpenNewNoteIntentHandling { 12 | func handle(intent: OpenNewNoteIntent, completion: @escaping (OpenNewNoteIntentResponse) -> Void) { 13 | completion(OpenNewNoteIntentResponse(code: .continueInApp, userActivity: nil)) 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /.buildkite/shared-pipeline-vars: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # This file is `source`'d before calling `buildkite-agent pipeline upload`, and can be used 4 | # to set up some variables that will be interpolated in the `.yml` pipeline before uploading it. 5 | 6 | # The ~> modifier is not currently used, but we check for it just in case 7 | XCODE_VERSION=$(sed -E -n 's/^(~> )?(.*)/xcode-\2/p' .xcode-version) 8 | CI_TOOLKIT_PLUGIN_VERSION="3.4.2" 9 | 10 | export IMAGE_ID="$XCODE_VERSION" 11 | export CI_TOOLKIT_PLUGIN="automattic/a8c-ci-toolkit#$CI_TOOLKIT_PLUGIN_VERSION" 12 | -------------------------------------------------------------------------------- /fastlane/metadata/zh-Hans/description.txt: -------------------------------------------------------------------------------- 1 | Simplenote 可帮助您轻松记录笔记、列表、想法等。 您可免费将笔记同步到所有设备。 2 | 3 | Simplenote 可使您享受极速高效体验。 只需打开并写下一些想法即可。 随着笔记的积累,您可以通过标签和固定按钮对其进行快速搜索和整理。 您可以向笔记添加检查清单,以跟踪任务。 您也可以针对其他人分享和发布笔记。 4 | 5 | 喜欢 Markdown? 您可以使用 Markdown 格式编辑、预览和发布笔记。 6 | 7 | 了解 Simplenote 的最佳方式莫过于试用。 系统会要求您创建帐户。 您可以借此将笔记在线备份并自动同步。 8 | 9 | 注册完成后,即可尝试创建笔记! 然后转到 simplenote.com,将 Simplenote 下载至您的其他设备上。 10 | 11 | 祝您记录愉快! 12 | 13 | --- 14 | 15 | 隐私政策:https://automattic.com/privacy/ 16 | 服务条款:https://simplenote.com/terms/ 17 | 加州用户隐私声明:https://automattic.com/privacy/#us-privacy-laws 18 | -------------------------------------------------------------------------------- /Simplenote/SPMarkdownParser.h: -------------------------------------------------------------------------------- 1 | // 2 | // SPMarkdownParser.h 3 | // Simplenote 4 | // 5 | // Created by James Frost on 01/10/2015. 6 | // Copyright © 2015 Automattic. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | /** 12 | * @class SPMarkdownParser 13 | * @brief This is a simple wrapper around the 'hoedown' Markdown parser, 14 | * which produces HTML from a Markdown input string. 15 | */ 16 | @interface SPMarkdownParser : NSObject 17 | 18 | + (NSString *)renderHTMLFromMarkdownString:(NSString *)markdown; 19 | 20 | @end 21 | -------------------------------------------------------------------------------- /Simplenote/SearchQuery+Simplenote.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | import SimplenoteSearch 3 | 4 | extension SearchQuery { 5 | convenience init(searchText: String) { 6 | self.init(searchText: searchText, settings: .default) 7 | } 8 | } 9 | 10 | extension SearchQuerySettings { 11 | static var `default`: SearchQuerySettings { 12 | let localizedKeyword = NSLocalizedString("tag:", comment: "Search Operator for tags. Please preserve the semicolons") 13 | return SearchQuerySettings(tagsKeyword: "tag:", localizedTagKeyword: localizedKeyword) 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Simplenote/Simperium+Simplenote.m: -------------------------------------------------------------------------------- 1 | #import "Simperium+Simplenote.h" 2 | #import "Simplenote-Swift.h" 3 | #import "SPConstants.h" 4 | 5 | 6 | @implementation Simperium (Simplenote) 7 | 8 | - (Preferences *)preferencesObject 9 | { 10 | SPBucket *bucket = [self bucketForName:NSStringFromClass([Preferences class])]; 11 | Preferences *preferences = [bucket objectForKey:SPSimperiumPreferencesObjectKey]; 12 | if (preferences != nil) { 13 | return preferences; 14 | } 15 | 16 | return [bucket insertNewObjectForKey:SPSimperiumPreferencesObjectKey]; 17 | } 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /IntentsExtension/Extensions/NSString+Intents.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NSString+Intents.swift 3 | // IntentsExtension 4 | // 5 | // Created by Charlie Scheer on 5/31/24. 6 | // Copyright © 2024 Simperium. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | extension NSString { 12 | /// Encodes the receiver as a `Tag Hash` 13 | /// 14 | @objc 15 | var byEncodingAsTagHash: String { 16 | precomposedStringWithCanonicalMapping 17 | .lowercased() 18 | .addingPercentEncoding(withAllowedCharacters: .alphanumerics) ?? self as String 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Simplenote/NSAppearance+Simplenote.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | // MARK: - Simplenote Methods 4 | // 5 | extension NSAppearance { 6 | 7 | /// Indicates if the receiver is on the Dark Side 8 | /// 9 | var isDark: Bool { 10 | name == .darkAqua || name == .vibrantDark 11 | } 12 | 13 | /// Returns the NSAppearance that matches Simplenote's Settings 14 | /// 15 | @objc 16 | static var simplenoteAppearance: NSAppearance? { 17 | let name: NSAppearance.Name = SPUserInterface.isDark ? .vibrantDark : .aqua 18 | return NSAppearance(named: name) 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /fastlane/metadata/zh-Hant/description.txt: -------------------------------------------------------------------------------- 1 | Simplenote 可讓你輕鬆記錄筆記、清單和想法等事項。 你的筆記內容會免費同步至所有裝置。 2 | 3 | Simplenote 提供快速有效率的筆記體驗。 開啟程式、寫下想法,大功告成。 當你的筆記越來越多時,可以利用搜尋功能立即找出筆記,更可使用標籤和釘選功能妥善整理。 你可以將檢查清單新增至筆記中,藉此追蹤工作進度; 也可以分享和發表筆記,讓更多人參閱筆記內容。 4 | 5 | 喜歡使用 Markdown 嗎? 你可以使用 Markdown 格式編輯、預覽及發表筆記。 6 | 7 | 要瞭解 Simplenote 的最好方式就是親身體驗。 系統會要求你建立帳號。 如此一來你便能線上備份和自動同步筆記內容。 8 | 9 | 註冊完後,不妨開始建立一些筆記吧! 如需下載 Simplenote 至其他裝置,接著請前往 simplenote.com。 10 | 11 | 祝記事愉快! 12 | 13 | --- 14 | 15 | 隱私權政策:https://automattic.com/privacy/ 16 | 服務條款:https://simplenote.com/terms/ 17 | 加州使用者的隱私權聲明:https://automattic.com/privacy/#us-privacy-laws 18 | -------------------------------------------------------------------------------- /.github/workflows/run-danger.yml: -------------------------------------------------------------------------------- 1 | name: ☢️ Danger 2 | 3 | on: 4 | pull_request: 5 | types: [opened, reopened, ready_for_review, synchronize, edited, labeled, unlabeled, milestoned, demilestoned] 6 | 7 | jobs: 8 | dangermattic: 9 | # runs on draft PRs only for opened / synchronize events 10 | if: ${{ (github.event.pull_request.draft == false) || (github.event.pull_request.draft == true && contains(fromJSON('["opened", "synchronize"]'), github.event.action)) }} 11 | uses: Automattic/dangermattic/.github/workflows/reusable-run-danger.yml@v1.0.0 12 | secrets: 13 | github-token: ${{ secrets.DANGERMATTIC_GITHUB_TOKEN }} 14 | -------------------------------------------------------------------------------- /Simplenote/FontSettings.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | @objcMembers 4 | class FontSettings: NSObject { 5 | static let minimum = CGFloat(10) 6 | static let normal = CGFloat(15) 7 | static let maximum = CGFloat(30) 8 | static let step = CGFloat(1) 9 | 10 | static func valueIsValidFontSize(_ value: CGFloat) -> Bool { 11 | value.truncatingRemainder(dividingBy: step) == .zero 12 | } 13 | 14 | static func nearestValidFontSize(from size: CGFloat) -> CGFloat { 15 | if valueIsValidFontSize(size) { 16 | return size 17 | } 18 | return step * (size / step).rounded() 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /IntentsExtension/Extensions/IntentTag+Helpers.swift: -------------------------------------------------------------------------------- 1 | // 2 | // IntentTag+Helpers.swift 3 | // IntentsExtension 4 | // 5 | // Created by Charlie Scheer on 5/31/24. 6 | // Copyright © 2024 Simperium. All rights reserved. 7 | // 8 | 9 | import Intents 10 | 11 | extension IntentTag { 12 | static func allTags(in coreDataWrapper: ExtensionCoreDataWrapper) throws -> [IntentTag] { 13 | guard let tags = coreDataWrapper.resultsController?.tags() else { 14 | throw IntentsError.couldNotFetchTags 15 | } 16 | 17 | return tags.map({ IntentTag(identifier: $0.simperiumKey, display: $0.name ?? String()) }) 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /Simplenote/DateTransformer.m: -------------------------------------------------------------------------------- 1 | // 2 | // DateTransformer.m 3 | // Simplenote 4 | // 5 | // Created by Rainieri Ventura on 1/28/12. 6 | // Copyright (c) 2012 Simperium. All rights reserved. 7 | // 8 | 9 | #import "DateTransformer.h" 10 | @import Simperium; 11 | 12 | @implementation DateTransformer 13 | 14 | + (Class)transformedValueClass 15 | { 16 | return [NSDate class]; 17 | } 18 | 19 | + (BOOL)allowsReverseTransformation 20 | { 21 | return NO; 22 | } 23 | 24 | - (id)transformedValue:(id)value { 25 | if (value != nil) { 26 | return [value sp_stringBeforeNow]; 27 | } 28 | 29 | return @"No Date"; 30 | } 31 | 32 | @end 33 | -------------------------------------------------------------------------------- /Simplenote/CSS/markdown-dark.css: -------------------------------------------------------------------------------- 1 | 2 | ::-webkit-scrollbar-thumb { 3 | background: #84878a; 4 | } 5 | 6 | .note-detail-markdown a { 7 | color: #4895d9; 8 | } 9 | 10 | .note-detail-markdown hr { 11 | color: #4895d9; 12 | } 13 | 14 | .note-detail-markdown code { 15 | color: #84878a; 16 | } 17 | 18 | .note-detail-markdown pre { 19 | background: #f6f7f8; 20 | } 21 | 22 | .note-detail-markdown pre code { 23 | color: #616870; 24 | } 25 | 26 | .note-detail-markdown table tr:nth-child(2n) { 27 | background-color: #383d41; 28 | } 29 | 30 | .note-detail-markdown table th, .note-detail-markdown table td { 31 | border-color: #575e65; 32 | } 33 | -------------------------------------------------------------------------------- /.github/workflows/validate-issues.yml: -------------------------------------------------------------------------------- 1 | name: 📝 Validate Issues 2 | 3 | on: 4 | issues: 5 | types: [opened, labeled, unlabeled] 6 | 7 | jobs: 8 | check-labels-on-issues: 9 | uses: Automattic/dangermattic/.github/workflows/reusable-check-labels-on-issues.yml@v1.0.0 10 | with: 11 | label-format-list: '[ 12 | "^\[.+\]", 13 | "^[[:alnum:]]" 14 | ]' 15 | label-error-message: '🚫 Please add a type label (e.g. **[Type] Enhancement**) and a feature label (e.g. **Stats**) to this issue.' 16 | label-success-message: 'Thanks for reporting! 👍' 17 | secrets: 18 | github-token: ${{ secrets.DANGERMATTIC_GITHUB_TOKEN }} 19 | -------------------------------------------------------------------------------- /Simplenote/CSS/markdown-light.css: -------------------------------------------------------------------------------- 1 | 2 | ::-webkit-scrollbar-thumb { 3 | background: #84878a; 4 | } 5 | 6 | .note-detail-markdown a { 7 | color: #4895d9; 8 | } 9 | 10 | .note-detail-markdown hr { 11 | color: #4895d9; 12 | } 13 | 14 | .note-detail-markdown code { 15 | color: #899199; 16 | } 17 | 18 | .note-detail-markdown pre { 19 | background: #f6f7f8; 20 | } 21 | 22 | .note-detail-markdown pre code { 23 | color: #616870; 24 | } 25 | 26 | .note-detail-markdown table tr:nth-child(2n) { 27 | background-color: #f6f7f8; 28 | } 29 | 30 | .note-detail-markdown table th, .note-detail-markdown table td { 31 | border-color: #c0c4c8; 32 | } 33 | -------------------------------------------------------------------------------- /IntentsExtension/Extensions/FileManager+Intents.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FileManager+Intents.swift 3 | // IntentsExtension 4 | // 5 | // Created by Charlie Scheer on 5/31/24. 6 | // Copyright © 2024 Simperium. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | // This exists in a8cTracks but we aren't currently importing that into intents but we need this for FileManager to meet FileManagerProtocol 12 | extension FileManager { 13 | func directoryExistsAtURL(_ url: URL) -> Bool { 14 | var isDir: ObjCBool = false 15 | let exists = self.fileExists(atPath: url.path, isDirectory: &isDir) 16 | return exists && isDir.boolValue 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /External/Hoextdown/escape.h: -------------------------------------------------------------------------------- 1 | /* escape.h - escape utilities */ 2 | 3 | #ifndef HOEDOWN_ESCAPE_H 4 | #define HOEDOWN_ESCAPE_H 5 | 6 | #include "buffer.h" 7 | 8 | #ifdef __cplusplus 9 | extern "C" { 10 | #endif 11 | 12 | 13 | /************* 14 | * FUNCTIONS * 15 | *************/ 16 | 17 | /* hoedown_escape_href: escape (part of) a URL inside HTML */ 18 | void hoedown_escape_href(hoedown_buffer *ob, const uint8_t *data, size_t size); 19 | 20 | /* hoedown_escape_html: escape HTML */ 21 | void hoedown_escape_html(hoedown_buffer *ob, const uint8_t *data, size_t size, int secure); 22 | 23 | 24 | #ifdef __cplusplus 25 | } 26 | #endif 27 | 28 | #endif /** HOEDOWN_ESCAPE_H **/ 29 | -------------------------------------------------------------------------------- /Simplenote/Tag.h: -------------------------------------------------------------------------------- 1 | // 2 | // Tag.h 3 | // Simplenote 4 | // 5 | // Created by Michael Johnston on 10-04-19. 6 | // Copyright 2010 Simperium. All rights reserved. 7 | // 8 | 9 | @import Simperium; 10 | 11 | @interface Tag : SPManagedObject { 12 | NSString *name; 13 | NSMutableArray *recipients; 14 | int count; 15 | NSNumber *index; 16 | NSString *share; 17 | } 18 | 19 | @property (nonatomic, retain) NSString *name; 20 | @property (nonatomic, retain) NSMutableArray *recipients; 21 | @property (nonatomic) int count; 22 | @property (nonatomic, retain) NSNumber *index; 23 | @property (nonatomic, retain) NSString *share; 24 | 25 | - (void)addRecipient:(NSString *)emailAddress; 26 | 27 | @end 28 | -------------------------------------------------------------------------------- /IntentsExtension/Tools/IntentsConstants.swift: -------------------------------------------------------------------------------- 1 | // 2 | // IntentsConstants.swift 3 | // IntentsExtension 4 | // 5 | // Created by Charlie Scheer on 5/29/24. 6 | // Copyright © 2024 Simperium. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | struct IntentsConstants { 12 | static let noteIdentifierKey = "OpenNoteIntentHandlerIdentifierKey" 13 | static let extensionGroupName = Bundle.main.sharedGroupDomain 14 | static let simperiumBaseURL = "https://api.simperium.com/1" 15 | 16 | static let recoveryMessage = NSLocalizedString("Will attempt to recover shortcut content on next launch", comment: "Alerting users that we will attempt to restore lost content on next launch") 17 | } 18 | -------------------------------------------------------------------------------- /Simplenote/HeaderTableCellView.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | import AppKit 3 | 4 | // MARK: - HeaderTableCellView 5 | // 6 | class HeaderTableCellView: NSTableCellView { 7 | 8 | /// Wraps access to the TextField's String Value 9 | /// 10 | var title: String? { 11 | get { 12 | textField?.stringValue 13 | } 14 | set { 15 | textField?.stringValue = newValue ?? "" 16 | } 17 | } 18 | 19 | /// Wraps access to the TextField's Text Color 20 | /// 21 | var titleColor: NSColor? { 22 | get { 23 | textField?.textColor 24 | } 25 | set { 26 | textField?.textColor = newValue 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /Simplenote/FileStorage.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | // MARK: - FileStorage 4 | // 5 | class FileStorage { 6 | private let fileURL: URL 7 | 8 | private lazy var decoder = JSONDecoder() 9 | private lazy var encoder = JSONEncoder() 10 | 11 | init(fileURL: URL) { 12 | self.fileURL = fileURL 13 | } 14 | 15 | /// Load an object 16 | /// 17 | func load() throws -> T? { 18 | let data = try Data(contentsOf: fileURL) 19 | return try decoder.decode(T.self, from: data) 20 | } 21 | 22 | /// Save an object 23 | /// 24 | func save(object: T) throws { 25 | let data = try encoder.encode(object) 26 | try data.write(to: fileURL) 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /fastlane/metadata/ja/description.txt: -------------------------------------------------------------------------------- 1 | Simplenote を使えば、メモ、リスト、アイデアなどを簡単に書き留められます。 書き留めたメモは、自分のすべての端末に無料で同期されます。 2 | 3 | Simplenote は、すばやく効率的に操作できます。 起動して、思い付いたことを書き込むだけです。 メモのコレクションが増えたら、検索を実行したり、タグとピンで整理したりできます。 チェックリストをメモに追加して、タスクの進捗状況をチェックできます。 メモを共有したり他の人に公開したりできます。 4 | 5 | Markdown がお好みの方 Markdown フォーマットを使用して、メモを編集、プレビュー、公開できます。 6 | 7 | Simplenote を知るには使ってみるのが一番です。 アカウントを作成するように求められます。 アカウントを作成すると、メモのオンラインバックアップと自動同期が可能になります。 8 | 9 | サインアップしたら、さっそくメモを作ってみてください。 その後、simplenote.com から他の端末用の Simplenote をダウンロードしてください。 10 | 11 | メモをお楽しみください ! 12 | 13 | --- 14 | 15 | プライバシーポリシー: https://automattic.com/privacy/ 16 | 利用規約: https://simplenote.com/terms/ 17 | カリフォルニア州のユーザーへのプライバシー通知: https://automattic.com/privacy/#us-privacy-laws 18 | -------------------------------------------------------------------------------- /Simplenote/NSAlert+Simplenote.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | extension NSAlert { 4 | convenience init(messageText: String, informativeText: String) { 5 | self.init() 6 | self.messageText = messageText 7 | self.informativeText = informativeText 8 | } 9 | 10 | static func presentAlert(withMessageText messageText: String, 11 | informativeText: String, 12 | for window: NSWindow, 13 | onCompletion: ((NSApplication.ModalResponse) -> Void)? = nil) { 14 | let alert = NSAlert(messageText: messageText, informativeText: informativeText) 15 | alert.beginSheetModal(for: window, completionHandler: onCompletion) 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /.buildkite/pipeline.yml: -------------------------------------------------------------------------------- 1 | # This is the default pipeline – it will build and test the app 2 | 3 | env: 4 | IMAGE_ID: $IMAGE_ID 5 | 6 | steps: 7 | - label: "🔬 Build and Test" 8 | command: .buildkite/commands/build-and-test.sh 9 | plugins: [$CI_TOOLKIT_PLUGIN] 10 | agents: 11 | queue: mac 12 | 13 | - label: ":swift: SwiftLint" 14 | command: swiftlint 15 | env: 16 | SWIFTLINT_OPTION_STRICT: true 17 | notify: 18 | - github_commit_status: 19 | context: SwiftLint 20 | agents: 21 | queue: linter 22 | 23 | - label: "🛠 Verify App Store Target Builds" 24 | command: .buildkite/commands/build-and-test-app-store.sh 25 | plugins: [$CI_TOOLKIT_PLUGIN] 26 | agents: 27 | queue: mac 28 | -------------------------------------------------------------------------------- /fastlane/metadata/ko/description.txt: -------------------------------------------------------------------------------- 1 | Simplenote로 메모, 목록, 아이디어 등을 손쉽게 보관할 수 있습니다. 메모가 모든 장치에서 무료로 동기화됩니다. 2 | 3 | Simplenote는 최고의 속도와 효율성을 자랑합니다. 메모를 열고 아이디어를 작성하면 끝입니다. 메모 개수가 많아지면 태그와 핀을 사용하여 정리해 두고 바로바로 검색할 수 있습니다. 메모에 체크리스트를 추가하여 작업을 계속 추적할 수 있습니다. 메모를 공유하고 다른 사람을 위해 메모를 공개할 수도 있습니다. 4 | 5 | 마크다운을 즐겨 사용하시나요? 마크다운 서식을 사용하여 메모를 편집하고, 미리 보고, 공개할 수 있습니다. 6 | 7 | Simplenote를 익히는 최고의 방법은 직접 사용해보는 것입니다. 계정을 생성하라는 메시지가 나타납니다. 계정을 생성하면 온라인으로 메모를 백업하고 자동으로 동기화할 수 있습니다. 8 | 9 | 가입한 다음 메모를 작성해 보세요. 그런 다음 simplenote.com으로 이동하여 다른 기기에 Simplenote를 다운로드하세요. 10 | 11 | 즐겁게 메모하세요! 12 | 13 | --- 14 | 15 | 개인정보 취급방침: https://automattic.com/privacy/ 16 | 서비스 약관: https://simplenote.com/terms/ 17 | 캘리포니아 사용자를 위한 개인정보보호 고지: https://automattic.com/privacy/#us-privacy-laws 18 | -------------------------------------------------------------------------------- /Simplenote/NSAnimationContext+Simplenote.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | import AppKit 3 | 4 | // MARK: - NSAnimationContext + Simplenote 5 | // 6 | extension NSAnimationContext { 7 | 8 | static func runAnimationGroup(after delay: TimeInterval, 9 | _ changes: @escaping (_ context: NSAnimationContext) -> Void, 10 | completionHandler: (() -> Void)? = nil) { 11 | if delay == .zero { 12 | runAnimationGroup(changes, completionHandler: completionHandler) 13 | return 14 | } 15 | 16 | DispatchQueue.main.asyncAfter(deadline: .now() + delay) { 17 | runAnimationGroup(changes, completionHandler: completionHandler) 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /IntentsExtension/Support Files/IntentsExtension.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.app-sandbox 6 | 7 | com.apple.security.application-groups 8 | 9 | $(TeamIdentifierPrefix)com.automattic.SimplenoteMac 10 | 11 | com.apple.security.files.user-selected.read-write 12 | 13 | com.apple.security.network.client 14 | 15 | keychain-access-groups 16 | 17 | $(AppIdentifierPrefix)com.automattic.SimplenoteMac 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /External/Hoextdown/version.h: -------------------------------------------------------------------------------- 1 | /* version.h - holds Hoedown's version */ 2 | 3 | #ifndef HOEDOWN_VERSION_H 4 | #define HOEDOWN_VERSION_H 5 | 6 | #ifdef __cplusplus 7 | extern "C" { 8 | #endif 9 | 10 | 11 | /************* 12 | * CONSTANTS * 13 | *************/ 14 | 15 | #define HOEDOWN_VERSION "3.0.7.15" 16 | #define HOEDOWN_VERSION_MAJOR 3 17 | #define HOEDOWN_VERSION_MINOR 0 18 | #define HOEDOWN_VERSION_REVISION 7 19 | #define HOEDOWN_VERSION_EXTRAS 15 20 | 21 | 22 | /************* 23 | * FUNCTIONS * 24 | *************/ 25 | 26 | /* hoedown_version: retrieve Hoedown's version numbers */ 27 | void hoedown_version(int *major, int *minor, int *revision, int *extras); 28 | 29 | 30 | #ifdef __cplusplus 31 | } 32 | #endif 33 | 34 | #endif /** HOEDOWN_VERSION_H **/ 35 | -------------------------------------------------------------------------------- /Simplenote/NSAlert+AuthErrors.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | 4 | // MARK: - Alert + AuthError 5 | // 6 | extension NSAlert { 7 | 8 | static func buildLoginCodeExpiredAlert() -> NSAlert { 9 | let titleText = NSLocalizedString("Sorry!", comment: "LoginCode Expired Title") 10 | let messageText = NSLocalizedString("The authentication code you've requested has expired. Please request a new one", comment: "LoginCode Expired Message") 11 | let acceptText = NSLocalizedString("Accept", comment: "Accept Message") 12 | 13 | let alert = NSAlert() 14 | alert.messageText = titleText 15 | alert.informativeText = messageText 16 | alert.addButton(withTitle: acceptText) 17 | 18 | return alert 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /SimplenoteTests/Simplenote.xctestplan: -------------------------------------------------------------------------------- 1 | { 2 | "configurations" : [ 3 | { 4 | "id" : "4B8E5E02-932F-4AEF-8E24-E62BF97BAC99", 5 | "name" : "Configuration 1", 6 | "options" : { 7 | 8 | } 9 | } 10 | ], 11 | "defaultOptions" : { 12 | "codeCoverage" : false, 13 | "targetForVariableExpansion" : { 14 | "containerPath" : "container:Simplenote.xcodeproj", 15 | "identifier" : "466FFEA617CC10A800399652", 16 | "name" : "Simplenote" 17 | } 18 | }, 19 | "testTargets" : [ 20 | { 21 | "target" : { 22 | "containerPath" : "container:Simplenote.xcodeproj", 23 | "identifier" : "B5CBB068241976230003C271", 24 | "name" : "SimplenoteTests" 25 | } 26 | } 27 | ], 28 | "version" : 1 29 | } 30 | -------------------------------------------------------------------------------- /Simplenote/NSVisualEffectView+Simplenote.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | import AppKit 3 | 4 | // MARK: - NSVisualEffectView.Material 5 | // 6 | extension NSVisualEffectView.Material { 7 | 8 | /// Returns the Material to be applied over the Tags List 9 | /// 10 | static var simplenoteTaglistMaterial: NSVisualEffectView.Material { 11 | return .underWindowBackground 12 | } 13 | } 14 | 15 | // MARK: - NSVisualEffectView 16 | // 17 | extension NSVisualEffectView { 18 | 19 | /// ObjC Convenience API: Wraps access to `NSVisualEffect.Material.simplenoteTaglistMaterial`, which otherwise would not be accessible 20 | /// 21 | @objc 22 | static var simplenoteTaglistMaterial: NSVisualEffectView.Material { 23 | .simplenoteTaglistMaterial 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /IntentsExtension/Support Files/IntentsExtensionDebug.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.app-sandbox 6 | 7 | com.apple.security.application-groups 8 | 9 | $(TeamIdentifierPrefix)com.automattic.SimplenoteMac.Development 10 | 11 | com.apple.security.files.user-selected.read-write 12 | 13 | com.apple.security.network.client 14 | 15 | keychain-access-groups 16 | 17 | $(AppIdentifierPrefix)com.automattic.SimplenoteMac.Development 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /Simplenote/AppKitConstants.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | // MARK: - AppKit Constants, so that we don't repeat ourselves forever! 4 | // 5 | enum AppKitConstants { 6 | static let alpha0_0: CGFloat = 0 7 | static let alpha0_05: CGFloat = 0.05 8 | static let alpha0_1: CGFloat = 0.1 9 | static let alpha0_3: CGFloat = 0.3 10 | static let alpha0_4: CGFloat = 0.4 11 | static let alpha0_5: CGFloat = 0.5 12 | static let alpha0_6: CGFloat = 0.6 13 | static let alpha0_8: CGFloat = 0.8 14 | static let alpha1_0: CGFloat = 1 15 | static let delay0_0: TimeInterval = 0 16 | static let delay0_15: TimeInterval = 0.15 17 | static let delay0_5: TimeInterval = 0.5 18 | static let duration0_2: TimeInterval = 0.2 19 | static let duration0_4: TimeInterval = 0.4 20 | } 21 | -------------------------------------------------------------------------------- /Simplenote/NSScrollView+Simplenote.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | import AppKit 3 | 4 | // MARK: - NSScrollView + Simplenote 5 | // 6 | extension NSScrollView { 7 | 8 | /// Indicates if we're at the upper edge of the contents 9 | /// 10 | var isScrolledToTop: Bool { 11 | contentView.bounds.origin.y == contentView.contentInsets.top * -1 12 | } 13 | 14 | /// Scrolls the receiver to the upper edge 15 | /// 16 | @objc(scrollToTopWithAnimation:) 17 | func scrollToTop(animated: Bool = false) { 18 | let target = NSPoint(x: .zero, y: contentView.contentInsets.top * -1) 19 | 20 | if animated { 21 | contentView.animator().setBoundsOrigin(target) 22 | return 23 | } 24 | 25 | documentView?.scroll(target) 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /Simplenote/CharacterCountLimiter.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | class CharacterCountLimiter: Formatter { 4 | var characterLimit: Int = 6 5 | 6 | override func isPartialStringValid(_ partialString: String, newEditingString newString: AutoreleasingUnsafeMutablePointer?, errorDescription error: AutoreleasingUnsafeMutablePointer?) -> Bool { 7 | partialString.count <= characterLimit 8 | } 9 | 10 | override func string(for obj: Any?) -> String? { 11 | obj as? String 12 | } 13 | 14 | override func getObjectValue(_ obj: AutoreleasingUnsafeMutablePointer?, for string: String, errorDescription error: AutoreleasingUnsafeMutablePointer?) -> Bool { 15 | obj?.pointee = string as AnyObject 16 | return true 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Simplenote/NSManagedObjectContext+Simplenote.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NSManagedObjectContext+Simplenote.swift 3 | // Simplenote 4 | // 5 | // Created by Charlie Scheer on 4/11/24. 6 | // Copyright © 2024 Simperium. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import CoreData 11 | 12 | extension NSManagedObjectContext { 13 | @objc(fetchObjectsForEntityName: withPredicate: error:) 14 | func fetchObjects(for entityName: String, withPredicate predicate: NSPredicate) throws -> Array { 15 | let fetchRequest = NSFetchRequest() 16 | let entityDescription = NSEntityDescription.entity(forEntityName: entityName, in: self) 17 | 18 | fetchRequest.entity = entityDescription 19 | 20 | return try fetch(fetchRequest) 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Simplenote/Simplenote-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | // 2 | // Use this file to import your target's public headers that you would like to expose to Swift. 3 | // 4 | 5 | 6 | #pragma mark - Model 7 | 8 | #import "Note.h" 9 | #import "Tag.h" 10 | 11 | 12 | #pragma mark - Simplenote-Y 13 | 14 | #import "AuthViewController.h" 15 | #import "NoteEditorViewController.h" 16 | #import "SimplenoteAppDelegate.h" 17 | #import "SPConstants.h" 18 | #import "SPMarkdownParser.h" 19 | #import "SPTableView.h" 20 | #import "SPTracker.h" 21 | #import "TagListViewController.h" 22 | #import "Storage.h" 23 | #import "StatusChecker.h" 24 | 25 | #pragma mark - Extensions 26 | 27 | #import "Simperium+Simplenote.h" 28 | #import "NSString+Metadata.h" 29 | #import "NSNotification+Simplenote.h" 30 | #import "NSMutableAttributedString+Styling.h" 31 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/---feature-request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: "\U0001F680 Feature Request" 3 | about: "Suggest a new feature or enhancement to an existing one in the Simplenote macOS app." 4 | title: "" 5 | labels: feature request 6 | assignees: "" 7 | --- 8 | 9 | Please, be as descriptive as possible. Issues lacking detail, or for any other reason than to request a feature, may be closed without action. 10 | 11 | ### What 12 | ***(Required)*** What is the feature you are requesting? Add a concise description of the feature being requested. 13 | 14 | ### Why 15 | ***(Required)*** Why are you requesting this feature? Add a concise description of the problem this feature solves. 16 | 17 | ### How 18 | ***(Optional)*** If applicable, add screenshots, animations, or videos to help illustrate how the feature could be done. 19 | -------------------------------------------------------------------------------- /Simplenote/DateFormatter+Simplenote.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | // MARK: - DateFormatter 4 | // 5 | extension DateFormatter { 6 | 7 | /// Date Formatter for Note Metrics 8 | /// 9 | static let metricsFormatter: DateFormatter = { 10 | let formatter = DateFormatter() 11 | formatter.dateStyle = .medium 12 | formatter.timeStyle = .short 13 | return formatter 14 | }() 15 | 16 | /// Date Formatter for the Notes List 17 | /// 18 | static let notesFormatter: DateFormatter = { 19 | let formatter = DateFormatter() 20 | formatter.dateStyle = .short 21 | formatter.timeStyle = .none 22 | return formatter 23 | }() 24 | 25 | /// Date Formatter for History 26 | /// 27 | static let historyFormatter: DateFormatter = metricsFormatter 28 | } 29 | -------------------------------------------------------------------------------- /Simplenote/NSNotification+Simplenote.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | 4 | // MARK: - AAPL's Theme Notifications 5 | // 6 | extern NSString * const AppleInterfaceThemeChangedNotification; 7 | 8 | 9 | // MARK: - Simplenote Notifications: Someone forgot to bridge NSNotification.Name over to ObjC. =( 10 | // 11 | extern NSString * const EditorDisplayModeDidChangeNotification; 12 | extern NSString * const NoteListDisplayModeDidChangeNotification; 13 | extern NSString * const NoteListSortModeDidChangeNotification; 14 | extern NSString * const StatusBarDisplayModeDidChangeNotification; 15 | extern NSString * const TagSortModeDidChangeNotification; 16 | extern NSString * const ThemeDidChangeNotification; 17 | extern NSString * const FontSizeDidChangeNotification; 18 | extern NSString * const SplitViewStateDidChangeNotification; 19 | -------------------------------------------------------------------------------- /SimplenoteTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /External/Notepad/Extensions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Extensions.swift 3 | // Notepad 4 | // 5 | // Created by Rudd Fawcett on 10/14/16. 6 | // Copyright © 2016 Rudd Fawcett. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | #if os(iOS) 12 | import struct UIKit.CGFloat 13 | #elseif os(macOS) 14 | import struct AppKit.CGFloat 15 | #endif 16 | 17 | 18 | extension String { 19 | /// Converts a String to a NSRegularExpression. 20 | /// 21 | /// - returns: The NSRegularExpression. 22 | func toRegex() -> NSRegularExpression { 23 | var pattern: NSRegularExpression = NSRegularExpression() 24 | 25 | do { 26 | try pattern = NSRegularExpression(pattern: self, options: .anchorsMatchLines) 27 | } catch { 28 | print(error) 29 | } 30 | 31 | return pattern 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /IntentsExtension/Models/Tag+Intents.swift: -------------------------------------------------------------------------------- 1 | // This file contains the required class structure to be able to fetch and use core data files in widgets and intents 2 | // We have collapsed the auto generated core data files into a single file as it is unlikely that the files will need to 3 | // be regenerated. Contained in this file is the generated class files Tag+CoreDataClass.swift and Tag+CoreDataProperties.swift 4 | 5 | import Foundation 6 | import CoreData 7 | 8 | @objc(Tag) 9 | public class Tag: SPManagedObject { 10 | 11 | } 12 | 13 | extension Tag { 14 | 15 | @nonobjc public class func fetchRequest() -> NSFetchRequest { 16 | return NSFetchRequest(entityName: "Tag") 17 | } 18 | 19 | @NSManaged public var index: NSNumber? 20 | @NSManaged public var name: String? 21 | @NSManaged public var share: String? 22 | } 23 | -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/he.lproj/SUUpdateAlert.strings: -------------------------------------------------------------------------------- 1 | 2 | /* Class = "NSWindow"; title = "Software Update"; ObjectID = "5"; */ 3 | "5.title" = "עדכון תכנה"; 4 | 5 | /* Class = "NSTextFieldCell"; title = "Release Notes:"; ObjectID = "170"; */ 6 | "170.title" = "פרטי גרסה:"; 7 | 8 | /* Class = "NSButtonCell"; title = "Remind Me Later"; ObjectID = "171"; */ 9 | "171.title" = "הזכר לי מאוחר יותר"; 10 | 11 | /* Class = "NSButtonCell"; title = "Skip This Version"; ObjectID = "172"; */ 12 | "172.title" = "דלג על גרסה זו"; 13 | 14 | /* Class = "NSButtonCell"; title = "Install Update"; ObjectID = "173"; */ 15 | "173.title" = "התקן עדכון"; 16 | 17 | /* Class = "NSButtonCell"; title = "Automatically download and install updates in the future"; ObjectID = "175"; */ 18 | "175.title" = "הורד והתקן עדכונים אוטומטית גם בעתיד"; 19 | -------------------------------------------------------------------------------- /SimplenoteTests/MockLoginRemote.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | import SimplenoteEndpoints 3 | @testable import Simplenote 4 | 5 | 6 | // MARK: - MockLoginRemote 7 | // 8 | class MockLoginRemote: LoginRemoteProtocol { 9 | var lastLoginRequestEmail: String? 10 | 11 | var onLoginConfirmationRequest: ((_ email: String, _ authCode: String) -> LoginConfirmationResponse)? 12 | 13 | func requestLoginEmail(email: String) async throws { 14 | lastLoginRequestEmail = email 15 | } 16 | 17 | func requestLoginConfirmation(email: String, authCode: String) async throws -> LoginConfirmationResponse { 18 | guard let response = onLoginConfirmationRequest?(email, authCode) else { 19 | throw RemoteError(statusCode: .zero, response: nil, networkError: nil) 20 | } 21 | 22 | return response 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /IntentsExtension/Tools/ExtensionCoreDataWrapper.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | import CoreData 3 | 4 | class ExtensionCoreDataWrapper { 5 | private lazy var coreDataManager: CoreDataManager? = { 6 | do { 7 | return try CoreDataManager(storageSettings: StorageSettings(), for: .intents) 8 | } catch { 9 | return nil 10 | } 11 | }() 12 | 13 | lazy var resultsController: ExtensionResultsController? = { 14 | guard let coreDataManager else { 15 | return nil 16 | } 17 | return ExtensionResultsController(context: coreDataManager.managedObjectContext) 18 | }() 19 | 20 | func context() -> NSManagedObjectContext? { 21 | guard let coreDataManager else { 22 | return nil 23 | } 24 | return coreDataManager.managedObjectContext 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Simplenote/URL+Interlink.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | // MARK: - URL + Interlink 4 | // 5 | extension URL { 6 | 7 | /// Indicates if the receiver' has the Simplenote Scheme 8 | /// 9 | var isSimplenoteURL: Bool { 10 | scheme?.lowercased() == SimplenoteConstants.simplenoteScheme 11 | } 12 | 13 | /// Indicates if the receiver is a reference to a Note 14 | /// 15 | var isInterlinkURL: Bool { 16 | isSimplenoteURL && host?.lowercased() == SimplenoteConstants.simplenoteInterlinkHost 17 | } 18 | 19 | /// Extracts the Internal Note's SimperiumKey, whenever the receiver is an Interlink URL 20 | /// 21 | var interlinkSimperiumKey: String? { 22 | guard isInterlinkURL else { 23 | return nil 24 | } 25 | 26 | return path.replacingOccurrences(of: "/", with: "") 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /IntentsExtension/Extensions/NSURLSessionConfiguration+Extensions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NSURLSessionConfiguration+Extensions.swift 3 | // IntentsExtension 4 | // 5 | // Created by Charlie Scheer on 6/3/24. 6 | // Copyright © 2024 Simperium. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | extension URLSessionConfiguration { 12 | /// Returns a new Background Session Configuration, with a random identifier. 13 | /// 14 | class func backgroundSessionConfigurationWithRandomizedIdentifier() -> URLSessionConfiguration { 15 | let identifier = IntentsConstants.extensionGroupName + "." + UUID().uuidString 16 | let configuration = URLSessionConfiguration.background(withIdentifier: identifier) 17 | configuration.sharedContainerIdentifier = IntentsConstants.extensionGroupName 18 | 19 | return configuration 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /SimplenoteTests/MockTextView.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | // MARK: - MockupTextView: Useful for Unit Testing purposes. 4 | // NSTextView(s) not properly attached to a window lack UndoManager 5 | // 6 | class MockTextView: NSTextView { 7 | 8 | let internalUndoManager = UndoManager() 9 | 10 | override var undoManager: UndoManager? { 11 | return internalUndoManager 12 | } 13 | } 14 | 15 | // MARK: - MockupTextViewDelegate: Useful for Unit Testing Purposes 16 | // 17 | class MockupTextViewDelegate: NSObject, NSTextViewDelegate { 18 | 19 | var receivedTextDidChangeNotifications = [Notification]() 20 | 21 | func reset() { 22 | receivedTextDidChangeNotifications.removeAll() 23 | } 24 | 25 | func textDidChange(_ notification: Notification) { 26 | receivedTextDidChangeNotifications.append(notification) 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.strings: -------------------------------------------------------------------------------- 1 | 2 | /* Class = "NSWindow"; title = "Software Update"; ObjectID = "5"; */ 3 | "5.title" = "Software Update"; 4 | 5 | /* Class = "NSTextFieldCell"; title = "Release Notes:"; ObjectID = "170"; */ 6 | "170.title" = "Release Notes:"; 7 | 8 | /* Class = "NSButtonCell"; title = "Remind Me Later"; ObjectID = "171"; */ 9 | "171.title" = "Remind Me Later"; 10 | 11 | /* Class = "NSButtonCell"; title = "Skip This Version"; ObjectID = "172"; */ 12 | "172.title" = "Skip This Version"; 13 | 14 | /* Class = "NSButtonCell"; title = "Install Update"; ObjectID = "173"; */ 15 | "173.title" = "Install Update"; 16 | 17 | /* Class = "NSButtonCell"; title = "Automatically download and install updates in the future"; ObjectID = "175"; */ 18 | "175.title" = "Automatically download and install updates in the future"; 19 | -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/hr.lproj/SUUpdateAlert.strings: -------------------------------------------------------------------------------- 1 | 2 | /* Class = "NSWindow"; title = "Software Update"; ObjectID = "5"; */ 3 | "5.title" = "Software Update"; 4 | 5 | /* Class = "NSTextFieldCell"; title = "Release Notes:"; ObjectID = "170"; */ 6 | "170.title" = "Release Notes:"; 7 | 8 | /* Class = "NSButtonCell"; title = "Remind Me Later"; ObjectID = "171"; */ 9 | "171.title" = "Remind Me Later"; 10 | 11 | /* Class = "NSButtonCell"; title = "Skip This Version"; ObjectID = "172"; */ 12 | "172.title" = "Skip This Version"; 13 | 14 | /* Class = "NSButtonCell"; title = "Install Update"; ObjectID = "173"; */ 15 | "173.title" = "Install Update"; 16 | 17 | /* Class = "NSButtonCell"; title = "Automatically download and install updates in the future"; ObjectID = "175"; */ 18 | "175.title" = "Automatically download and install updates in the future"; 19 | -------------------------------------------------------------------------------- /Simplenote.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.developer.associated-domains 6 | 7 | applinks:app.simplenote.com 8 | 9 | com.apple.security.app-sandbox 10 | 11 | com.apple.security.application-groups 12 | 13 | $(TeamIdentifierPrefix)com.automattic.SimplenoteMac 14 | 15 | com.apple.security.files.user-selected.read-write 16 | 17 | com.apple.security.network.client 18 | 19 | com.apple.security.print 20 | 21 | keychain-access-groups 22 | 23 | $(AppIdentifierPrefix)$(CFBundleIdentifier) 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /IntentsExtension/Models/SPManagedObject+Intents.swift: -------------------------------------------------------------------------------- 1 | // This file contains the required class structure to be able to fetch and use core data files in widgets and intents 2 | // We have collapsed the auto generated core data files into a single file as it is unlikely that the files will need to 3 | // be regenerated. Contained in this file is the generated class files SPManagedObject+CoreDataClass.swift and SPManagedObject+CoreDataProperties.swift 4 | 5 | import Foundation 6 | import CoreData 7 | 8 | @objc(SPManagedObject) 9 | public class SPManagedObject: NSManagedObject { 10 | 11 | } 12 | 13 | extension SPManagedObject { 14 | 15 | @nonobjc public class func fetchRequest() -> NSFetchRequest { 16 | return NSFetchRequest(entityName: "SPManagedObject") 17 | } 18 | 19 | @NSManaged public var ghostData: String? 20 | @NSManaged public var simperiumKey: String 21 | } 22 | -------------------------------------------------------------------------------- /Simplenote/Note+Interlinks.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | // MARK: - Note + Interlink 4 | // 5 | extension Note { 6 | 7 | /// Returns the receiver's Markdown Internal Reference, when possible 8 | /// 9 | var plainInterlink: String? { 10 | guard let key = simperiumKey else { 11 | return nil 12 | } 13 | 14 | return SimplenoteConstants.simplenoteScheme + "://" + SimplenoteConstants.simplenoteInterlinkHost + "/" + key 15 | } 16 | 17 | /// Returns the receiver's Markdown Internal Reference, when possible 18 | /// 19 | var markdownInterlink: String? { 20 | guard let title = titlePreview, let interlink = plainInterlink else { 21 | return nil 22 | } 23 | 24 | let shortened = title.truncateWords(upTo: SimplenoteConstants.simplenoteInterlinkMaxTitleLength) 25 | return "[" + shortened + "](" + interlink + ")" 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /Simplenote/NSImage+Simplenote.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | import os.log 3 | 4 | // MARK: - NSImage + Simplenote 5 | // 6 | extension NSImage { 7 | 8 | /// Returns a copy of the receiver, tinted with the specified color 9 | /// 10 | @objc(tintedWithColor:) 11 | func tinted(with color: NSColor) -> NSImage { 12 | guard let cgImage = self.cgImage(forProposedRect: nil, context: nil, hints: nil) else { 13 | return self 14 | } 15 | 16 | return NSImage(size: size, flipped: false) { bounds in 17 | guard let context = NSGraphicsContext.current?.cgContext else { 18 | os_log("☠️ Error: Cannot acquire current CGContext") 19 | return false 20 | } 21 | 22 | color.set() 23 | context.clip(to: bounds, mask: cgImage) 24 | context.fill(bounds) 25 | 26 | return true 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Resources/ca.lproj/SUUpdateAlert.strings: -------------------------------------------------------------------------------- 1 | /* Class = "NSWindow"; title = "Software Update"; ObjectID = "5"; */ 2 | "5.title" = "Actualització del programari"; 3 | 4 | /* Class = "NSTextFieldCell"; title = "Release Notes:"; ObjectID = "170"; */ 5 | "170.title" = "Notes d'aquesta versió:"; 6 | 7 | /* Class = "NSButtonCell"; title = "Remind Me Later"; ObjectID = "171"; */ 8 | "171.title" = "Recorda-m'ho més tard"; 9 | 10 | /* Class = "NSButtonCell"; title = "Skip This Version"; ObjectID = "172"; */ 11 | "172.title" = "Omet aquesta versió"; 12 | 13 | /* Class = "NSButtonCell"; title = "Install Update"; ObjectID = "173"; */ 14 | "173.title" = "Instal·la l'actualització"; 15 | 16 | /* Class = "NSButtonCell"; title = "Automatically download and install updates in the future"; ObjectID = "175"; */ 17 | "175.title" = "Descarrega i instal·la les actualitzacions automàticament en el futur"; 18 | -------------------------------------------------------------------------------- /Simplenote/SimplenoteDebug.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.developer.associated-domains 6 | 7 | applinks:app.simplenote.com 8 | 9 | com.apple.security.app-sandbox 10 | 11 | com.apple.security.application-groups 12 | 13 | $(TeamIdentifierPrefix)com.automattic.SimplenoteMac.Development 14 | 15 | com.apple.security.files.user-selected.read-write 16 | 17 | com.apple.security.network.client 18 | 19 | com.apple.security.print 20 | 21 | keychain-access-groups 22 | 23 | $(AppIdentifierPrefix)$(CFBundleIdentifier) 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Simplenote/NSColor+Simplenote.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | // MARK: - HTML Colors 4 | // 5 | extension NSColor { 6 | 7 | /// Initializes a new UIColor instance with the specified HexString Code. 8 | /// 9 | convenience init(hexString: String, alpha: CGFloat = AppKitConstants.alpha1_0) { 10 | let hexString = hexString.trimmingCharacters(in: .whitespacesAndNewlines) 11 | let scanner = Scanner(string: hexString) 12 | if hexString.hasPrefix("#") { 13 | scanner.currentIndex = hexString.index(after: hexString.startIndex) 14 | } 15 | 16 | var color: UInt64 = .zero 17 | scanner.scanHexInt64(&color) 18 | 19 | let mask = 0x000000FF 20 | let r = Int(color >> 16) & mask 21 | let g = Int(color >> 8) & mask 22 | let b = Int(color) & mask 23 | 24 | self.init(red: CGFloat(r) / 255.0, green: CGFloat(g) / 255.0, blue: CGFloat(b) / 255.0, alpha: alpha) 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Simplenote/ContentSlice.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | // MARK: - ContentSlice 4 | // 5 | struct ContentSlice: Equatable { 6 | /// Original content 7 | /// 8 | let content: String 9 | 10 | /// Sliced range 11 | /// 12 | let range: Range 13 | 14 | /// Ranges of matched words 15 | /// 16 | let matches: [Range] 17 | 18 | /// NSRange version of `matches` 19 | /// 20 | var nsMatches: [NSRange] { 21 | return matches.map { 22 | NSRange($0, in: content) 23 | } 24 | } 25 | 26 | /// Content sliced to the range 27 | /// 28 | var slicedContent: String { 29 | return String(content[range]) 30 | } 31 | 32 | /// Constructor 33 | /// 34 | init(content: String, range: Range, matches: [Range]) { 35 | self.content = content 36 | self.range = range 37 | self.matches = matches 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /Simplenote/SearchMapView.swift: -------------------------------------------------------------------------------- 1 | import AppKit 2 | 3 | // MARK: - SearchMapView 4 | // 5 | @objc 6 | final class SearchMapView: NSView { 7 | private var positions: [CGFloat] = [] 8 | 9 | /// Update with positions of bars. Position is from 0.0 to 1.0 10 | /// 11 | func update(with positions: [CGFloat]) { 12 | self.positions = positions 13 | needsDisplay = true 14 | } 15 | 16 | override func draw(_ dirtyRect: NSRect) { 17 | NSColor.simplenoteExcerptHighlightColor.set() 18 | for position in positions { 19 | let rect = NSRect(x: 0, 20 | y: (bounds.height - bounds.height * position) - Metrics.barHeight / 2, 21 | width: bounds.width, 22 | height: Metrics.barHeight) 23 | NSBezierPath.fill(rect) 24 | } 25 | } 26 | } 27 | 28 | private enum Metrics { 29 | static let barHeight: CGFloat = 2.0 30 | } 31 | -------------------------------------------------------------------------------- /Simplenote/Array+Simplenote.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | // MARK: - Simplenote Methods 4 | // 5 | extension Array where Element == String { 6 | 7 | /// Returns a copy of the receiver containing Unique Strings (case insensitive comparison!) 8 | /// 9 | var caseInsensitiveUnique: [String] { 10 | var seen = Set() 11 | var output = [String]() 12 | 13 | for string in self { 14 | let lowercased = string.lowercased() 15 | if seen.contains(lowercased) { 16 | continue 17 | } 18 | 19 | output.append(string) 20 | seen.insert(lowercased) 21 | } 22 | 23 | return output 24 | } 25 | } 26 | 27 | // MARK: - Array + NSView Convenience API 28 | // 29 | extension Array where Element == NSView { 30 | 31 | func updateAlphaValue(_ newAlpha: CGFloat) { 32 | forEach { view in 33 | view.alphaValue = newAlpha 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /Simplenote/SplitView.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | // MARK: - SplitView 4 | // 5 | class SplitView: NSSplitView { 6 | 7 | /// Default Divider Thickness: 1pt 8 | /// 9 | private let defaultDividerThickness = CGFloat(1) 10 | 11 | // MARK: - Overridden Methods 12 | 13 | override var dividerThickness: CGFloat { 14 | defaultDividerThickness 15 | } 16 | 17 | override var dividerColor: NSColor { 18 | .simplenoteDividerColor 19 | } 20 | } 21 | 22 | // MARK: - Forced Redraw Hacks. Please Nuke! 23 | // 24 | private extension SplitView { 25 | 26 | /// Hack: 27 | /// Forces the entire window to re-render, by switching the appearance back and forth. 28 | /// 29 | func performMojaveRedrawHack() { 30 | guard let window = window else { 31 | return 32 | } 33 | 34 | let oldAppearance = window.appearance 35 | window.appearance = nil 36 | window.appearance = oldAppearance 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /Simplenote/ClipView.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | // MARK: - NSClipView 4 | // 5 | class ClipView: NSClipView { 6 | 7 | /// ClipView's default `hitTest` implementation returns `nil` whenever a view, **although visible**, falls within the area 8 | /// defined by the `contentInsets.top`. 9 | /// 10 | /// In this subclass we're simply forwarding the click event to the subclasses, when appropriate. 11 | /// 12 | override func hitTest(_ point: NSPoint) -> NSView? { 13 | if let subview = super.hitTest(point) { 14 | return subview 15 | } 16 | 17 | if point.y >= contentInsets.top { 18 | return nil 19 | } 20 | 21 | for subview in subviews { 22 | let translated = convert(point, to: subview) 23 | guard let result = subview.hitTest(translated) else { 24 | continue 25 | } 26 | 27 | return result 28 | } 29 | 30 | return nil 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /Simplenote/NSView+Simplenote.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | // MARK: - NSView + Simplenote 4 | // 5 | extension NSView { 6 | 7 | /// Indicates if either the Receiver is the First responder (OR) the receiver is the Field Editor's delegate 8 | /// 9 | var isFirstResponder: Bool { 10 | guard let responder = window?.firstResponder else { 11 | return false 12 | } 13 | 14 | if responder == self { 15 | return true 16 | } 17 | 18 | let fieldEditor = responder as? NSText 19 | let effectiveResponder = fieldEditor?.delegate as? NSControl 20 | return effectiveResponder == self 21 | } 22 | 23 | /// Returns first layout constraint found for attribute type 24 | /// 25 | func firstContraint(firstView: NSView, firstAttribute: NSLayoutConstraint.Attribute) -> NSLayoutConstraint? { 26 | constraints.first(where: { $0.firstItem as? NSView == firstView && $0.firstAttribute == firstAttribute }) 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /SimplenoteTests/MockAccountVerificationRemote.swift: -------------------------------------------------------------------------------- 1 | import XCTest 2 | @testable import SimplenoteEndpoints 3 | @testable import Simplenote 4 | 5 | 6 | // MARK: - MockAccountVerificationRemote 7 | // 8 | class MockAccountRemote: AccountRemote { 9 | private var pendingVerifications: [(email: String, completion: (Result) -> Void)] = [] 10 | 11 | override func verify(email: String, completion: @escaping (Result) -> Void) { 12 | pendingVerifications.append((email, completion)) 13 | } 14 | 15 | func processVerification(for email: String, with result: Result) { 16 | guard let index = pendingVerifications.firstIndex(where: { $0.email == email }) else { 17 | XCTFail("Cannot find pending verification for email \(email)") 18 | return 19 | } 20 | 21 | let pendingVerification = pendingVerifications.remove(at: index) 22 | pendingVerification.completion(result) 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /External/Sparkle/Frameworks/Sparkle.framework/Versions/A/Headers/SUVersionDisplayProtocol.h: -------------------------------------------------------------------------------- 1 | // 2 | // SUVersionDisplayProtocol.h 3 | // EyeTV 4 | // 5 | // Created by Uli Kusterer on 08.12.09. 6 | // Copyright 2009 Elgato Systems GmbH. All rights reserved. 7 | // 8 | 9 | #if __has_feature(modules) 10 | #if __has_warning("-Watimport-in-framework-header") 11 | #pragma clang diagnostic ignored "-Watimport-in-framework-header" 12 | #endif 13 | @import Foundation; 14 | #else 15 | #import 16 | #endif 17 | #import "SUExport.h" 18 | 19 | /*! 20 | Applies special display formatting to version numbers. 21 | */ 22 | @protocol SUVersionDisplay 23 | 24 | /*! 25 | Formats two version strings. 26 | 27 | Both versions are provided so that important distinguishing information 28 | can be displayed while also leaving out unnecessary/confusing parts. 29 | */ 30 | - (void)formatVersion:(NSString *_Nonnull*_Nonnull)inOutVersionA andVersion:(NSString *_Nonnull*_Nonnull)inOutVersionB; 31 | 32 | @end 33 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # OS X 2 | .DS_Store 3 | .AppleDouble 4 | .LSOverride 5 | Icon 6 | ._* 7 | .Spotlight-V100 8 | .Trashes 9 | 10 | # Xcode 11 | */build/* 12 | *.pbxuser 13 | !default.pbxuser 14 | *.mode1v3 15 | !default.mode1v3 16 | *.mode2v3 17 | !default.mode2v3 18 | *.perspectivev3 19 | !default.perspectivev3 20 | !default.xcworkspace 21 | xcuserdata 22 | profile 23 | *.moved-aside 24 | DerivedData 25 | .idea/ 26 | *.hmap 27 | *.xcscmblueprint 28 | Simplenote/DerivedSources/ 29 | 30 | # Settings 31 | Simplenote/config.plist 32 | Simplenote/Credentials/ 33 | 34 | # Bundler 35 | /vendor/ 36 | /vendor/bundle/ 37 | 38 | # Dependencies 39 | Pods/ 40 | Carthage/Build 41 | 42 | # Fastlane 43 | fastlane/Preview.html 44 | fastlane/report.xml 45 | fastlane/README.md 46 | fastlane/test_output/ 47 | build/ 48 | 49 | # Secrets 50 | # All secrets should be stored encrypted in .configure-files, anything that's 51 | # not encrypted should be ignored 52 | .configure-files/* 53 | !.configure-files/*.enc 54 | 55 | # Swift Package Manager 56 | .build 57 | -------------------------------------------------------------------------------- /Simplenote/TagListFilter.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | // MARK: - TagListFilter 4 | // 5 | enum TagListFilter: Equatable { 6 | case everything 7 | case deleted 8 | case untagged 9 | case tag(name: String) 10 | } 11 | 12 | // MARK: - Public API(s) 13 | // 14 | extension TagListFilter { 15 | 16 | /// Returns the Title matching the current state 17 | /// 18 | var title: String { 19 | switch self { 20 | case .everything: 21 | return NSLocalizedString("All Notes", comment: "Title of the all notes filter") 22 | case .deleted: 23 | return NSLocalizedString("Trash", comment: "Title for the Trash filter") 24 | case .tag(let name) where name.isEmpty: 25 | return NSLocalizedString("Unnamed Tag", comment: "Title for Tag with no Name") 26 | case .tag(let name): 27 | return name 28 | case .untagged: 29 | return NSLocalizedString("Untagged", comment: "Untagged Notes Title") 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /Simplenote/NoteListPrefixFormatter.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | // MARK: - NoteListPrefixFormatter 4 | // 5 | struct NoteListPrefixFormatter { 6 | 7 | /// Returns a Prefix for the specified Note, matching a given SortMode 8 | /// 9 | func prefix(from note: Note, for sortMode: SortMode) -> String? { 10 | guard let date = date(from: note, for: sortMode) else { 11 | return nil 12 | } 13 | 14 | return DateFormatter.notesFormatter.string(from: date) 15 | } 16 | 17 | /// Returns the relevant Note Date field for the specified Sort Mode 18 | /// 19 | private func date(from note: Note, for sortMode: SortMode) -> Date? { 20 | switch sortMode { 21 | case .alphabeticallyAscending, .alphabeticallyDescending: 22 | return nil 23 | 24 | case .createdNewest, .createdOldest: 25 | return note.creationDate 26 | 27 | case .modifiedNewest, .modifiedOldest: 28 | return note.modificationDate 29 | } 30 | } 31 | } 32 | --------------------------------------------------------------------------------