浏览代码

ace editor

crobi 10 年前
父节点
当前提交
7408cb930c
共有 5 个文件被更改,包括 120 次插入10 次删除
  1. 2
    1
      .gitignore
  2. 4
    0
      generator/css/ui.css
  3. 9
    4
      generator/generate.html
  4. 30
    5
      generator/js/ui.ts
  5. 75
    0
      generator/lib/ace/mode-rpgcard.js

+ 2
- 1
.gitignore 查看文件

@@ -1,5 +1,6 @@
1 1
 /resources/game-icons.net
2 2
 /node_modules
3 3
 /generator/js/*.map
4
-/generator/js/*.d.ts
4
+/generator/js/ui.d.ts
5
+/generator/js/card.d.ts
5 6
 /generator/js/*.js

+ 4
- 0
generator/css/ui.css 查看文件

@@ -6,6 +6,10 @@
6 6
     align-items: center;
7 7
 }
8 8
 
9
+#card-contents {
10
+    height: 240px;
11
+}
12
+
9 13
 /* Small screen (preview fills all columns) */
10 14
 @media (max-width : 1199px) {
11 15
     .preview-container {

+ 9
- 4
generator/generate.html 查看文件

@@ -14,6 +14,9 @@
14 14
     <!-- Library: Color picker -->
15 15
     <link href="lib/colorpicker/css/bootstrap-colorselector.css" rel="stylesheet" />
16 16
     <script type="text/javascript" src="lib/colorpicker/js/bootstrap-colorselector.js" charset="utf-8"></script>
17
+    <!-- Library: Ace editor -->
18
+    <script src="lib/ace/ace.js" type="text/javascript" charset="utf-8"></script>
19
+    <script src="lib/ace/mode-rpgcard.js" type="text/javascript" charset="utf-8"></script>
17 20
     <!-- Javascript -->
18 21
     <script type="text/javascript" src="js/card.js"></script>
19 22
     <script type="text/javascript" defer src="js/ui.js"></script>
@@ -33,7 +36,7 @@
33 36
             </div>
34 37
         </div>
35 38
         <div class="row">
36
-            <div class="col-md-12 col-lg-3">
39
+            <div class="col-md-12 col-lg-3" id="menu-column">
37 40
                 <!--<h3>Menu</h3>-->
38 41
                 <form style="display:none" id="file-load-form">
39 42
                     <input type="file" id="file-load" name="files[]" multiple class="form-control" style="display:none" />
@@ -202,7 +205,7 @@
202 205
                     </div>
203 206
                 </form>
204 207
             </div>
205
-            <div class="col-md-12 col-lg-5">
208
+            <div class="col-md-12 col-lg-5" id="card-column">
206 209
                 <!--<h3>Card</h3>-->
207 210
                 <form class="form-horizontal" role="form">
208 211
                     <div class="form-group">
@@ -302,12 +305,13 @@
302 305
                     <div class="form-group">
303 306
                         <label for="card-contents" class="col-sm-2 control-label">Contents</label>
304 307
                         <div class="col-sm-10">
305
-                            <textarea class="form-control" rows="14" id="card-contents" wrap="off"></textarea>
308
+                            <!--<textarea class="form-control" rows="14" id="card-contents" wrap="soft"></textarea>-->
309
+                            <div class="form-control" id="card-contents"></div>
306 310
                         </div>
307 311
                     </div>
308 312
                 </form>
309 313
             </div>
310
-            <div class="col-md-12 col-lg-4">
314
+            <div class="col-md-12 col-lg-4" id="preview-column">
311 315
                 <!--<h3>Preview</h3>-->
312 316
                 <div id="preview-container" class="preview-container">
313 317
                 </div>
@@ -449,5 +453,6 @@ if (card.hasTag("item") && card.hasTag("consumable")) {
449 453
             </div>
450 454
         </div>
451 455
     </div>
456
+
452 457
 </body>
453 458
 </html>

+ 30
- 5
generator/js/ui.ts 查看文件

@@ -3,6 +3,7 @@
3 3
 /// <reference path="./icons.ts" />
4 4
 /// <reference path="./example_data.ts" />
5 5
 /// <reference path="./jquery.d.ts" />
6
+/// <reference path="./ace.d.ts" />
6 7
 
7 8
 module RpgCardsUI {
8 9
 
@@ -10,6 +11,7 @@ module RpgCardsUI {
10 11
     var options: RpgCards.Options = null;
11 12
     var cardGenerator: RpgCards.CardHtmlGenerator = null;
12 13
     var pageGenerator: RpgCards.PageHtmlGenerator = null;
14
+    var editor: AceAjax.Editor;
13 15
 
14 16
     // ============================================================================
15 17
     // Seleted card
@@ -65,7 +67,8 @@ module RpgCardsUI {
65 67
             $("#card-count").val(""+card.count);
66 68
             $("#card-icon").val(card.icon);
67 69
             $("#card-icon-back").val(card.icon_back);
68
-            $("#card-contents").val(card.contents.join("\n"));
70
+            //$("#card-contents").val(card.contents.join("\n"));
71
+            editor.setValue(card.contents.join("\n"), -1);
69 72
             $("#card-tags").val(card.tags.join(", "));
70 73
             $("#card-color").val(card.color).change();
71 74
         } else {
@@ -75,7 +78,8 @@ module RpgCardsUI {
75 78
             $("#card-count").val("1");
76 79
             $("#card-icon").val("");
77 80
             $("#card-icon-back").val("");
78
-            $("#card-contents").val("");
81
+            //$("#card-contents").val("");
82
+            editor.setValue("");
79 83
             $("#card-tags").val("");
80 84
             $("#card-color").val("").change();
81 85
         }
@@ -208,7 +212,8 @@ module RpgCardsUI {
208 212
     }
209 213
 
210 214
     function on_change_card_contents() {
211
-        var value = $(this).val();
215
+        // var value = $(this).val();
216
+        var value = editor.getValue();
212 217
 
213 218
         var card = selected_card();
214 219
         if (card) {
@@ -457,7 +462,19 @@ module RpgCardsUI {
457 462
         // Use a delay to give the new window time to set up a message listener
458 463
         setTimeout(function () { tab.postMessage(card_html, '*') }, 500);
459 464
     }
460
-    
465
+
466
+    export function collapse_menu() {
467
+        $("#menu-column").hide();
468
+        $("#card-column").removeClass("col-lg-5");
469
+        $("#card-column").addClass("col-lg-8");
470
+    }
471
+
472
+    export function uncollapse_menu() {
473
+        $("#menu-column").show();
474
+        $("#card-column").removeClass("col-lg-8");
475
+        $("#card-column").addClass("col-lg-5");
476
+    }
477
+
461 478
     // ============================================================================
462 479
     // Initialization
463 480
     // ============================================================================
@@ -468,6 +485,13 @@ module RpgCardsUI {
468 485
         cardGenerator = new RpgCards.CardHtmlGenerator;
469 486
         pageGenerator = new RpgCards.PageHtmlGenerator;
470 487
 
488
+        editor = ace.edit("card-contents");
489
+        editor.setShowInvisibles(true);
490
+        editor.renderer.setShowGutter(false);
491
+        (<any>editor).setOption("wrap", "free");
492
+        editor.setTheme("ace/theme/chrome");
493
+        editor.getSession().setMode("ace/mode/rpgcard");
494
+
471 495
         setup_color_selector();
472 496
         (<any>$('.icon-list')).typeahead({ source: icon_names });
473 497
 
@@ -500,7 +524,8 @@ module RpgCardsUI {
500 524
         $("#card-count").change(on_change_card_property);
501 525
         $("#card-icon-back").change(on_change_card_property);
502 526
         $("#card-color").change(on_change_card_color);
503
-        $("#card-contents").change(on_change_card_contents);
527
+        editor.getSession().on('change', on_change_card_contents);
528
+        //$("#card-contents").change(on_change_card_contents);
504 529
         $("#card-tags").change(on_change_card_tags);
505 530
 
506 531
         // Global options

+ 75
- 0
generator/lib/ace/mode-rpgcard.js 查看文件

@@ -0,0 +1,75 @@
1
+ace.define("ace/mode/rpgcard_highlight_rules", ["require", "exports", "module", "ace/lib/oop", "ace/mode/text_highlight_rules"], function (require, exports, module) {
2
+    "use strict";
3
+
4
+    var oop = require("../lib/oop");
5
+    var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
6
+
7
+    var RpgCardHighlightRules = function () {
8
+
9
+        var keywords = (
10
+            "subtitle|rule|ruler|text|property|description|dndstats|fill|section|bullet|boxes"
11
+        );
12
+
13
+        var builtinConstants = (
14
+            "null"
15
+        );
16
+
17
+        var builtinFunctions = (
18
+            ""
19
+        );
20
+
21
+        var keywordMapper = this.createKeywordMapper({
22
+            "support.function": builtinFunctions,
23
+            "keyword": keywords,
24
+            "constant.language": builtinConstants
25
+        }, "identifier", true);
26
+
27
+        this.$rules = {
28
+            "start": [{
29
+                token: keywordMapper,
30
+                regex: "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
31
+            }, {
32
+                token: "keyword.operator",
33
+                regex: "\\|"
34
+            }, {
35
+                token: "paren.lparen",
36
+                regex: "[\\(]"
37
+            }, {
38
+                token: "paren.rparen",
39
+                regex: "[\\)]"
40
+            }, {
41
+                token: "text",
42
+                regex: "\\s+"
43
+            }]
44
+        };
45
+        this.normalizeRules();
46
+    };
47
+
48
+    oop.inherits(RpgCardHighlightRules, TextHighlightRules);
49
+
50
+    exports.RpgCardHighlightRules = RpgCardHighlightRules;
51
+});
52
+
53
+ace.define("ace/mode/rpgcard", ["require", "exports", "module", "ace/lib/oop", "ace/mode/text", "ace/mode/rpgcard_highlight_rules", "ace/range"], function (require, exports, module) {
54
+    "use strict";
55
+
56
+    var oop = require("../lib/oop");
57
+    var TextMode = require("./text").Mode;
58
+    var RpgCardHighlightRules = require("./rpgcard_highlight_rules").RpgCardHighlightRules;
59
+    var Range = require("../range").Range;
60
+
61
+    var Mode = function () {
62
+        this.HighlightRules = RpgCardHighlightRules;
63
+    };
64
+    oop.inherits(Mode, TextMode);
65
+
66
+    (function () {
67
+
68
+        this.lineCommentStart = "--";
69
+
70
+        this.$id = "ace/mode/rpgcard";
71
+    }).call(Mode.prototype);
72
+
73
+    exports.Mode = Mode;
74
+
75
+});

正在加载...
取消
保存