Browse Source

ace editor

crobi 10 years ago
parent
commit
7408cb930c
5 changed files with 120 additions and 10 deletions
  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 View File

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

+ 4
- 0
generator/css/ui.css View File

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

+ 9
- 4
generator/generate.html View File

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

+ 30
- 5
generator/js/ui.ts View File

3
 /// <reference path="./icons.ts" />
3
 /// <reference path="./icons.ts" />
4
 /// <reference path="./example_data.ts" />
4
 /// <reference path="./example_data.ts" />
5
 /// <reference path="./jquery.d.ts" />
5
 /// <reference path="./jquery.d.ts" />
6
+/// <reference path="./ace.d.ts" />
6
 
7
 
7
 module RpgCardsUI {
8
 module RpgCardsUI {
8
 
9
 
10
     var options: RpgCards.Options = null;
11
     var options: RpgCards.Options = null;
11
     var cardGenerator: RpgCards.CardHtmlGenerator = null;
12
     var cardGenerator: RpgCards.CardHtmlGenerator = null;
12
     var pageGenerator: RpgCards.PageHtmlGenerator = null;
13
     var pageGenerator: RpgCards.PageHtmlGenerator = null;
14
+    var editor: AceAjax.Editor;
13
 
15
 
14
     // ============================================================================
16
     // ============================================================================
15
     // Seleted card
17
     // Seleted card
65
             $("#card-count").val(""+card.count);
67
             $("#card-count").val(""+card.count);
66
             $("#card-icon").val(card.icon);
68
             $("#card-icon").val(card.icon);
67
             $("#card-icon-back").val(card.icon_back);
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
             $("#card-tags").val(card.tags.join(", "));
72
             $("#card-tags").val(card.tags.join(", "));
70
             $("#card-color").val(card.color).change();
73
             $("#card-color").val(card.color).change();
71
         } else {
74
         } else {
75
             $("#card-count").val("1");
78
             $("#card-count").val("1");
76
             $("#card-icon").val("");
79
             $("#card-icon").val("");
77
             $("#card-icon-back").val("");
80
             $("#card-icon-back").val("");
78
-            $("#card-contents").val("");
81
+            //$("#card-contents").val("");
82
+            editor.setValue("");
79
             $("#card-tags").val("");
83
             $("#card-tags").val("");
80
             $("#card-color").val("").change();
84
             $("#card-color").val("").change();
81
         }
85
         }
208
     }
212
     }
209
 
213
 
210
     function on_change_card_contents() {
214
     function on_change_card_contents() {
211
-        var value = $(this).val();
215
+        // var value = $(this).val();
216
+        var value = editor.getValue();
212
 
217
 
213
         var card = selected_card();
218
         var card = selected_card();
214
         if (card) {
219
         if (card) {
457
         // Use a delay to give the new window time to set up a message listener
462
         // Use a delay to give the new window time to set up a message listener
458
         setTimeout(function () { tab.postMessage(card_html, '*') }, 500);
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
     // Initialization
479
     // Initialization
463
     // ============================================================================
480
     // ============================================================================
468
         cardGenerator = new RpgCards.CardHtmlGenerator;
485
         cardGenerator = new RpgCards.CardHtmlGenerator;
469
         pageGenerator = new RpgCards.PageHtmlGenerator;
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
         setup_color_selector();
495
         setup_color_selector();
472
         (<any>$('.icon-list')).typeahead({ source: icon_names });
496
         (<any>$('.icon-list')).typeahead({ source: icon_names });
473
 
497
 
500
         $("#card-count").change(on_change_card_property);
524
         $("#card-count").change(on_change_card_property);
501
         $("#card-icon-back").change(on_change_card_property);
525
         $("#card-icon-back").change(on_change_card_property);
502
         $("#card-color").change(on_change_card_color);
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
         $("#card-tags").change(on_change_card_tags);
529
         $("#card-tags").change(on_change_card_tags);
505
 
530
 
506
         // Global options
531
         // Global options

+ 75
- 0
generator/lib/ace/mode-rpgcard.js View File

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
+});

Loading…
Cancel
Save