Skip to content

Commit 0402e06

Browse files
committed
feat: Add placeholder hint to the editor.
1 parent 58dca9f commit 0402e06

File tree

7 files changed

+25
-19
lines changed

7 files changed

+25
-19
lines changed

Example/Example/ContentView.swift

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -50,11 +50,12 @@ struct ContentView: View {
5050
}
5151
var body: some View {
5252
VStack(spacing: 0) {
53+
TextField("Placeholder", text: $textForTextField)
5354
// ScrollView {
5455
// Text(value)
5556
// }
5657
// .frame(height: 120)
57-
CodeMirror(value: $value)
58+
CodeMirror(value: $value, prompt: String(localized: "Please enter text"))
5859
.cmLineNumber($lineNumber)
5960
.cmLineWrapping($lineWrapping)
6061
.cmFoldGutter($foldGutter)
@@ -99,26 +100,11 @@ struct ContentView: View {
99100
} label: {
100101
Text("SET")
101102
}
102-
Button {
103-
self.input = .output
104-
} label: {
105-
Text("Focused1")
106-
}
107103
Button {
108104
self.input = .text
109105
} label: {
110106
Text("Focused text")
111107
}
112-
Button {
113-
self.input = .test
114-
} label: {
115-
Text("Focused3")
116-
}
117-
Button {
118-
self.input = nil
119-
} label: {
120-
Text("Focused4")
121-
}
122108
Spacer()
123109
Picker("Lang", selection: $language) {
124110
ForEach(Language.allCases, id: \.rawValue) {

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ import CodeMirror
7474
struct ContentView: View {
7575
@State var value: String = ""
7676
var body: some View {
77+
CodeMirror(value: $value, prompt: String(localized: "Please enter text"))
7778
CodeMirror(value: $value)
7879
.onLoadSuccess() {
7980
print("Hello!")

Sources/CodeMirror/CodeMirror.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,9 @@ public struct CodeMirror: View {
1111
@ObservedObject var vm: CodeMirrorVM = .init()
1212
@Binding var value: String
1313
@FocusState private var isFocused: Bool
14-
public init(value: Binding<String>) {
14+
public init(value: Binding<String>, prompt: String = "") {
1515
self._value = value
16+
self.vm.placeholder = prompt
1617
}
1718
public var body: some View {
1819
CodeMirrorView(vm, value: $value)

Sources/CodeMirror/CodeMirrorVM.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ public class CodeMirrorVM: ObservableObject {
9090
@Published public var enabledSearch = false
9191
@Published public var language: Language = .json
9292
@Published public var theme: Themes = .vscodelight
93+
@Published public var placeholder: String = ""
9394

9495
@Published public var focused = false
9596

@@ -105,6 +106,7 @@ public class CodeMirrorVM: ObservableObject {
105106
foldGutter: Bool = false,
106107
readOnly: Bool = false,
107108
enabledSearch: Bool = false,
109+
placeholder: String = "",
108110
language: Language = .json,
109111
theme: Themes = .vscodedark
110112
) {
@@ -113,6 +115,7 @@ public class CodeMirrorVM: ObservableObject {
113115
self.foldGutter = foldGutter
114116
self.readOnly = readOnly
115117
self.enabledSearch = enabledSearch
118+
self.placeholder = placeholder
116119
self.language = language
117120
self.theme = theme
118121
}

Sources/CodeMirror/CodeMirrorView.swift

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,12 @@ public struct CodeMirrorView: NativeView {
113113
args: ["value": vm.language.rawValue]
114114
)
115115
)
116+
context.coordinator.queueJavascriptFunction(
117+
JavascriptFunction(
118+
functionString: "CodeMirror.setPlaceholder(value)",
119+
args: ["value": vm.placeholder]
120+
)
121+
)
116122
context.coordinator.queueJavascriptFunction(
117123
JavascriptFunction(
118124
functionString: vm.focused == true ? "CodeMirror.setFocus()" : "CodeMirror.setBlur()",

Sources/CodeMirror/web.bundle/codemirror.bundle.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

codemirrorjs/codemirror.js

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import * as CodeMirror from "codemirror";
22
import { Compartment, EditorState } from "@codemirror/state";
3-
import { EditorView } from "@codemirror/view";
3+
import { EditorView, placeholder } from "@codemirror/view";
44
import { indentWithTab } from "@codemirror/commands";
55
import { StreamLanguage } from '@codemirror/language';
66
import { javascript } from "@codemirror/lang-javascript";
@@ -183,6 +183,7 @@ const lineWrapping = new Compartment();
183183
const lineNumber = new Compartment();
184184
const foldGutterComp = new Compartment();
185185
const searchKeymapComp = new Compartment();
186+
const placeholderComp = new Compartment();
186187

187188
const editorView = new CodeMirror.EditorView({
188189
doc: "",
@@ -209,6 +210,7 @@ const editorView = new CodeMirror.EditorView({
209210
...completionKeymap,
210211
indentWithTab,
211212
]),
213+
placeholderComp.of([]),
212214
searchKeymapComp.of([]),
213215
foldGutterComp.of([]),
214216
readOnly.of([]),
@@ -266,6 +268,12 @@ function setListener(fn) {
266268
});
267269
}
268270

271+
function setPlaceholder(value) {
272+
editorView.dispatch({
273+
effects: placeholderComp.reconfigure(value ? [placeholder(value)] : []),
274+
});
275+
}
276+
269277
function setReadOnly(value) {
270278
editorView.dispatch({
271279
effects: readOnly.reconfigure(value ? EditorState.readOnly.of(true) : []),
@@ -307,6 +315,7 @@ function setBlur() {
307315
export {
308316
setLanguage,
309317
getSupportedLanguages,
318+
setPlaceholder,
310319
setContent,
311320
getContent,
312321
setListener,

0 commit comments

Comments
 (0)