Add missing files
@ -0,0 +1,97 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1420"
|
||||
wasCreatedForAppExtension = "YES"
|
||||
version = "2.0">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
buildImplicitDependencies = "YES">
|
||||
<BuildActionEntries>
|
||||
<BuildActionEntry
|
||||
buildForTesting = "YES"
|
||||
buildForRunning = "YES"
|
||||
buildForProfiling = "YES"
|
||||
buildForArchiving = "YES"
|
||||
buildForAnalyzing = "YES">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "42FF1B15271154A700B38C38"
|
||||
BuildableName = "SafariExtension.appex"
|
||||
BlueprintName = "SafariExtension (iOS)"
|
||||
ReferencedContainer = "container:Omnivore.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildActionEntry>
|
||||
<BuildActionEntry
|
||||
buildForTesting = "YES"
|
||||
buildForRunning = "YES"
|
||||
buildForProfiling = "YES"
|
||||
buildForArchiving = "YES"
|
||||
buildForAnalyzing = "YES">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "8260E9C026EF983F8970EC05"
|
||||
BuildableName = "Omnivore.app"
|
||||
BlueprintName = "Omnivore-iOS"
|
||||
ReferencedContainer = "container:Omnivore.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildActionEntry>
|
||||
</BuildActionEntries>
|
||||
</BuildAction>
|
||||
<TestAction
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES">
|
||||
<Testables>
|
||||
</Testables>
|
||||
</TestAction>
|
||||
<LaunchAction
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = ""
|
||||
selectedLauncherIdentifier = "Xcode.IDEFoundation.Launcher.PosixSpawn"
|
||||
launchStyle = "0"
|
||||
askForAppToLaunch = "Yes"
|
||||
useCustomWorkingDirectory = "NO"
|
||||
ignoresPersistentStateOnLaunch = "NO"
|
||||
debugDocumentVersioning = "YES"
|
||||
debugServiceExtension = "internal"
|
||||
allowLocationSimulation = "YES"
|
||||
launchAutomaticallySubstyle = "2">
|
||||
<BuildableProductRunnable
|
||||
runnableDebuggingMode = "0">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "8260E9C026EF983F8970EC05"
|
||||
BuildableName = "Omnivore.app"
|
||||
BlueprintName = "Omnivore-iOS"
|
||||
ReferencedContainer = "container:Omnivore.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildableProductRunnable>
|
||||
</LaunchAction>
|
||||
<ProfileAction
|
||||
buildConfiguration = "Release"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||
savedToolIdentifier = ""
|
||||
useCustomWorkingDirectory = "NO"
|
||||
debugDocumentVersioning = "YES"
|
||||
askForAppToLaunch = "Yes"
|
||||
launchAutomaticallySubstyle = "2">
|
||||
<BuildableProductRunnable
|
||||
runnableDebuggingMode = "0">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "8260E9C026EF983F8970EC05"
|
||||
BuildableName = "Omnivore.app"
|
||||
BlueprintName = "Omnivore-iOS"
|
||||
ReferencedContainer = "container:Omnivore.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildableProductRunnable>
|
||||
</ProfileAction>
|
||||
<AnalyzeAction
|
||||
buildConfiguration = "Debug">
|
||||
</AnalyzeAction>
|
||||
<ArchiveAction
|
||||
buildConfiguration = "Release"
|
||||
revealArchiveInOrganizer = "YES">
|
||||
</ArchiveAction>
|
||||
</Scheme>
|
||||
@ -0,0 +1,100 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1500"
|
||||
wasCreatedForAppExtension = "YES"
|
||||
version = "2.0">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
buildImplicitDependencies = "YES">
|
||||
<BuildActionEntries>
|
||||
<BuildActionEntry
|
||||
buildForTesting = "YES"
|
||||
buildForRunning = "YES"
|
||||
buildForProfiling = "YES"
|
||||
buildForArchiving = "YES"
|
||||
buildForAnalyzing = "YES">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "42FF1B1F271154A700B38C38"
|
||||
BuildableName = "SafariExtension.appex"
|
||||
BlueprintName = "SafariExtension (macOS)"
|
||||
ReferencedContainer = "container:Omnivore.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildActionEntry>
|
||||
<BuildActionEntry
|
||||
buildForTesting = "YES"
|
||||
buildForRunning = "YES"
|
||||
buildForProfiling = "YES"
|
||||
buildForArchiving = "YES"
|
||||
buildForAnalyzing = "YES">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "048ECFFB26A0B1CB00469E57"
|
||||
BuildableName = "Omnivore.app"
|
||||
BlueprintName = "Omnivore"
|
||||
ReferencedContainer = "container:Omnivore.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildActionEntry>
|
||||
</BuildActionEntries>
|
||||
</BuildAction>
|
||||
<TestAction
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||
shouldAutocreateTestPlan = "YES">
|
||||
</TestAction>
|
||||
<LaunchAction
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = ""
|
||||
selectedLauncherIdentifier = "Xcode.IDEFoundation.Launcher.PosixSpawn"
|
||||
launchStyle = "0"
|
||||
askForAppToLaunch = "Yes"
|
||||
useCustomWorkingDirectory = "NO"
|
||||
ignoresPersistentStateOnLaunch = "NO"
|
||||
debugDocumentVersioning = "YES"
|
||||
debugServiceExtension = "internal"
|
||||
allowLocationSimulation = "YES"
|
||||
launchAutomaticallySubstyle = "2">
|
||||
<RemoteRunnable
|
||||
runnableDebuggingMode = "0"
|
||||
BundleIdentifier = "com.apple.Safari"
|
||||
RemotePath = "/Applications/Safari.app">
|
||||
</RemoteRunnable>
|
||||
<MacroExpansion>
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "048ECFFB26A0B1CB00469E57"
|
||||
BuildableName = "Omnivore.app"
|
||||
BlueprintName = "Omnivore"
|
||||
ReferencedContainer = "container:Omnivore.xcodeproj">
|
||||
</BuildableReference>
|
||||
</MacroExpansion>
|
||||
</LaunchAction>
|
||||
<ProfileAction
|
||||
buildConfiguration = "Release"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||
savedToolIdentifier = ""
|
||||
useCustomWorkingDirectory = "NO"
|
||||
debugDocumentVersioning = "YES"
|
||||
askForAppToLaunch = "Yes"
|
||||
launchAutomaticallySubstyle = "2">
|
||||
<BuildableProductRunnable
|
||||
runnableDebuggingMode = "0">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "048ECFFB26A0B1CB00469E57"
|
||||
BuildableName = "Omnivore.app"
|
||||
BlueprintName = "Omnivore"
|
||||
ReferencedContainer = "container:Omnivore.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildableProductRunnable>
|
||||
</ProfileAction>
|
||||
<AnalyzeAction
|
||||
buildConfiguration = "Debug">
|
||||
</AnalyzeAction>
|
||||
<ArchiveAction
|
||||
buildConfiguration = "Release"
|
||||
revealArchiveInOrganizer = "YES">
|
||||
</ArchiveAction>
|
||||
</Scheme>
|
||||
@ -0,0 +1,97 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1340"
|
||||
wasCreatedForAppExtension = "YES"
|
||||
version = "2.0">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
buildImplicitDependencies = "YES">
|
||||
<BuildActionEntries>
|
||||
<BuildActionEntry
|
||||
buildForTesting = "YES"
|
||||
buildForRunning = "YES"
|
||||
buildForProfiling = "YES"
|
||||
buildForArchiving = "YES"
|
||||
buildForAnalyzing = "YES">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "42FF1B1F271154A700B38C38"
|
||||
BuildableName = "SafariExtension.appex"
|
||||
BlueprintName = "SafariExtension (macOS)"
|
||||
ReferencedContainer = "container:Omnivore.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildActionEntry>
|
||||
<BuildActionEntry
|
||||
buildForTesting = "YES"
|
||||
buildForRunning = "YES"
|
||||
buildForProfiling = "YES"
|
||||
buildForArchiving = "YES"
|
||||
buildForAnalyzing = "YES">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "048ECFFB26A0B1CB00469E57"
|
||||
BuildableName = "Omnivore.app"
|
||||
BlueprintName = "Omnivore"
|
||||
ReferencedContainer = "container:Omnivore.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildActionEntry>
|
||||
</BuildActionEntries>
|
||||
</BuildAction>
|
||||
<TestAction
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES">
|
||||
<Testables>
|
||||
</Testables>
|
||||
</TestAction>
|
||||
<LaunchAction
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = ""
|
||||
selectedLauncherIdentifier = "Xcode.IDEFoundation.Launcher.PosixSpawn"
|
||||
launchStyle = "0"
|
||||
askForAppToLaunch = "Yes"
|
||||
useCustomWorkingDirectory = "NO"
|
||||
ignoresPersistentStateOnLaunch = "NO"
|
||||
debugDocumentVersioning = "YES"
|
||||
debugServiceExtension = "internal"
|
||||
allowLocationSimulation = "YES"
|
||||
launchAutomaticallySubstyle = "2">
|
||||
<BuildableProductRunnable
|
||||
runnableDebuggingMode = "0">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "048ECFFB26A0B1CB00469E57"
|
||||
BuildableName = "Omnivore.app"
|
||||
BlueprintName = "Omnivore"
|
||||
ReferencedContainer = "container:Omnivore.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildableProductRunnable>
|
||||
</LaunchAction>
|
||||
<ProfileAction
|
||||
buildConfiguration = "Release"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||
savedToolIdentifier = ""
|
||||
useCustomWorkingDirectory = "NO"
|
||||
debugDocumentVersioning = "YES"
|
||||
askForAppToLaunch = "Yes"
|
||||
launchAutomaticallySubstyle = "2">
|
||||
<BuildableProductRunnable
|
||||
runnableDebuggingMode = "0">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "048ECFFB26A0B1CB00469E57"
|
||||
BuildableName = "Omnivore.app"
|
||||
BlueprintName = "Omnivore"
|
||||
ReferencedContainer = "container:Omnivore.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildableProductRunnable>
|
||||
</ProfileAction>
|
||||
<AnalyzeAction
|
||||
buildConfiguration = "Debug">
|
||||
</AnalyzeAction>
|
||||
<ArchiveAction
|
||||
buildConfiguration = "Release"
|
||||
revealArchiveInOrganizer = "YES">
|
||||
</ArchiveAction>
|
||||
</Scheme>
|
||||
@ -0,0 +1,99 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1500"
|
||||
wasCreatedForAppExtension = "YES"
|
||||
version = "1.7">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
buildImplicitDependencies = "YES">
|
||||
<BuildActionEntries>
|
||||
<BuildActionEntry
|
||||
buildForTesting = "YES"
|
||||
buildForRunning = "YES"
|
||||
buildForProfiling = "YES"
|
||||
buildForArchiving = "YES"
|
||||
buildForAnalyzing = "YES">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "046C5CD126A3F89A00AC5349"
|
||||
BuildableName = "ShareExtension-Mac.appex"
|
||||
BlueprintName = "ShareExtension-Mac"
|
||||
ReferencedContainer = "container:Omnivore.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildActionEntry>
|
||||
<BuildActionEntry
|
||||
buildForTesting = "YES"
|
||||
buildForRunning = "YES"
|
||||
buildForProfiling = "YES"
|
||||
buildForArchiving = "YES"
|
||||
buildForAnalyzing = "YES">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "048ECFFB26A0B1CB00469E57"
|
||||
BuildableName = "Omnivore.app"
|
||||
BlueprintName = "Omnivore"
|
||||
ReferencedContainer = "container:Omnivore.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildActionEntry>
|
||||
</BuildActionEntries>
|
||||
</BuildAction>
|
||||
<TestAction
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||
shouldAutocreateTestPlan = "YES">
|
||||
</TestAction>
|
||||
<LaunchAction
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
debugAsWhichUser = "root"
|
||||
launchStyle = "0"
|
||||
useCustomWorkingDirectory = "NO"
|
||||
ignoresPersistentStateOnLaunch = "NO"
|
||||
debugDocumentVersioning = "YES"
|
||||
debugServiceExtension = "internal"
|
||||
allowLocationSimulation = "YES">
|
||||
<PathRunnable
|
||||
runnableDebuggingMode = "0"
|
||||
BundleIdentifier = "com.apple.Safari"
|
||||
FilePath = "/System/Volumes/Preboot/Cryptexes/App/System/Applications/Safari.app">
|
||||
</PathRunnable>
|
||||
<MacroExpansion>
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "048ECFFB26A0B1CB00469E57"
|
||||
BuildableName = "Omnivore.app"
|
||||
BlueprintName = "Omnivore"
|
||||
ReferencedContainer = "container:Omnivore.xcodeproj">
|
||||
</BuildableReference>
|
||||
</MacroExpansion>
|
||||
</LaunchAction>
|
||||
<ProfileAction
|
||||
buildConfiguration = "Release"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||
savedToolIdentifier = ""
|
||||
useCustomWorkingDirectory = "NO"
|
||||
debugDocumentVersioning = "YES"
|
||||
askForAppToLaunch = "Yes"
|
||||
launchAutomaticallySubstyle = "2">
|
||||
<BuildableProductRunnable
|
||||
runnableDebuggingMode = "0">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "048ECFFB26A0B1CB00469E57"
|
||||
BuildableName = "Omnivore.app"
|
||||
BlueprintName = "Omnivore"
|
||||
ReferencedContainer = "container:Omnivore.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildableProductRunnable>
|
||||
</ProfileAction>
|
||||
<AnalyzeAction
|
||||
buildConfiguration = "Debug">
|
||||
</AnalyzeAction>
|
||||
<ArchiveAction
|
||||
buildConfiguration = "Release"
|
||||
revealArchiveInOrganizer = "YES">
|
||||
</ArchiveAction>
|
||||
</Scheme>
|
||||
@ -0,0 +1,108 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1340"
|
||||
wasCreatedForAppExtension = "YES"
|
||||
version = "2.0">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
buildImplicitDependencies = "YES">
|
||||
<BuildActionEntries>
|
||||
<BuildActionEntry
|
||||
buildForTesting = "YES"
|
||||
buildForRunning = "YES"
|
||||
buildForProfiling = "YES"
|
||||
buildForArchiving = "YES"
|
||||
buildForAnalyzing = "YES">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "3D30FF2BDEFCACE5A2A13AD1"
|
||||
BuildableName = "ShareExtension.appex"
|
||||
BlueprintName = "ShareExtension"
|
||||
ReferencedContainer = "container:Omnivore.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildActionEntry>
|
||||
<BuildActionEntry
|
||||
buildForTesting = "YES"
|
||||
buildForRunning = "YES"
|
||||
buildForProfiling = "YES"
|
||||
buildForArchiving = "YES"
|
||||
buildForAnalyzing = "YES">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "8260E9C026EF983F8970EC05"
|
||||
BuildableName = "Omnivore.app"
|
||||
BlueprintName = "Omnivore-iOS"
|
||||
ReferencedContainer = "container:Omnivore.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildActionEntry>
|
||||
</BuildActionEntries>
|
||||
</BuildAction>
|
||||
<TestAction
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES">
|
||||
<Testables>
|
||||
<TestableReference
|
||||
skipped = "NO"
|
||||
parallelizable = "YES">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "42E2BFB028E458E0007F29B2"
|
||||
BuildableName = "AppStoreScreenshots.xctest"
|
||||
BlueprintName = "AppStoreScreenshots"
|
||||
ReferencedContainer = "container:Omnivore.xcodeproj">
|
||||
</BuildableReference>
|
||||
</TestableReference>
|
||||
</Testables>
|
||||
</TestAction>
|
||||
<LaunchAction
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = ""
|
||||
selectedLauncherIdentifier = "Xcode.IDEFoundation.Launcher.PosixSpawn"
|
||||
launchStyle = "0"
|
||||
askForAppToLaunch = "Yes"
|
||||
useCustomWorkingDirectory = "NO"
|
||||
ignoresPersistentStateOnLaunch = "NO"
|
||||
debugDocumentVersioning = "YES"
|
||||
debugServiceExtension = "internal"
|
||||
allowLocationSimulation = "YES"
|
||||
launchAutomaticallySubstyle = "2">
|
||||
<BuildableProductRunnable
|
||||
runnableDebuggingMode = "0">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "8260E9C026EF983F8970EC05"
|
||||
BuildableName = "Omnivore.app"
|
||||
BlueprintName = "Omnivore-iOS"
|
||||
ReferencedContainer = "container:Omnivore.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildableProductRunnable>
|
||||
</LaunchAction>
|
||||
<ProfileAction
|
||||
buildConfiguration = "Release"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||
savedToolIdentifier = ""
|
||||
useCustomWorkingDirectory = "NO"
|
||||
debugDocumentVersioning = "YES"
|
||||
askForAppToLaunch = "Yes"
|
||||
launchAutomaticallySubstyle = "2">
|
||||
<BuildableProductRunnable
|
||||
runnableDebuggingMode = "0">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "8260E9C026EF983F8970EC05"
|
||||
BuildableName = "Omnivore.app"
|
||||
BlueprintName = "Omnivore-iOS"
|
||||
ReferencedContainer = "container:Omnivore.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildableProductRunnable>
|
||||
</ProfileAction>
|
||||
<AnalyzeAction
|
||||
buildConfiguration = "Debug">
|
||||
</AnalyzeAction>
|
||||
<ArchiveAction
|
||||
buildConfiguration = "Release"
|
||||
revealArchiveInOrganizer = "YES">
|
||||
</ArchiveAction>
|
||||
</Scheme>
|
||||
46
apple/OmnivoreKit/Sources/App/Views/OperationToast.swift
Normal file
@ -0,0 +1,46 @@
|
||||
|
||||
import SwiftUI
|
||||
|
||||
enum OperationStatus {
|
||||
case none
|
||||
case isPerforming
|
||||
case success
|
||||
case failure
|
||||
}
|
||||
|
||||
struct OperationToast: View {
|
||||
@Binding var operationMessage: String?
|
||||
@Binding var showOperationToast: Bool
|
||||
@Binding var operationStatus: OperationStatus
|
||||
|
||||
var body: some View {
|
||||
VStack {
|
||||
HStack {
|
||||
if operationStatus == .isPerforming {
|
||||
Text(operationMessage ?? "Performing...")
|
||||
Spacer()
|
||||
ProgressView()
|
||||
} else if operationStatus == .success {
|
||||
Text(operationMessage ?? "Success")
|
||||
Spacer()
|
||||
} else if operationStatus == .failure {
|
||||
Text(operationMessage ?? "Failure")
|
||||
Spacer()
|
||||
Button(action: { showOperationToast = false }, label: {
|
||||
Text("Done").bold()
|
||||
})
|
||||
}
|
||||
}
|
||||
.padding(10)
|
||||
.frame(minHeight: 50)
|
||||
.frame(maxWidth: 380)
|
||||
.background(Color(hex: "2A2A2A"))
|
||||
.foregroundColor(Color(hex: "EBEBEB"))
|
||||
.cornerRadius(4.0)
|
||||
.tint(Color.green)
|
||||
}
|
||||
.padding(.bottom, 60)
|
||||
.padding(.horizontal, 10)
|
||||
.ignoresSafeArea(.all, edges: .bottom)
|
||||
}
|
||||
}
|
||||
183
apple/OmnivoreKit/Sources/App/Views/Profile/ClubsView.swift
Normal file
@ -0,0 +1,183 @@
|
||||
#if os(iOS)
|
||||
import Models
|
||||
import Services
|
||||
import SwiftUI
|
||||
import Views
|
||||
|
||||
@MainActor final class RecommendationsGroupsViewModel: ObservableObject {
|
||||
@Published var isLoading = false
|
||||
@Published var isCreating = false
|
||||
@Published var networkError = false
|
||||
@Published var recommendationGroups = [InternalRecommendationGroup]()
|
||||
|
||||
@Published var showCreateSheet = false
|
||||
|
||||
@Published var showCreateError = false
|
||||
@Published var createGroupError: String?
|
||||
|
||||
@Published var onlyAdminCanPost = false
|
||||
@Published var onlyAdminCanSeeMembers = false
|
||||
|
||||
func loadGroups(dataService: DataService) async {
|
||||
isLoading = true
|
||||
|
||||
do {
|
||||
recommendationGroups = try await dataService.recommendationGroups()
|
||||
} catch {
|
||||
networkError = true
|
||||
}
|
||||
|
||||
isLoading = false
|
||||
}
|
||||
|
||||
func createGroup(dataService: DataService, name: String) async {
|
||||
isCreating = true
|
||||
|
||||
let group = try? await dataService.createRecommendationGroup(name: name,
|
||||
onlyAdminCanPost: onlyAdminCanPost,
|
||||
onlyAdminCanSeeMembers: onlyAdminCanSeeMembers)
|
||||
|
||||
if group != nil {
|
||||
await loadGroups(dataService: dataService)
|
||||
showCreateSheet = false
|
||||
} else {
|
||||
createGroupError = "Error creating club"
|
||||
showCreateError = true
|
||||
}
|
||||
|
||||
isCreating = false
|
||||
}
|
||||
}
|
||||
|
||||
struct ClubsView: View {
|
||||
@State var name = ""
|
||||
@EnvironmentObject var dataService: DataService
|
||||
@Environment(\.dismiss) private var dismiss
|
||||
|
||||
@StateObject var viewModel = RecommendationsGroupsViewModel()
|
||||
|
||||
var nextButton: some View {
|
||||
if viewModel.isCreating {
|
||||
return AnyView(ProgressView())
|
||||
} else {
|
||||
return AnyView(Button(action: {
|
||||
Task {
|
||||
await viewModel.createGroup(dataService: dataService, name: self.name)
|
||||
}
|
||||
}, label: {
|
||||
Text(LocalText.genericNext)
|
||||
})
|
||||
.disabled(name.isEmpty)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
var body: some View {
|
||||
NavigationView {
|
||||
Form {
|
||||
TextField(LocalText.genericName, text: $name, prompt: Text(LocalText.clubsName))
|
||||
|
||||
Section("Club Rules") {
|
||||
Toggle("Only admins can post", isOn: $viewModel.onlyAdminCanPost)
|
||||
Toggle("Only admins can see members", isOn: $viewModel.onlyAdminCanSeeMembers)
|
||||
}
|
||||
|
||||
Section {
|
||||
Section {
|
||||
Text("""
|
||||
[Learn more about clubs](https://blog.omnivore.app/p/dca38ba4-8a74-42cc-90ca-d5ffa5d075cc)
|
||||
""")
|
||||
.accentColor(.blue)
|
||||
}
|
||||
}
|
||||
}
|
||||
.alert(isPresented: $viewModel.showCreateError) {
|
||||
Alert(
|
||||
title: Text(viewModel.createGroupError ?? "Error creating group"),
|
||||
dismissButton: .cancel(Text(LocalText.genericOk)) {
|
||||
viewModel.createGroupError = nil
|
||||
viewModel.showCreateError = false
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
.onReceive(NotificationCenter.default.publisher(for: Notification.Name("ScrollToTop"))) { _ in
|
||||
dismiss()
|
||||
}
|
||||
#if os(iOS)
|
||||
.navigationViewStyle(.stack)
|
||||
.navigationBarTitleDisplayMode(.inline)
|
||||
.navigationBarItems(leading:
|
||||
Button(action: {
|
||||
viewModel.showCreateSheet = false
|
||||
}, label: { Text(LocalText.cancelGeneric) }),
|
||||
trailing: nextButton)
|
||||
#endif
|
||||
.navigationTitle("Create Club")
|
||||
}
|
||||
}
|
||||
|
||||
struct GroupsView: View {
|
||||
@EnvironmentObject var dataService: DataService
|
||||
@StateObject var viewModel = RecommendationsGroupsViewModel()
|
||||
|
||||
var body: some View {
|
||||
Group {
|
||||
#if os(iOS)
|
||||
Form {
|
||||
innerBody
|
||||
}
|
||||
#elseif os(macOS)
|
||||
List {
|
||||
innerBody
|
||||
}
|
||||
.listStyle(InsetListStyle())
|
||||
#endif
|
||||
}
|
||||
.sheet(isPresented: $viewModel.showCreateSheet) {
|
||||
NavigationView {
|
||||
ClubsView(viewModel: self.viewModel)
|
||||
}
|
||||
}
|
||||
.task { await viewModel.loadGroups(dataService: dataService) }
|
||||
.navigationTitle(LocalText.clubsGeneric)
|
||||
}
|
||||
|
||||
private var innerBody: some View {
|
||||
Group {
|
||||
Section {
|
||||
Button(
|
||||
action: { viewModel.showCreateSheet = true },
|
||||
label: {
|
||||
HStack {
|
||||
Image(systemName: "plus.circle.fill").foregroundColor(.green)
|
||||
Text(LocalText.clubsCreate)
|
||||
Spacer()
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
if !viewModel.isLoading {
|
||||
if viewModel.recommendationGroups.count > 0 {
|
||||
Section(header: Text(LocalText.clubsYours)) {
|
||||
ForEach(viewModel.recommendationGroups) { recommendationGroup in
|
||||
let viewModel = RecommendationsGroupViewModel(recommendationGroup: recommendationGroup)
|
||||
NavigationLink(
|
||||
destination: RecommendationGroupView(viewModel: viewModel)
|
||||
) {
|
||||
Text(recommendationGroup.name)
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
Section {
|
||||
Text(LocalText.clubsNotAMemberMessage)
|
||||
.accentColor(.blue)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@ -0,0 +1,47 @@
|
||||
import CoreData
|
||||
import Foundation
|
||||
import Models
|
||||
import SwiftGraphQL
|
||||
|
||||
public extension DataService {
|
||||
func fetchContent(itemID: String) async throws {
|
||||
enum MutationResult {
|
||||
case result(success: Bool)
|
||||
case error(errorMessage: String)
|
||||
}
|
||||
|
||||
let selection = Selection<MutationResult, Unions.FetchContentResult> {
|
||||
try $0.on(
|
||||
fetchContentError: .init { .error(errorMessage: try $0.errorCodes().first?.rawValue ?? "Unknown Error") },
|
||||
fetchContentSuccess: .init { .result(success: try $0.success()) }
|
||||
)
|
||||
}
|
||||
|
||||
let mutation = Selection.Mutation {
|
||||
try $0.fetchContent(id: itemID, selection: selection)
|
||||
}
|
||||
|
||||
let path = appEnvironment.graphqlPath
|
||||
let headers = networker.defaultHeaders
|
||||
|
||||
return try await withCheckedThrowingContinuation { continuation in
|
||||
send(mutation, to: path, headers: headers) { queryResult in
|
||||
guard let payload = try? queryResult.get() else {
|
||||
continuation.resume(throwing: BasicError.message(messageText: "network error"))
|
||||
return
|
||||
}
|
||||
|
||||
switch payload.data {
|
||||
case let .result(success: success):
|
||||
if success {
|
||||
continuation.resume()
|
||||
} else {
|
||||
continuation.resume(throwing: BasicError.message(messageText: "Operation failed"))
|
||||
}
|
||||
case let .error(errorMessage: errorMessage):
|
||||
continuation.resume(throwing: BasicError.message(messageText: errorMessage))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,53 @@
|
||||
import CoreData
|
||||
import Foundation
|
||||
import Models
|
||||
import SwiftGraphQL
|
||||
|
||||
public extension DataService {
|
||||
func updateNewsletterEmail(
|
||||
emailID: String, folder: String? = nil, description: String? = nil
|
||||
) async throws -> InternalNewsletterEmail {
|
||||
enum MutationResult {
|
||||
case result(email: InternalNewsletterEmail)
|
||||
case error(errorMessage: String)
|
||||
}
|
||||
|
||||
let selection = Selection<MutationResult, Unions.UpdateNewsletterEmailResult> {
|
||||
try $0.on(
|
||||
updateNewsletterEmailError: .init { .error(errorMessage: try $0.errorCodes().first?.rawValue ?? "Unknown Error") },
|
||||
updateNewsletterEmailSuccess: .init { .result(email: try $0.newsletterEmail(selection: newsletterEmailSelection)) }
|
||||
)
|
||||
}
|
||||
|
||||
let mutation = Selection.Mutation {
|
||||
try $0.updateNewsletterEmail(
|
||||
input: InputObjects.UpdateNewsletterEmailInput(
|
||||
description: OptionalArgument(description),
|
||||
folder: OptionalArgument(folder),
|
||||
|
||||
id: emailID
|
||||
),
|
||||
selection: selection
|
||||
)
|
||||
}
|
||||
|
||||
let path = appEnvironment.graphqlPath
|
||||
let headers = networker.defaultHeaders
|
||||
|
||||
return try await withCheckedThrowingContinuation { continuation in
|
||||
send(mutation, to: path, headers: headers) { queryResult in
|
||||
guard let payload = try? queryResult.get() else {
|
||||
continuation.resume(throwing: BasicError.message(messageText: "network error"))
|
||||
return
|
||||
}
|
||||
|
||||
switch payload.data {
|
||||
case let .result(email: email):
|
||||
continuation.resume(returning: email)
|
||||
case let .error(errorMessage: errorMessage):
|
||||
continuation.resume(throwing: BasicError.message(messageText: errorMessage))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
BIN
apple/Resources/Assets.xcassets/AppIcon.appiconset/102.png
Normal file
|
After Width: | Height: | Size: 8.2 KiB |
BIN
apple/Resources/Assets.xcassets/AppIcon.appiconset/16.png
Normal file
|
After Width: | Height: | Size: 844 B |
BIN
apple/Resources/Assets.xcassets/AppIcon.appiconset/32.png
Normal file
|
After Width: | Height: | Size: 2.1 KiB |
BIN
apple/Resources/Assets.xcassets/AppIcon.appiconset/512.png
Normal file
|
After Width: | Height: | Size: 57 KiB |
BIN
apple/Resources/Assets.xcassets/AppIcon.appiconset/64.png
Normal file
|
After Width: | Height: | Size: 4.8 KiB |
BIN
apple/Resources/Assets.xcassets/AppIcon.appiconset/66.png
Normal file
|
After Width: | Height: | Size: 5.1 KiB |
BIN
apple/Resources/Assets.xcassets/AppIcon.appiconset/92.png
Normal file
|
After Width: | Height: | Size: 7.3 KiB |
1
apple/Sources/SafariExtension/Resources/scripts/api.js
Normal file
@ -0,0 +1 @@
|
||||
"use strict";function handleBackendUrl(e){try{return[/twitter\.com\/(?:#!\/)?(\w+)\/status(?:es)?\/(\d+)(?:\/.*)?/,/^((?:https?:)?\/\/)?((?:www|m)\.)?((?:youtube\.com|youtu\.be|piped\.video))(\/(?:[\w-]+\?v=|embed\/|v\/)?)([\w-]+)(\S+)?$/].some((n=>n.test(e)))}catch(n){console.log("error checking url",e)}return!1}function getStorage(e){return new Promise((n=>{browserApi.storage.local.get(e||null,(e=>{n(e||{})}))}))}function getStorageItem(e){return new Promise((n=>{browserApi.storage.local.get(e,(r=>{const o=r&&r[e]||null;n(o)}))}))}function setStorage(e){return new Promise((n=>{browserApi.storage.local.set(e,n)}))}function removeStorage(e){return new Promise((n=>{browserApi.storage.local.remove(e,n)}))}window.browserApi="object"==typeof chrome&&chrome&&chrome.runtime&&chrome||"object"==typeof browser&&browser||{},window.browserActionApi=browserApi.action||browserApi.browserAction||browserApi.pageAction,window.browserScriptingApi=browserApi.scripting||browserApi.tabs,window.ENV_EXTENSION_ORIGIN=browserApi.runtime.getURL("PATH/").replace("/PATH/",""),window.ENV_IS_FIREFOX=ENV_EXTENSION_ORIGIN.startsWith("moz-extension://"),window.ENV_IS_EDGE=navigator.userAgent.toLowerCase().indexOf("edg")>-1,window.ENV_DOES_NOT_SUPPORT_BLOB_URL_ACCESS=/^((?!chrome|android).)*safari/i.test(navigator.userAgent),window.SELECTORS={CANONICAL_URL:["head > link[rel='canonical']"],TITLE:["head > meta[property='og:title']"]},window.ACTIONS={Ping:"PING",ShowMessage:"SHOW_MESSAGE",GetContent:"GET_CONTENT",AddIframeContent:"ADD_IFRAME_CONTENT",RefreshDarkMode:"REFRESH_DARK_MODE",GetAuthToken:"GET_AUTH_TOKEN",LabelCacheUpdated:"LABEL_CACHE_UPDATED",ShowToolbar:"SHOW_TOOLBAR",UpdateStatus:"UPDATE_STATUS",AddNote:"ADD_NOTE",EditTitle:"EDIT_TITLE",SetLabels:"SET_LABELS",Archive:"ARCHIVE",Delete:"DELETE"},window.SAVE_URL_QUERY="mutation SaveUrl ($input: SaveUrlInput!) {\n saveUrl(input:$input){\n ... on SaveSuccess {\n url\n clientRequestId\n }\n ... on SaveError {\n errorCodes\n }\n }\n}",window.SAVE_FILE_QUERY="mutation SaveFile ($input: SaveFileInput!) {\n saveFile(input:$input){\n ... on SaveSuccess {\n url\n clientRequestId\n }\n ... on SaveError {\n errorCodes\n }\n }\n}",window.SAVE_PAGE_QUERY="mutation SavePage ($input: SavePageInput!) {\n savePage(input:$input){\n ... on SaveSuccess {\n url\n clientRequestId\n }\n ... on SaveError {\n errorCodes\n }\n }\n}";
|
||||
@ -0,0 +1 @@
|
||||
function saveAPIKey(){var e=document.getElementById("api-key").value;e?setStorage({apiKey:e}).then((()=>{alert("API key saved!")})):alert("No api-key specified, please create an API key at https://omnivore.app/settings/api")}function loadAPIKey(){getStorageItem("apiKey").then((e=>{e?document.getElementById("api-key").value=e:alert("No API key found in storage.")}))}function clearAPIKey(){document.getElementById("api-key").value="",setStorage({apiKey:void 0}).then((()=>{alert("API key cleared!")}))}function autoDismissChanged(e){const t=document.getElementById("disable-auto-dismiss").checked;console.log(" value: ",t,document.getElementById("disable-auto-dismiss")),setStorage({disableAutoDismiss:t?"true":null}).then((()=>{console.log("disableAutoDismiss updated",t)}))}function saveAutoDismissTime(){const e=document.getElementById("auto-dismiss-time").value;e.length<1||Number.isNaN(Number(e))?alert("Invalid value"):setStorage({autoDismissTime:e}).then((()=>{console.log("autoDismissTime updated",e)}))}document.getElementById("save-api-key-btn").addEventListener("click",saveAPIKey),document.getElementById("load-api-key-btn").addEventListener("click",loadAPIKey),document.getElementById("clear-api-key-btn").addEventListener("click",clearAPIKey),getStorageItem("disableAutoDismiss").then((e=>{document.getElementById("disable-auto-dismiss").checked=!!e})),document.getElementById("disable-auto-dismiss").addEventListener("change",autoDismissChanged),getStorageItem("autoDismissTime").then((e=>{document.getElementById("auto-dismiss-time").value=e??"2500"})),document.getElementById("auto-dismiss-time-btn").addEventListener("click",saveAutoDismissTime);
|
||||
118
apple/Sources/SafariExtension/Resources/views/installed.html
Normal file
@ -0,0 +1,118 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Data Collection Consent</title>
|
||||
<script src="/scripts/common.js"></script>
|
||||
<style>
|
||||
body {
|
||||
font-family: Arial, sans-serif;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
min-height: 100vh;
|
||||
background-color: #FFEA9F;
|
||||
}
|
||||
|
||||
#consent-container {
|
||||
max-width: 600px;
|
||||
margin: 20px;
|
||||
padding: 20px;
|
||||
border: 1px solid rgb(61, 61, 61);
|
||||
border-radius: 8px;
|
||||
background-color: #fff;
|
||||
box-shadow: rgb(177, 177, 177) 9px 9px 9px -9px;
|
||||
}
|
||||
|
||||
h1 {
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.consent-text {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.cta-container {
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
#consent-checkbox {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
#consent-button {
|
||||
background-color: rgb(255, 234, 159);
|
||||
color: black;
|
||||
padding: 10px 20px;
|
||||
border: none;
|
||||
border-radius: 5px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
#uninstall-link {
|
||||
color: #f44336;
|
||||
text-decoration: underline;
|
||||
margin-top: 10px;
|
||||
display: block;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div id="consent-container">
|
||||
<h1>Omnivore</h1>
|
||||
<p class="consent-text">Thank you for installing the <a href="https://omnivore.app">Omnivore</a> Firefox extension. Use this extension to save links to your Omnivore library.</p>
|
||||
<p class="consent-text">If you are not familiar with Omnivore, you can learn more about us by reading <a href="https://blog.omnivore.app/p/getting-started-with-omnivore">Getting Started with Omnivore</a></p>
|
||||
|
||||
<p class="consent-text"> </p>
|
||||
|
||||
<h2>Privacy</h2>
|
||||
<p class="consent-text">To function Omnivore needs to collect some data. This data is used to authenticate you with our servers, and save pages to your library.</p>
|
||||
|
||||
|
||||
<p class="consent-text">Omnivore uses the following data:</p>
|
||||
<ul>
|
||||
<li><b>Tab Data</b>: When you invoke the extension, we access the content of the page you are currently viewing. This allows us to save the full content of the page, exactly how you are viewing it. That data is then transmitted to our servers and added to your library</li>
|
||||
<li><b>Authentication cookie</b>: When you invoke the extension we access the auth cookie you used to authenticate at <a href="https://omnivore.app">https://omnivore.app</a>. This cookie identifies you as an Omnivore user and ties the saving operation to your Omnivore account.</li>
|
||||
</ul>
|
||||
<p class="consent-text">For full details about the data we collect you can read our <a href="https://docs.omnivore.app/about/privacy-statement.html">privacy statement</a></p>
|
||||
|
||||
<label for="consent-checkbox">
|
||||
<input type="checkbox" id="consent-checkbox"> I consent to data collection
|
||||
</label>
|
||||
|
||||
<br>
|
||||
<button id="consent-button" onclick="handleConsent()">Give Consent</button>
|
||||
<a id="uninstall-link" href="#">I do not consent, and would like to uninstall the extension</a>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
function handleConsent() {
|
||||
var consentCheckbox = document.getElementById('consent-checkbox');
|
||||
|
||||
if (consentCheckbox.checked) {
|
||||
setStorage({
|
||||
consentGranted: JSON.stringify(consentCheckbox.checked)
|
||||
}).then(() => {
|
||||
console.log('consent granted')
|
||||
})
|
||||
.catch((err) => {
|
||||
alert('Error setting consent: ' + err)
|
||||
})
|
||||
} else {
|
||||
alert('You must grant consent to use this extension.')
|
||||
}
|
||||
}
|
||||
|
||||
document.getElementById('uninstall-link').addEventListener('click', function (e) {
|
||||
e.preventDefault();
|
||||
let uninstallingSelf = browser.management.uninstallSelf()
|
||||
console.log('uninstall self: ', uninstallingSelf)
|
||||
});
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
52
apple/Sources/SafariExtension/Resources/views/options.html
Normal file
@ -0,0 +1,52 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Omnivore Extension Settings</title>
|
||||
<script src="/scripts/common.js"></script>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<div class='wrapper'>
|
||||
<h1>API Key</h1>
|
||||
|
||||
<p>Normally Omnivore uses an authentication cookie that is set when
|
||||
you log in at <a href='https://omnivore.app'>omnivore.app</a>. If
|
||||
your security settings do not allow the extension to access this
|
||||
cookie (for example if you are using containers), you can set an
|
||||
API token in the extension's local storage instead.
|
||||
</p>
|
||||
|
||||
<p>To do this, create an API key at
|
||||
<a href='https://omnivore.app/settings/api'>omnivore.app/settings/api</a>,
|
||||
paste it into the textboix below, and choose 'Save API Key'.
|
||||
</p>
|
||||
|
||||
<p></p>
|
||||
<label for="api-key">API Key:</label>
|
||||
<input type="text" id="api-key">
|
||||
|
||||
<br><br>
|
||||
|
||||
<button id="save-api-key-btn">Save API Key</button>
|
||||
<button id="load-api-key-btn">Load API Key</button>
|
||||
<button id="clear-api-key-btn">Clear API Key</button>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<h1>Settings</h1>
|
||||
|
||||
<p>
|
||||
<input type="checkbox" id="disable-auto-dismiss" />
|
||||
<label for="auto-dismiss">Disable Auto Dismiss</label>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<label for="auto-dismiss-time">Auto Dismiss time (ms)</label>
|
||||
<input type="text" id="auto-dismiss-time" />
|
||||
<button id="auto-dismiss-time-btn">Save</button>
|
||||
</p>
|
||||
|
||||
</div>
|
||||
<script src="/scripts/options.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
556
apple/Sources/SafariExtension/Resources/views/toast.html
Normal file
@ -0,0 +1,556 @@
|
||||
<style>
|
||||
#omnivore-toast-container {
|
||||
position: fixed;
|
||||
top: 20px;
|
||||
right: 20px;
|
||||
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
flex-wrap: wrap;
|
||||
|
||||
align-items: flex-start;
|
||||
justify-content: flex-end;
|
||||
overflow: hidden;
|
||||
border-radius: 4px;
|
||||
color: #3D3D3D;
|
||||
background: #fff;
|
||||
font: 400 12px sans-serif;
|
||||
line-height: 20px;
|
||||
box-shadow: 0px 5px 20px rgba(32, 31, 29, 0.12);
|
||||
transition: all 300ms ease;
|
||||
z-index: 9999999;
|
||||
width: 480px;
|
||||
}
|
||||
|
||||
#omnivore-toast-container input, select, textarea{
|
||||
color: #3D3D3D;
|
||||
}
|
||||
|
||||
#omnivore-toast-container .omnivore-toast-func-row {
|
||||
display: flex;
|
||||
width: 100%;
|
||||
padding-top: 0px;
|
||||
padding-left: 15px;
|
||||
padding-right: 15px;
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
|
||||
#omnivore-toast-container #omnivore-extra-buttons-row {
|
||||
padding-left: 5px;
|
||||
}
|
||||
|
||||
#omnivore-toast-container #omnivore-extra-buttons-row button {
|
||||
padding-left: 10px;
|
||||
width: 80%;
|
||||
}
|
||||
|
||||
#omnivore-toast-container #omnivore-logged-out-row {
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
#omnivore-toast-container .omnivore-toast-func-row[data-state="open"] {
|
||||
display: flex;
|
||||
}
|
||||
#omnivore-toast-container .omnivore-toast-func-row[data-state="closed"] {
|
||||
display: none;
|
||||
}
|
||||
#omnivore-toast-container .omnivore-toast-func-status {
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
justify-content: center;
|
||||
width: 100%;
|
||||
color:#898989;
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
font-size: 12px;
|
||||
line-height: 20px;
|
||||
text-align: center;
|
||||
}
|
||||
#omnivore-toast-container #omnivore-edit-labels-status {
|
||||
height: 22px;
|
||||
padding-top: 10px;
|
||||
}
|
||||
|
||||
#omnivore-toast-button-row {
|
||||
gap: 5px;
|
||||
align-items: center;
|
||||
padding-top: 7px;
|
||||
padding-bottom: 7px;
|
||||
display: flex;
|
||||
width: 100%;
|
||||
padding-left: 15px;
|
||||
padding-right: 10px;
|
||||
}
|
||||
#omnivore-toast-container button {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 8px;
|
||||
color: #898989;
|
||||
border: none;
|
||||
background-color: transparent;
|
||||
cursor: pointer;
|
||||
border-radius: 5px;
|
||||
height: 30px;
|
||||
margin-left: auto;
|
||||
}
|
||||
#omnivore-toast-container button:hover {
|
||||
color: #3B3A38;
|
||||
background-color: #EBEBEB;
|
||||
}
|
||||
#omnivore-toast-container .omnivore-save-button button {
|
||||
background-color: rgb(255, 210, 52)
|
||||
}
|
||||
#omnivore-toast-container #omnivore-toast-close-btn:hover {
|
||||
background-color: unset;
|
||||
}
|
||||
#omnivore-toast-container #omnivore-toast-close-btn svg {
|
||||
fill: #3D3D3D;
|
||||
}
|
||||
|
||||
#omnivore-toast-container #omnivore-toast-close-btn:hover > svg *,
|
||||
#omnivore-toast-container #omnivore-toast-close-btn svg:hover {
|
||||
fill: #D9D9D9;
|
||||
stroke: white;
|
||||
}
|
||||
#omnivore-toast-container svg {
|
||||
fill: #898989;
|
||||
}
|
||||
#omnivore-toast-container > svg *,
|
||||
#omnivore-toast-container svg:hover {
|
||||
fill: #3B3A38;
|
||||
}
|
||||
#omnivore-toast-container #omnivore-toast-edit-title-btn > svg * {
|
||||
fill: none;
|
||||
}
|
||||
#omnivore-toast-container #omnivore-toast-delete-btn > svg * {
|
||||
fill: none;
|
||||
}
|
||||
#omnivore-toast-container form {
|
||||
display: block;
|
||||
margin: 0px;
|
||||
}
|
||||
.omnivore-toast-divider {
|
||||
height:20px;
|
||||
border-right: 1px solid #D9D9D9;
|
||||
}
|
||||
.omnivore-toast-statusBox {
|
||||
display: flex;
|
||||
width: 20px;
|
||||
margin-left: 0px;
|
||||
margin-right: 7px;
|
||||
}
|
||||
|
||||
#omnivore-edit-title-row {
|
||||
flex-direction: column;
|
||||
visibility: unset;
|
||||
padding-top: 20px;
|
||||
height: 100%;
|
||||
gap: 10px;
|
||||
}
|
||||
|
||||
#omnivore-edit-title-row textarea {
|
||||
width: 100%;
|
||||
height: 100px;
|
||||
padding: 5px;
|
||||
resize: none;
|
||||
border: 1px solid #8E8E93;
|
||||
border-radius: 4px;
|
||||
box-sizing: border-box;
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
#omnivore-add-note-row {
|
||||
flex-direction: column;
|
||||
visibility: unset;
|
||||
padding-top: 20px;
|
||||
height: 100%;
|
||||
gap: 10px;
|
||||
}
|
||||
|
||||
#omnivore-add-note-row textarea {
|
||||
width: 100%;
|
||||
height: 100px;
|
||||
padding: 5px;
|
||||
resize: none;
|
||||
border: 1px solid #8E8E93;
|
||||
border-radius: 4px;
|
||||
box-sizing: border-box;
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
#omnivore-toast-container .omnivore-toast-func-row button {
|
||||
height: 30px;
|
||||
padding: 15px;
|
||||
margin-left: auto;
|
||||
background-color: #FFEA9F;
|
||||
}
|
||||
|
||||
#omnivore-edit-labels-row {
|
||||
flex-direction: column;
|
||||
visibility: unset;
|
||||
padding-top: 20px;
|
||||
height: 100%;
|
||||
gap: 10px;
|
||||
}
|
||||
|
||||
#omnivore-edit-labels-row input {
|
||||
width: 100%;
|
||||
height: 34px;
|
||||
padding: 10px;
|
||||
border: 1px solid #8E8E93;
|
||||
border-radius: 4px;
|
||||
box-sizing: border-box;
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
#omnivore-extra-buttons-row {
|
||||
flex-direction: column;
|
||||
padding-top: 5px;
|
||||
padding-bottom: 10px;
|
||||
gap: 5px;
|
||||
}
|
||||
|
||||
#omnivore-toast-container #omnivore-extra-buttons-row button {
|
||||
align-self: flex-start;
|
||||
padding: 10px;
|
||||
margin: 0px;
|
||||
background-color: transparent;
|
||||
border-radius: 5px;
|
||||
}
|
||||
|
||||
#omnivore-toast-container #omnivore-extra-buttons-row button:hover {
|
||||
background-color: #EBEBEB;
|
||||
}
|
||||
|
||||
#omnivore-toast-container #omnivore-edit-labels-list button:hover {
|
||||
background-color: #EBEBEB;
|
||||
}
|
||||
|
||||
#omnivore-edit-labels-list {
|
||||
overflow-y: scroll;
|
||||
max-height: 200px;
|
||||
gap: 5px;
|
||||
color: #3B3A38;
|
||||
margin-top: 0px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
#omnivore-toast-container #omnivore-edit-labels-list button {
|
||||
height: 35px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding-left: 10px;
|
||||
padding-right: 10px;
|
||||
border-bottom: 1px solid #EEEEEE;
|
||||
border-radius: 0px;
|
||||
width: 100%;
|
||||
background: unset;
|
||||
}
|
||||
|
||||
#omnivore-toast-container #omnivore-edit-labels-list button[data-label-selected="on"] .checkbox {
|
||||
visibility: visible;
|
||||
}
|
||||
|
||||
#omnivore-toast-container #omnivore-edit-labels-list button[data-label-selected="off"] .checkbox {
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
|
||||
#omnivore-toast-container #omnivore-edit-labels-list button:focus-visible {
|
||||
outline: unset;
|
||||
border-radius: 5px;
|
||||
background-color: #EBEBEB;
|
||||
}
|
||||
|
||||
#omnivore-edit-labels-list div:hover {
|
||||
background-color: #EBEBEB;
|
||||
}
|
||||
#omnivore-edit-labels-row form {
|
||||
margin-bottom: unset;
|
||||
}
|
||||
|
||||
#omnivore-add-note-row textarea:focus-visible {
|
||||
border-color: #2f81f7;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
#omnivore-edit-labels-row input, select, textarea:focus-visible {
|
||||
border-color: #2f81f7;
|
||||
outline: none;
|
||||
}
|
||||
#omnivore-edit-title-row textarea:focus-visible {
|
||||
border-color: #2f81f7;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
.omnivore-toast-menu-divider {
|
||||
border-bottom: 1px solid #D9D9D9;
|
||||
width: 80%;
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
#omnivore-toast-container {
|
||||
background: #333333;
|
||||
}
|
||||
#omnivore-toast-container input, select, textarea{
|
||||
color: #D9D9D9;
|
||||
}
|
||||
.omnivore-toast-divider {
|
||||
border-right: 1px solid #898989;
|
||||
}
|
||||
#omnivore-toast-container svg {
|
||||
fill: #898989;
|
||||
}
|
||||
.omnivore-save-button button {
|
||||
margin-top: 10px;
|
||||
color: #333333;
|
||||
}
|
||||
#omnivore-toast-container #omnivore-edit-labels-list button {
|
||||
color: #898989;
|
||||
}
|
||||
#omnivore-toast-container button:hover > svg *,
|
||||
#omnivore-toast-container button:hover {
|
||||
color: #D9D9D9;
|
||||
fill: #D9D9D9;
|
||||
background-color: #2A2A2A;
|
||||
}
|
||||
#omnivore-toast-container #omnivore-edit-labels-list button:hover {
|
||||
color: #D9D9D9;
|
||||
background-color: #2A2A2A;
|
||||
}
|
||||
#omnivore-toast-container #omnivore-extra-buttons-row button:hover {
|
||||
background-color: #2A2A2A;
|
||||
}
|
||||
#omnivore-toast-container #omnivore-edit-labels-list button {
|
||||
border-bottom: 1px solid #898989;
|
||||
}
|
||||
#omnivore-toast-container #omnivore-toast-edit-title-btn > svg * {
|
||||
fill: none;
|
||||
}
|
||||
#omnivore-toast-container #omnivore-toast-delete-btn > svg * {
|
||||
fill: none;
|
||||
}
|
||||
.omnivore-toast-menu-divider {
|
||||
border-bottom: 1px solid #898989;
|
||||
}
|
||||
|
||||
}
|
||||
</style>
|
||||
<style>
|
||||
.label-editor {
|
||||
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
|
||||
|
||||
display: inline-block;
|
||||
background-color: var(--colors-thBackground2);
|
||||
border: 1px solid transparent;
|
||||
border-radius: 6px;
|
||||
padding: 5px;
|
||||
line-height: 2;
|
||||
cursor: text;
|
||||
font-size: 12px;
|
||||
width: calc(100% - 10px);
|
||||
min-height: 28px;
|
||||
}
|
||||
|
||||
.label-list {
|
||||
flex-wrap: wrap;
|
||||
justify-content: start;
|
||||
display: flex;
|
||||
width: 100%;
|
||||
align-items: center;
|
||||
padding: 0px;
|
||||
box-sizing: border-box;
|
||||
height: auto;
|
||||
flex: 0 0 auto;
|
||||
overflow-y: auto;
|
||||
margin: 0;
|
||||
list-style: none;
|
||||
gap: 5px;
|
||||
}
|
||||
|
||||
#omnivore-toast-container .omnivore-toast-func-row .label-remove-button {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
color: transparent;
|
||||
border: none;
|
||||
background-color: transparent;
|
||||
cursor: pointer;
|
||||
padding: 0px;
|
||||
}
|
||||
|
||||
#omnivore-edit-labels-row .label-input {
|
||||
box-sizing: content-box;
|
||||
font-size: 16px;
|
||||
min-width: 2px;
|
||||
border: none;
|
||||
outline: none;
|
||||
padding: 0px;
|
||||
height: 28px;
|
||||
}
|
||||
|
||||
.label {
|
||||
display: inline-table;
|
||||
padding: 1px;
|
||||
padding-left: 7px;
|
||||
padding-right: 7px;
|
||||
border-radius: 5px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 5px;
|
||||
border: 1px solid rgb(222, 222, 222);
|
||||
background-color: rgb(249, 249, 249);
|
||||
}
|
||||
|
||||
#omnivore-toast-container .omnivore-toast-func-row .label button {
|
||||
height: unset;
|
||||
}
|
||||
|
||||
.label[data-label-backspaced="on"] {
|
||||
border: 1px solid rgb(255, 234, 159);
|
||||
}
|
||||
|
||||
.label[data-item-highlighted="on"] {
|
||||
border: 1px solid black;
|
||||
transition: border-color 0.25s linear;
|
||||
}
|
||||
|
||||
</style>
|
||||
<div id="omnivore-toast-container">
|
||||
<div id="omnivore-toast-button-row">
|
||||
<span class="omnivore-toast-statusBox">
|
||||
<style>
|
||||
.loading-spinner {
|
||||
/* control spinner size with setting font-size */
|
||||
font-size: 3rem;
|
||||
border: 2px solid #FFD234;
|
||||
border-top-color: transparent;
|
||||
border-radius: 50%;
|
||||
width: 18px;
|
||||
height: 18px;
|
||||
animation: loading-spinner 1.5s linear infinite;
|
||||
margin: 0 auto;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
@keyframes loading-spinner {
|
||||
0% {
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
100% {
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<div class="loading-spinner"></div>
|
||||
</span>
|
||||
<span class="omnivore-toast-divider"></span>
|
||||
|
||||
<button class="omnivore-top-button" id="omnivore-toast-add-note-btn">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 256 256">
|
||||
<path d="M88,96a8,8,0,0,1,8-8h64a8,8,0,0,1,0,16H96A8,8,0,0,1,88,96Zm8,40h64a8,8,0,0,0,0-16H96a8,8,0,0,0,0,16Zm32,16H96a8,8,0,0,0,0,16h32a8,8,0,0,0,0-16ZM224,48V156.69A15.86,15.86,0,0,1,219.31,168L168,219.31A15.86,15.86,0,0,1,156.69,224H48a16,16,0,0,1-16-16V48A16,16,0,0,1,48,32H208A16,16,0,0,1,224,48ZM48,208H152V160a8,8,0,0,1,8-8h48V48H48Zm120-40v28.7L196.69,168Z"></path>
|
||||
</svg>
|
||||
<span class="omnivore-top-button-label">Add Note</span>
|
||||
</button>
|
||||
<span class="omnivore-toast-divider"></span>
|
||||
|
||||
<button id="omnivore-toast-edit-labels-btn">
|
||||
<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M8.99031 14.9786L15.3061 8.67029C15.3757 8.6002 15.4307 8.51707 15.468 8.42568C15.5053 8.33429 15.5242 8.23643 15.5237 8.13772L15.5237 1.38683C15.5237 1.18789 15.4446 0.997101 15.304 0.85643C15.1633 0.715759 14.9725 0.636731 14.7736 0.636731L8.02269 0.636731C7.92397 0.63616 7.82611 0.655082 7.73472 0.69241C7.64333 0.729738 7.5602 0.784739 7.49012 0.85426L1.18179 7.17009C0.76038 7.59202 0.523681 8.16397 0.523681 8.7603C0.523681 9.35663 0.76038 9.92857 1.18179 10.3505L5.77239 14.9786C6.19432 15.4 6.76627 15.6367 7.3626 15.6367C7.95893 15.6367 8.53087 15.4 8.95281 14.9786L8.99031 14.9786ZM6.87503 13.921L2.24693 9.28536C2.10722 9.14482 2.0288 8.95471 2.0288 8.75655C2.0288 8.55838 2.10722 8.36827 2.24693 8.22773L8.33022 2.13693L14.0235 2.13693L14.0235 7.83018L7.93267 13.921C7.86258 13.9905 7.77946 14.0455 7.68807 14.0828C7.59668 14.1202 7.49882 14.1391 7.4001 14.1385C7.20332 14.1377 7.01475 14.0595 6.87503 13.921Z" />
|
||||
<circle cx="10.8818" cy="5.48069" r="1.24925" />
|
||||
</svg>
|
||||
<span class="omnivore-top-button-label">Set Labels</span>
|
||||
</button>
|
||||
<span class="omnivore-toast-divider"></span>
|
||||
|
||||
<button id="omnivore-toast-read-now-btn">
|
||||
<svg width="18" height="15" viewBox="0 0 18 15" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M17.1272 0.939454H12.6584C11.6995 0.939454 10.762 1.21484 9.95532 1.73438L9.0022 2.3457L8.04907 1.73438C7.24323 1.21494 6.30469 0.938941 5.34595 0.939454H0.877197C0.531494 0.939454 0.252197 1.21875 0.252197 1.56445V12.6582C0.252197 13.0039 0.531494 13.2832 0.877197 13.2832H5.34595C6.30493 13.2832 7.24243 13.5586 8.04907 14.0781L8.91626 14.6367C8.94165 14.6523 8.97095 14.6621 9.00024 14.6621C9.02954 14.6621 9.05884 14.6543 9.08423 14.6367L9.95142 14.0781C10.76 13.5586 11.6995 13.2832 12.6584 13.2832H17.1272C17.4729 13.2832 17.7522 13.0039 17.7522 12.6582V1.56445C17.7522 1.21875 17.4729 0.939454 17.1272 0.939454ZM5.34595 11.877H1.65845V2.3457H5.34595C6.03735 2.3457 6.70923 2.54297 7.28931 2.91602L8.24243 3.52734L8.3772 3.61523V12.6387C7.44751 12.1387 6.40845 11.877 5.34595 11.877ZM16.3459 11.877H12.6584C11.5959 11.877 10.5569 12.1387 9.6272 12.6387V3.61523L9.76196 3.52734L10.7151 2.91602C11.2952 2.54297 11.967 2.3457 12.6584 2.3457H16.3459V11.877ZM6.75415 4.8457H3.12524C3.04907 4.8457 2.98657 4.91211 2.98657 4.99219V5.87109C2.98657 5.95117 3.04907 6.01758 3.12524 6.01758H6.7522C6.82837 6.01758 6.89087 5.95117 6.89087 5.87109V4.99219C6.89282 4.91211 6.83032 4.8457 6.75415 4.8457ZM11.1116 4.99219V5.87109C11.1116 5.95117 11.1741 6.01758 11.2502 6.01758H14.8772C14.9534 6.01758 15.0159 5.95117 15.0159 5.87109V4.99219C15.0159 4.91211 14.9534 4.8457 14.8772 4.8457H11.2502C11.1741 4.8457 11.1116 4.91211 11.1116 4.99219ZM6.75415 7.58008H3.12524C3.04907 7.58008 2.98657 7.64648 2.98657 7.72656V8.60547C2.98657 8.68555 3.04907 8.75195 3.12524 8.75195H6.7522C6.82837 8.75195 6.89087 8.68555 6.89087 8.60547V7.72656C6.89282 7.64648 6.83032 7.58008 6.75415 7.58008ZM14.8792 7.58008H11.2502C11.1741 7.58008 11.1116 7.64648 11.1116 7.72656V8.60547C11.1116 8.68555 11.1741 8.75195 11.2502 8.75195H14.8772C14.9534 8.75195 15.0159 8.68555 15.0159 8.60547V7.72656C15.0178 7.64648 14.9553 7.58008 14.8792 7.58008Z" />
|
||||
</svg>
|
||||
<span class="omnivore-top-button-label">Read Now</span>
|
||||
</button>
|
||||
<span class="omnivore-toast-divider"></span>
|
||||
|
||||
<button id="omnivore-open-menu-btn">
|
||||
<svg width="15" height="4" viewBox="0 0 15 4" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<ellipse cx="1.48679" cy="1.79492" rx="1.4846" ry="1.5" />
|
||||
<ellipse cx="7.00217" cy="1.79492" rx="1.4846" ry="1.5" />
|
||||
<ellipse cx="7.00217" cy="1.79492" rx="1.4846" ry="1.5" />
|
||||
<ellipse cx="12.5176" cy="1.79492" rx="1.4846" ry="1.5" />
|
||||
</svg>
|
||||
</button>
|
||||
<span class="omnivore-toast-divider"></span>
|
||||
|
||||
<button id="omnivore-toast-close-btn">
|
||||
<svg width="19" height="19" viewBox="0 0 19 19" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<circle cx="9.50049" cy="9.52783" r="9" />
|
||||
<path d="M12.554 11.874L12.554 11.874L10.2075 9.52783L12.554 7.18165L12.554 7.18164C12.6478 7.08785 12.7005 6.96063 12.7005 6.82798C12.7005 6.69533 12.6478 6.56812 12.554 6.47432C12.4602 6.38053 12.333 6.32783 12.2003 6.32783C12.0677 6.32783 11.9405 6.38053 11.8467 6.47432L11.8467 6.47433L9.50049 8.82087L7.15431 6.47433L7.1543 6.47432C7.0605 6.38053 6.93329 6.32783 6.80064 6.32783C6.66799 6.32783 6.54078 6.38053 6.44698 6.47432C6.35318 6.56812 6.30049 6.69533 6.30049 6.82798C6.30049 6.96063 6.35318 7.08785 6.44698 7.18164L6.44699 7.18165L8.79352 9.52783L6.44699 11.874L6.44698 11.874C6.35318 11.9678 6.30049 12.095 6.30049 12.2277C6.30049 12.3603 6.35318 12.4875 6.44698 12.5813C6.54078 12.6751 6.66799 12.7278 6.80064 12.7278C6.93329 12.7278 7.0605 12.6751 7.1543 12.5813L7.15431 12.5813L9.50049 10.2348L11.8467 12.5813L11.8467 12.5813C11.8931 12.6278 11.9483 12.6646 12.0089 12.6898C12.0696 12.7149 12.1347 12.7278 12.2003 12.7278C12.266 12.7278 12.3311 12.7149 12.3917 12.6898C12.4524 12.6646 12.5076 12.6278 12.554 12.5813C12.6004 12.5349 12.6373 12.4798 12.6624 12.4191C12.6876 12.3584 12.7005 12.2934 12.7005 12.2277C12.7005 12.162 12.6876 12.097 12.6624 12.0363C12.6373 11.9756 12.6004 11.9205 12.554 11.874Z" fill="#EBEBEB" stroke="#EBEBEB" stroke-width="0.4"/>
|
||||
</svg>
|
||||
</button>
|
||||
|
||||
</div>
|
||||
|
||||
<div id="omnivore-add-note-row" class="omnivore-toast-func-row" data-state="closed">
|
||||
<span id="omnivore-add-note-status" class="omnivore-toast-func-status"></span>
|
||||
<form id="omnivore-add-note-form">
|
||||
<textarea id="omnivore-add-note-textarea" name="title"></textarea>
|
||||
<button class="omnivore-save-button">Save</button>
|
||||
</form>
|
||||
</div>
|
||||
<div id="omnivore-edit-title-row" class="omnivore-toast-func-row" data-state="closed">
|
||||
<span id="omnivore-edit-title-status" class="omnivore-toast-func-status"></span>
|
||||
<form id="omnivore-edit-title-form">
|
||||
<textarea id="omnivore-edit-title-textarea" name="title"></textarea>
|
||||
<button class="omnivore-save-button">Save</button>
|
||||
</form>
|
||||
</div>
|
||||
<div id="omnivore-edit-labels-row" class="omnivore-toast-func-row" data-state="closed">
|
||||
<form id="omnivore-edit-labels-form">
|
||||
<div id="omnivore-edit-label-editor" class="label-editor">
|
||||
<ul id="label-list" class="label-list">
|
||||
<li id="label-entry-item">
|
||||
<input type="text" id="omnivore-edit-label-input" placeholder="Add a label..." maxlength="48" class="label-input">
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<span id="omnivore-edit-labels-status" class="omnivore-toast-func-status"></span>
|
||||
<div id="omnivore-edit-labels-list"></div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div id="omnivore-extra-buttons-row" class="omnivore-toast-func-row" data-state="closed">
|
||||
<span id="omnivore-extra-status" class="omnivore-toast-func-status"></span>
|
||||
<button id="omnivore-toast-edit-title-btn">
|
||||
<svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M9.5625 4.50004L13.5 8.43754M6.71406 15.1516L2.84828 11.2858M6.517 15.1875H3.375C3.22582 15.1875 3.08274 15.1283 2.97725 15.0228C2.87176 14.9173 2.8125 14.7742 2.8125 14.625V11.483C2.8125 11.4092 2.82705 11.336 2.85532 11.2678C2.88359 11.1995 2.92502 11.1375 2.97725 11.0853L11.4148 2.64778C11.5202 2.5423 11.6633 2.48303 11.8125 2.48303C11.9617 2.48303 12.1048 2.5423 12.2102 2.64778L15.3523 5.78979C15.4577 5.89528 15.517 6.03835 15.517 6.18754C15.517 6.33672 15.4577 6.4798 15.3523 6.58528L6.91475 15.0228C6.86252 15.075 6.80051 15.1165 6.73226 15.1447C6.66402 15.173 6.59087 15.1875 6.517 15.1875Z" stroke="#6A6968" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
Edit Title
|
||||
</button>
|
||||
<span class="omnivore-toast-menu-divider"></span>
|
||||
<button id="omnivore-toast-archive-btn">
|
||||
<svg width="18" height="16" viewBox="0 0 18 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M16.0143 0.166748H1.93155C1.157 0.166748 0.523193 0.800512 0.523193 1.5751V3.92222C0.523193 4.6264 1.03956 5.18958 1.69675 5.30698V14.0148C1.69675 14.7893 2.33052 15.4231 3.10511 15.4231H14.8407C15.6152 15.4231 16.249 14.7894 16.249 14.0148V5.30698C16.9062 5.18959 17.4226 4.6264 17.4226 3.92222V1.5751C17.4226 0.800554 16.7888 0.166748 16.0143 0.166748ZM1.93155 1.5751H16.0143V3.92222H1.93155V1.5751ZM14.8407 14.0148H3.10511V5.33049H14.8407V14.0148Z" fill="#6A6968"/>
|
||||
<path d="M7.82307 8.26431H10.1702C10.5692 8.26431 10.8744 7.95914 10.8744 7.56013C10.8744 7.16114 10.5692 6.85596 10.1702 6.85596H7.82307C7.42408 6.85596 7.1189 7.16113 7.1189 7.56013C7.1189 7.95912 7.44748 8.26431 7.82307 8.26431Z" fill="#6A6968"/>
|
||||
</svg>
|
||||
Archive
|
||||
</button>
|
||||
<span class="omnivore-toast-menu-divider"></span>
|
||||
<button id="omnivore-toast-delete-btn">
|
||||
<svg width="20" height="21" viewBox="0 0 20 21" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M16.6602 5.16992L3.51147 5.16993" stroke="#6A6968" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M8.29272 8.91992V13.9199" stroke="#6A6968" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M11.8787 8.91992V13.9199" stroke="#6A6968" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M7.09741 2.66992H13.0741" stroke="#6A6968" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M15.4648 5.16993V17.0449C15.4648 17.2107 15.4018 17.3697 15.2897 17.4869C15.1777 17.6041 15.0256 17.6699 14.8671 17.6699H5.30445C5.14594 17.6699 4.99392 17.6041 4.88184 17.4869C4.76976 17.3697 4.70679 17.2107 4.70679 17.0449V5.16992" stroke="#6A6968" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
Delete
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div id="omnivore-logged-out-row" class="omnivore-toast-func-row" data-state="closed">
|
||||
<span id="omnivore-logged-out-status" class="omnivore-toast-func-status"></span>
|
||||
<a href="" id="omnivore-toast-login-btn">Login to Omnivore</a>
|
||||
</div>
|
||||
</div>
|
||||