Skip to content

Commit 8d95b7b

Browse files
committed
feat: add decorator settings for CodeMirror.
1 parent 0f760e3 commit 8d95b7b

File tree

6 files changed

+531
-315
lines changed

6 files changed

+531
-315
lines changed

Example/Example/ContentView.swift

Lines changed: 44 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -34,59 +34,67 @@ let jsonString = """
3434
"""
3535

3636
struct ContentView: View {
37-
@ObservedObject var vm: CodeMirrorVM = .init()
37+
@State var value: String = jsonString
38+
@State var lineWrapping = false
39+
@State var lineNumber = true
40+
@State var readOnly = false
41+
@State var language: Language = .json
42+
@State var theme: Themes = .vscodedark
43+
@State var count: Int = 0
3844
var body: some View {
3945
VStack {
40-
CodeMirror(vm)
41-
.frame(maxWidth: .infinity, maxHeight: .infinity)
42-
.navigationTitle("Example")
43-
.onAppear {
44-
vm.setContent(jsonString)
46+
// ScrollView {
47+
// Text(value)
48+
// }
49+
// .frame(height: 120)
50+
CodeMirror(value: $value)
51+
.cmLineNumber($lineNumber)
52+
.cmLineWrapping($lineWrapping)
53+
.cmReadOnly($readOnly)
54+
.cmLanguage($language)
55+
.cmTheme($theme)
56+
.onLoadSuccess() {
57+
print("Hello!")
58+
}
59+
.onLoadFailed { error in
60+
print("@@@2 \(#function) \(error)")
4561
}
46-
.toolbar {
47-
ToolbarItem {
48-
Toggle(isOn: $vm.lineNumber, label: { Text("Line Number") })
62+
.onContentChange {
63+
print("@@@3 Content Did Change")
64+
}
65+
.frame(maxWidth: .infinity, maxHeight: .infinity)
66+
.safeAreaInset(edge: .bottom, spacing: 0) {
67+
HStack {
68+
Toggle(isOn: $lineNumber, label: { Text("Line Number") })
4969
.toggleStyle(.checkbox)
50-
}
51-
ToolbarItem {
52-
Toggle(isOn: $vm.lineWrapping, label: { Text("Line Wrapping") })
70+
Toggle(isOn: $lineWrapping, label: { Text("Line Wrapping") })
5371
.toggleStyle(.checkbox)
54-
}
55-
ToolbarItem {
56-
Button {
57-
Task {
58-
let content = try? await vm.getContent()
59-
print(content ?? "")
60-
}
61-
} label: {
62-
Text("GET")
63-
}
64-
}
65-
ToolbarItem {
6672
Button {
67-
vm.setContent("Hello World!")
73+
count += 1
74+
value = "Hello World! \(count)"
6875
} label: {
6976
Text("SET")
7077
}
71-
}
72-
ToolbarItem {
73-
Toggle(isOn: $vm.readOnly, label: { Text("Read Only") })
78+
Toggle(isOn: $readOnly, label: { Text("Read Only") })
7479
.toggleStyle(.checkbox)
75-
}
76-
ToolbarItem {
77-
Picker("Lang", selection: $vm.language) {
80+
Spacer()
81+
Picker("Lang", selection: $language) {
7882
ForEach(Language.allCases, id: \.rawValue) {
79-
Text($0.rawValue).tag($0)
83+
Text("Lang: \($0.rawValue)").tag($0)
8084
}
8185
}
82-
}
83-
ToolbarItem {
84-
Picker("Theme", selection: $vm.theme) {
86+
.labelsHidden()
87+
.frame(width: 134)
88+
Picker("Theme", selection: $theme) {
8589
ForEach(Themes.allCases, id: \.rawValue) {
86-
Text($0.rawValue).tag($0)
90+
Text("Theme: \($0.rawValue)").tag($0)
8791
}
8892
}
93+
.labelsHidden()
94+
.frame(width: 140)
8995
}
96+
.padding(.horizontal, 6)
97+
.padding(.vertical, 6)
9098
}
9199
}
92100
}

Package.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ let package = Package(
77
name: "CodeMirror",
88
platforms: [
99
.iOS(.v14),
10-
.macOS(.v11),
10+
.macOS(.v14),
1111
],
1212
products: [
1313
.library(

README.md

Lines changed: 127 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -65,34 +65,135 @@ dependencies: [
6565

6666
## Usage
6767

68-
### Basic Usage
68+
### CodeMirror
69+
70+
```swift
71+
import SwiftUI
72+
import CodeMirror
73+
74+
struct ContentView: View {
75+
@State var value: String = ""
76+
var body: some View {
77+
CodeMirror(value: $value)
78+
.onLoadSuccess() {
79+
print("Hello!")
80+
}
81+
.onLoadFailed { error in
82+
print("@@@2 \(#function) \(error)")
83+
}
84+
.onContentChange {
85+
print("@@@3 Content Did Change")
86+
}
87+
}
88+
}
89+
```
90+
91+
**Set Theme**
92+
93+
```swift
94+
struct ContentView: View {
95+
@State var value: String = ""
96+
var body: some View {
97+
CodeMirror(value: $value)
98+
}
99+
}
100+
```
101+
102+
**Set Line Wrapping**
103+
104+
```swift
105+
struct ContentView: View {
106+
@State var lineWrapping = false
107+
@State var value: String = ""
108+
var body: some View {
109+
CodeMirror(value: $value)
110+
.cmLineWrapping($lineWrapping)
111+
}
112+
}
113+
```
114+
115+
**Show Line Numbers**
116+
117+
```swift
118+
struct ContentView: View {
119+
@State var lineNumber = true
120+
@State var value: String = ""
121+
var body: some View {
122+
CodeMirror(value: $value)
123+
.cmLineNumber($lineNumber)
124+
}
125+
}
126+
```
127+
128+
**Set Editor Read-Only**
129+
130+
```swift
131+
struct ContentView: View {
132+
@State var readOnly = false
133+
@State var value: String = ""
134+
var body: some View {
135+
CodeMirror(value: $value)
136+
.cmReadOnly($readOnly)
137+
}
138+
}
139+
```
140+
141+
**Set Programming Language**
142+
143+
```swift
144+
struct ContentView: View {
145+
@State var language: Language = .json
146+
@State var value: String = ""
147+
var body: some View {
148+
CodeMirror(value: $value)
149+
.cmLanguage($language)
150+
}
151+
}
152+
```
153+
154+
**Set Theme**
155+
156+
```swift
157+
struct ContentView: View {
158+
@State var theme: Themes = .vscodelight
159+
@State var value: String = ""
160+
var body: some View {
161+
CodeMirror(value: $value)
162+
.cmTheme($theme)
163+
}
164+
}
165+
```
166+
167+
### CodeMirrorView
69168

70169
```swift
71170
import SwiftUI
72171
import CodeMirror
73172

74173
struct ContentView: View {
75174
@ObservedObject var vm: CodeMirrorVM = .init()
175+
@State var value: String = ""
76176
var body: some View {
77-
CodeMirror(vm)
177+
CodeMirrorView(vm, value: $value)
78178
.onAppear {
79179
vm.setContent(jsonString)
80180
}
81181
}
82182
}
83183
```
84184

85-
### Set Theme
185+
**Set Theme**
86186

87187
```swift
88188
import SwiftUI
89189
import CodeMirror
90190

91191
struct ContentView: View {
92192
@ObservedObject var vm: CodeMirrorVM = .init()
193+
@State var value: String = ""
93194
var body: some View {
94195
VStack {
95-
CodeMirror(vm)
196+
CodeMirrorView(vm, value: $value)
96197
.onAppear {
97198
vm.setContent(jsonString)
98199
}
@@ -106,7 +207,7 @@ struct ContentView: View {
106207
}
107208
```
108209

109-
### Set Programming Language
210+
**Set Programming Language**
110211

111212
```swift
112213
Picker("Lang", selection: $vm.language) {
@@ -120,7 +221,7 @@ Picker("Lang", selection: $vm.language) {
120221
vm.language = .json
121222
```
122223

123-
### Set Editor Content
224+
**Set Editor Content**
124225

125226
```swift
126227
Button {
@@ -130,7 +231,7 @@ Button {
130231
}
131232
```
132233

133-
### Get Editor Text Content
234+
**Get Editor Text Content**
134235

135236
```swift
136237
Button {
@@ -143,14 +244,14 @@ Button {
143244
}
144245
```
145246

146-
### Set Editor Read-Only
247+
**Set Editor Read-Only**
147248

148249
```swift
149250
Toggle(isOn: $vm.readOnly, label: { Text("Read Only") })
150251
.toggleStyle(.checkbox)
151252
```
152253

153-
### Show Line Numbers
254+
**Show Line Numbers**
154255

155256
```swift
156257
ToolbarItem {
@@ -159,7 +260,7 @@ ToolbarItem {
159260
}
160261
```
161262

162-
### Set Line Wrapping
263+
**Set Line Wrapping**
163264

164265
```swift
165266
ToolbarItem {
@@ -168,6 +269,22 @@ ToolbarItem {
168269
}
169270
```
170271

272+
**Event**
273+
274+
```swift
275+
@ObservedObject var vm: CodeMirrorVM = .init(
276+
onLoadSuccess: {
277+
print("@@@1 \(#function)")
278+
},
279+
onLoadFailed: { error in
280+
print("@@@2 \(#function) \(error)")
281+
},
282+
onContentChange: {
283+
print("@@@3 Content Did Change")
284+
}
285+
)
286+
```
287+
171288
## Acknowledgments
172289

173290
Thanks to these projects:

0 commit comments

Comments
 (0)