Просмотр исходного кода

monaco editor에도 placeholder 지원

잉여개발기 (SPDV) 2 лет назад
Родитель
Сommit
882418b82e
5 измененных файлов с 63 добавлено и 8 удалено
  1. 4 4
      route/edit.py
  2. 1 1
      route/tool/func.py
  3. 1 1
      version.json
  4. 5 1
      views/main_css/js/func/func.js
  5. 52 1
      views/main_css/js/route/editor.js

+ 4 - 4
route/edit.py

@@ -28,6 +28,10 @@ def edit_editor(curs, ip, data_main = '', do_type = 'edit'):
     editor_display = ''
     add_get_file = ''
     monaco_display = ''
+
+    curs.execute(db_change('select data from other where name = "edit_help"'))
+    sql_d = curs.fetchall()
+    p_text = html.escape(sql_d[0][0]) if sql_d and sql_d[0][0] != '' else load_lang('default_edit_help')
     
     monaco_on = get_main_skin_set(curs, flask.session, 'main_css_monaco', ip)
     if monaco_on == 'use':
@@ -51,10 +55,6 @@ def edit_editor(curs, ip, data_main = '', do_type = 'edit'):
         monaco_display = 'style="display: none;"'
         add_script = 'opennamu_edit_turn_off_monaco();'
 
-    curs.execute(db_change('select data from other where name = "edit_help"'))
-    sql_d = curs.fetchall()
-    p_text = html.escape(sql_d[0][0]) if sql_d and sql_d[0][0] != '' else load_lang('default_edit_help')
-
     if do_type == 'edit':
         textarea_size = 'opennamu_textarea_500'
     else:

+ 1 - 1
route/tool/func.py

@@ -1076,7 +1076,7 @@ def wiki_css(data):
     data += ['' for _ in range(0, 3 - len(data))]
     
     data_css = ''
-    data_css_ver = '177'
+    data_css_ver = '178'
     
     # Func JS + Defer
     data_css += '<script src="/views/main_css/js/func/func.js?ver=' + data_css_ver + '"></script>'

+ 1 - 1
version.json

@@ -1,6 +1,6 @@
 {
     "beta" : {
-        "r_ver" : "v3.4.6-RC3-dev209",
+        "r_ver" : "v3.4.6-RC3-dev210",
         "c_ver" : "3500361",
         "s_ver" : "3500111"
     }

+ 5 - 1
views/main_css/js/func/func.js

@@ -27,7 +27,11 @@ function opennamu_get_main_skin_set(set_name) {
         ) {
             return document.cookie.match(opennamu_cookie_split_regex(set_name))[1];
         } else {
-            return text[set_name][0][0];
+            if(text[set_name]) {
+                return text[set_name][0][0];
+            } else {
+                return '';
+            }
         }
     });
 }

+ 52 - 1
views/main_css/js/route/editor.js

@@ -151,8 +151,57 @@ function do_monaco_to_textarea() {
     }
 }
 
+// https://github.com/microsoft/monaco-editor/issues/568
+class PlaceholderContentWidget {
+    static ID = 'editor.widget.placeholderHint';
+
+    constructor(placeholder, editor) {
+		this.placeholder = placeholder;
+		this.editor = editor;
+        // register a listener for editor code changes
+        editor.onDidChangeModelContent(() => this.onDidChangeModelContent());
+        // ensure that on initial load the placeholder is shown
+        this.onDidChangeModelContent();
+    }
+
+    onDidChangeModelContent() {
+        if (this.editor.getValue() === '') {
+            this.editor.addContentWidget(this);
+        } else {
+            this.editor.removeContentWidget(this);
+        }
+    }
+
+    getId() {
+        return PlaceholderContentWidget.ID;
+    }
+
+    getDomNode() {
+        if (!this.domNode) {
+            this.domNode = document.createElement('div');
+            this.domNode.style.width = 'max-content';
+            this.domNode.textContent = this.placeholder;
+            this.domNode.style.fontStyle = 'italic';
+            this.editor.applyFontInfo(this.domNode);
+        }
+
+        return this.domNode;
+    }
+
+    getPosition() {
+        return {
+            position: { lineNumber: 1, column: 1 },
+            preference: [monaco.editor.ContentWidgetPositionPreference.EXACT],
+        };
+    }
+
+    dispose() {
+        this.editor.removeContentWidget(this);
+    }
+}
+
 function do_monaco_init(monaco_thema) {
-    require.config({ paths: { 'vs': 'https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.37.1/min/vs' }});
+    require.config({ paths: { 'vs': 'https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.40.0/min/vs' }});
     require.config({ 'vs/nls': { availableLanguages: { '*': 'ko' } }});
     require(["vs/editor/editor.main"], function () {
         window.editor = monaco.editor.create(document.getElementById('opennamu_monaco_editor'), {
@@ -162,5 +211,7 @@ function do_monaco_init(monaco_thema) {
             wordWrap: true,
             theme: monaco_thema
         });
+
+        new PlaceholderContentWidget(document.getElementById('opennamu_edit_textarea').placeholder, window.editor);
     });
 }