smalruby-editor 0.1.5-x86-mingw32 → 0.1.6-x86-mingw32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of smalruby-editor might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/.gitignore +2 -1
- data/.rubocop.yml +8 -0
- data/README.rdoc +3 -0
- data/app/assets/javascripts/application.js +0 -1
- data/app/assets/javascripts/models/source_code.js.coffee +5 -2
- data/app/assets/javascripts/smalruby.js.coffee +18 -11
- data/app/assets/javascripts/views/main_menu_view.js.coffee +139 -81
- data/app/controllers/source_codes_controller.rb +7 -0
- data/app/models/concerns/ruby_to_block.rb +391 -0
- data/app/models/source_code.rb +3 -2
- data/app/views/editor/demo.html.erb +1 -1
- data/app/views/editor/index.html.haml +2 -2
- data/config/routes.rb +1 -0
- data/{app/assets/demos → demos}/default.xml +0 -0
- data/{app/assets/demos → demos}/rgb_led_anode.xml +82 -82
- data/lib/smalruby_editor/version.rb +3 -3
- data/lib/tasks/release.rake +0 -4
- data/public/assets/{application-0047adbc0fb7a529ef7a41b5e0e7d097.js → application-8bfffad1222d4e198f3c7ccc1cbd774f.js} +179 -144
- data/public/assets/{application-0047adbc0fb7a529ef7a41b5e0e7d097.js.gz → application-8bfffad1222d4e198f3c7ccc1cbd774f.js.gz} +0 -0
- data/public/assets/manifest-332a5a1668194028b55103e0ea45c054.json +1 -1
- data/smalruby-editor.gemspec +0 -6
- data/spec/acceptance/base.feature +119 -0
- data/spec/acceptance/block_mode/translate.feature +14 -0
- data/spec/acceptance/ruby_mode/translate.feature +65 -0
- data/spec/acceptance/standalone/run.feature +14 -1
- data/spec/controllers/source_codes_controller_spec.rb +22 -0
- data/{public/assets/default-5d1886100d7c8961e9962bbc4bb0c714.xml → spec/fixtures/files/01.rb.xml} +0 -0
- data/spec/models/concerns/ruby_to_block_spec.rb +329 -0
- data/spec/steps/base_steps.rb +230 -0
- data/spec/steps/block_mode_steps.rb +9 -1
- data/spec/steps/fix_turnip.rb +28 -0
- data/spec/steps/text_editor_steps.rb +52 -193
- metadata +19 -97
- data/app/assets/javascripts/ruby_mode.js.coffee.erb +0 -12
- data/public/assets/rgb_led_anode-91225bef2a8b97f1cefee862a0619b91.xml +0 -83
- data/spec/acceptance/ruby_mode/base.feature +0 -33
- data/spec/steps/ace_steps.rb +0 -77
File without changes
|
@@ -1,83 +1,83 @@
|
|
1
|
-
<xml xmlns="http://www.w3.org/1999/xhtml">
|
2
|
-
<character name="frog1" x="261" y="191" angle="0" costumes="frog1.png" />
|
3
|
-
<block type="hardware_init_hardware" x="40" y="6" />
|
4
|
-
<block type="character_new" x="45" y="50">
|
5
|
-
<field name="NAME">frog1</field>
|
6
|
-
<statement name="DO">
|
7
|
-
<block type="events_on_click">
|
8
|
-
<statement name="DO">
|
9
|
-
<block type="looks_say" inline="true">
|
10
|
-
<value name="TEXT">
|
11
|
-
<block type="text">
|
12
|
-
<field name="TEXT">ライトをぴかっとさせるでよ♪</field>
|
13
|
-
</block>
|
14
|
-
</value>
|
15
|
-
<next>
|
16
|
-
<block type="hardware_rgb_led_on">
|
17
|
-
<field name="AC">anode</field>
|
18
|
-
<field name="PIN">D3</field>
|
19
|
-
<field name="COLOUR">#3333ff</field>
|
20
|
-
<next>
|
21
|
-
<block type="control_sleep" inline="true">
|
22
|
-
<value name="SEC">
|
23
|
-
<block type="math_number">
|
24
|
-
<field name="NUM">1</field>
|
25
|
-
</block>
|
26
|
-
</value>
|
27
|
-
<next>
|
28
|
-
<block type="hardware_rgb_led_on">
|
29
|
-
<field name="AC">anode</field>
|
30
|
-
<field name="PIN">D3</field>
|
31
|
-
<field name="COLOUR">#ffff99</field>
|
32
|
-
<next>
|
33
|
-
<block type="control_sleep" inline="true">
|
34
|
-
<value name="SEC">
|
35
|
-
<block type="math_number">
|
36
|
-
<field name="NUM">1</field>
|
37
|
-
</block>
|
38
|
-
</value>
|
39
|
-
<next>
|
40
|
-
<block type="hardware_rgb_led_on">
|
41
|
-
<field name="AC">anode</field>
|
42
|
-
<field name="PIN">D3</field>
|
43
|
-
<field name="COLOUR">#ff0000</field>
|
44
|
-
<next>
|
45
|
-
<block type="control_sleep" inline="true">
|
46
|
-
<value name="SEC">
|
47
|
-
<block type="math_number">
|
48
|
-
<field name="NUM">1</field>
|
49
|
-
</block>
|
50
|
-
</value>
|
51
|
-
<next>
|
52
|
-
<block type="hardware_rgb_led_off">
|
53
|
-
<field name="AC">anode</field>
|
54
|
-
<field name="PIN">D3</field>
|
55
|
-
<next>
|
56
|
-
<block type="looks_say" inline="true">
|
57
|
-
<value name="TEXT">
|
58
|
-
<block type="text">
|
59
|
-
<field name="TEXT" />
|
60
|
-
</block>
|
61
|
-
</value>
|
62
|
-
</block>
|
63
|
-
</next>
|
64
|
-
</block>
|
65
|
-
</next>
|
66
|
-
</block>
|
67
|
-
</next>
|
68
|
-
</block>
|
69
|
-
</next>
|
70
|
-
</block>
|
71
|
-
</next>
|
72
|
-
</block>
|
73
|
-
</next>
|
74
|
-
</block>
|
75
|
-
</next>
|
76
|
-
</block>
|
77
|
-
</next>
|
78
|
-
</block>
|
79
|
-
</statement>
|
80
|
-
</block>
|
81
|
-
</statement>
|
82
|
-
</block>
|
1
|
+
<xml xmlns="http://www.w3.org/1999/xhtml">
|
2
|
+
<character name="frog1" x="261" y="191" angle="0" costumes="frog1.png" />
|
3
|
+
<block type="hardware_init_hardware" x="40" y="6" />
|
4
|
+
<block type="character_new" x="45" y="50">
|
5
|
+
<field name="NAME">frog1</field>
|
6
|
+
<statement name="DO">
|
7
|
+
<block type="events_on_click">
|
8
|
+
<statement name="DO">
|
9
|
+
<block type="looks_say" inline="true">
|
10
|
+
<value name="TEXT">
|
11
|
+
<block type="text">
|
12
|
+
<field name="TEXT">ライトをぴかっとさせるでよ♪</field>
|
13
|
+
</block>
|
14
|
+
</value>
|
15
|
+
<next>
|
16
|
+
<block type="hardware_rgb_led_on">
|
17
|
+
<field name="AC">anode</field>
|
18
|
+
<field name="PIN">D3</field>
|
19
|
+
<field name="COLOUR">#3333ff</field>
|
20
|
+
<next>
|
21
|
+
<block type="control_sleep" inline="true">
|
22
|
+
<value name="SEC">
|
23
|
+
<block type="math_number">
|
24
|
+
<field name="NUM">1</field>
|
25
|
+
</block>
|
26
|
+
</value>
|
27
|
+
<next>
|
28
|
+
<block type="hardware_rgb_led_on">
|
29
|
+
<field name="AC">anode</field>
|
30
|
+
<field name="PIN">D3</field>
|
31
|
+
<field name="COLOUR">#ffff99</field>
|
32
|
+
<next>
|
33
|
+
<block type="control_sleep" inline="true">
|
34
|
+
<value name="SEC">
|
35
|
+
<block type="math_number">
|
36
|
+
<field name="NUM">1</field>
|
37
|
+
</block>
|
38
|
+
</value>
|
39
|
+
<next>
|
40
|
+
<block type="hardware_rgb_led_on">
|
41
|
+
<field name="AC">anode</field>
|
42
|
+
<field name="PIN">D3</field>
|
43
|
+
<field name="COLOUR">#ff0000</field>
|
44
|
+
<next>
|
45
|
+
<block type="control_sleep" inline="true">
|
46
|
+
<value name="SEC">
|
47
|
+
<block type="math_number">
|
48
|
+
<field name="NUM">1</field>
|
49
|
+
</block>
|
50
|
+
</value>
|
51
|
+
<next>
|
52
|
+
<block type="hardware_rgb_led_off">
|
53
|
+
<field name="AC">anode</field>
|
54
|
+
<field name="PIN">D3</field>
|
55
|
+
<next>
|
56
|
+
<block type="looks_say" inline="true">
|
57
|
+
<value name="TEXT">
|
58
|
+
<block type="text">
|
59
|
+
<field name="TEXT" />
|
60
|
+
</block>
|
61
|
+
</value>
|
62
|
+
</block>
|
63
|
+
</next>
|
64
|
+
</block>
|
65
|
+
</next>
|
66
|
+
</block>
|
67
|
+
</next>
|
68
|
+
</block>
|
69
|
+
</next>
|
70
|
+
</block>
|
71
|
+
</next>
|
72
|
+
</block>
|
73
|
+
</next>
|
74
|
+
</block>
|
75
|
+
</next>
|
76
|
+
</block>
|
77
|
+
</next>
|
78
|
+
</block>
|
79
|
+
</statement>
|
80
|
+
</block>
|
81
|
+
</statement>
|
82
|
+
</block>
|
83
83
|
</xml>
|
@@ -1,3 +1,3 @@
|
|
1
|
-
module SmalrubyEditor
|
2
|
-
VERSION = '0.1.
|
3
|
-
end
|
1
|
+
module SmalrubyEditor
|
2
|
+
VERSION = '0.1.6'
|
3
|
+
end
|
data/lib/tasks/release.rake
CHANGED
@@ -6,8 +6,6 @@ task :build do
|
|
6
6
|
|
7
7
|
ENV['GEM_PLATFORM'] = 'x86-mingw32'
|
8
8
|
Rake::Task['gem:build'].reenable
|
9
|
-
Rake::Task['assets:clobber'].reenable
|
10
|
-
Rake::Task['assets:precompile:standalone'].reenable
|
11
9
|
Rake::Task['gem:build'].invoke
|
12
10
|
end
|
13
11
|
|
@@ -18,8 +16,6 @@ task :release do
|
|
18
16
|
ENV['GEM_PLATFORM'] = 'x86-mingw32'
|
19
17
|
Rake::Task['gem:release'].reenable
|
20
18
|
Rake::Task['gem:build'].reenable
|
21
|
-
Rake::Task['assets:clobber'].reenable
|
22
|
-
Rake::Task['assets:precompile:standalone'].reenable
|
23
19
|
Rake::Task['gem:release'].invoke
|
24
20
|
|
25
21
|
sh 'git mirror'
|
@@ -12513,7 +12513,7 @@ Blockly.Msg.CONTROLS_IF_ELSE_TITLE_ELSE = Blockly.Msg.CONTROLS_IF_MSG_ELSE;
|
|
12513
12513
|
}
|
12514
12514
|
html = $('<div class="alert alert-success" style="display: none">').append("<h4><i class=\"icon-star\"></i>" + title + "</h4>").append(msg);
|
12515
12515
|
$(selector).append(html);
|
12516
|
-
|
12516
|
+
html.fadeIn('slow').delay(3000).fadeOut('slow');
|
12517
12517
|
};
|
12518
12518
|
|
12519
12519
|
window.errorMessage = function(msg, selector) {
|
@@ -12523,7 +12523,7 @@ Blockly.Msg.CONTROLS_IF_ELSE_TITLE_ELSE = Blockly.Msg.CONTROLS_IF_MSG_ELSE;
|
|
12523
12523
|
}
|
12524
12524
|
html = $('<div class="alert alert-error" style="display: none">').append('<button type="button" class="close" data-dismiss="alert">×</button>').append('<h4><i class="icon-exclamation-sign"></i>エラー</h4>').append(msg);
|
12525
12525
|
$(selector).append(html);
|
12526
|
-
|
12526
|
+
html.fadeIn('slow');
|
12527
12527
|
};
|
12528
12528
|
|
12529
12529
|
window.Smalruby = {
|
@@ -12532,7 +12532,8 @@ Blockly.Msg.CONTROLS_IF_ELSE_TITLE_ELSE = Blockly.Msg.CONTROLS_IF_MSG_ELSE;
|
|
12532
12532
|
Views: {},
|
12533
12533
|
Routers: {},
|
12534
12534
|
initialize: function() {
|
12535
|
-
var
|
12535
|
+
var session, textEditor,
|
12536
|
+
_this = this;
|
12536
12537
|
_.extend(_.templateSettings, {
|
12537
12538
|
escape: /{{-([\s\S]+?)}}/,
|
12538
12539
|
evaluate: /{{([\s\S]+?)}}/,
|
@@ -12546,20 +12547,6 @@ Blockly.Msg.CONTROLS_IF_ELSE_TITLE_ELSE = Blockly.Msg.CONTROLS_IF_MSG_ELSE;
|
|
12546
12547
|
this.Views.CharacterModalView = new Smalruby.CharacterModalView({
|
12547
12548
|
el: $('#character-modal')
|
12548
12549
|
});
|
12549
|
-
$('a[data-toggle="tab"]').on('shown', function(e) {
|
12550
|
-
var data;
|
12551
|
-
if ($(e.target).attr('href') === '#block-tab') {
|
12552
|
-
return window.blockMode = true;
|
12553
|
-
} else {
|
12554
|
-
window.blockMode = false;
|
12555
|
-
data = Blockly.Ruby.workspaceToCode();
|
12556
|
-
if ($.trim(data).length > 0) {
|
12557
|
-
window.textEditor.getSession().getDocument().setValue(data);
|
12558
|
-
window.textEditor.moveCursorTo(0, 0);
|
12559
|
-
}
|
12560
|
-
return window.textEditor.focus();
|
12561
|
-
}
|
12562
|
-
});
|
12563
12550
|
Smalruby.downloading = false;
|
12564
12551
|
window.onbeforeunload = function(event) {
|
12565
12552
|
if (!Smalruby.downloading && window.changed) {
|
@@ -12578,7 +12565,8 @@ Blockly.Msg.CONTROLS_IF_ELSE_TITLE_ELSE = Blockly.Msg.CONTROLS_IF_MSG_ELSE;
|
|
12578
12565
|
Blockly.Toolbox.tree_.expandAll();
|
12579
12566
|
this.blocklyFirst = true;
|
12580
12567
|
this.blocklyLoading = false;
|
12581
|
-
|
12568
|
+
Blockly.addChangeListener(function() {
|
12569
|
+
Smalruby.changedAfterTranslating = true;
|
12582
12570
|
if (_this.blocklyFirst) {
|
12583
12571
|
_this.blocklyFirst = false;
|
12584
12572
|
return;
|
@@ -12589,6 +12577,20 @@ Blockly.Msg.CONTROLS_IF_ELSE_TITLE_ELSE = Blockly.Msg.CONTROLS_IF_MSG_ELSE;
|
|
12589
12577
|
}
|
12590
12578
|
return window.changed = true;
|
12591
12579
|
});
|
12580
|
+
window.textEditor = textEditor = ace.edit('text-editor');
|
12581
|
+
textEditor.setTheme('ace/theme/clouds');
|
12582
|
+
textEditor.setShowInvisibles(true);
|
12583
|
+
textEditor.gotoLine(0, 0);
|
12584
|
+
textEditor.on('change', function(e) {
|
12585
|
+
if (!_this.translating) {
|
12586
|
+
window.changed = true;
|
12587
|
+
return Smalruby.changedAfterTranslating = true;
|
12588
|
+
}
|
12589
|
+
});
|
12590
|
+
session = textEditor.getSession();
|
12591
|
+
session.setMode('ace/mode/ruby');
|
12592
|
+
session.setTabSize(2);
|
12593
|
+
return session.setUseSoftTabs(true);
|
12592
12594
|
},
|
12593
12595
|
loadXml: function(data, workspace) {
|
12594
12596
|
var c, chars, i, xml, xmlChild;
|
@@ -12795,8 +12797,14 @@ Blockly.Msg.CONTROLS_IF_ELSE_TITLE_ELSE = Blockly.Msg.CONTROLS_IF_MSG_ELSE;
|
|
12795
12797
|
}
|
12796
12798
|
return this.delete_(action);
|
12797
12799
|
},
|
12798
|
-
|
12800
|
+
toBlocks: function() {
|
12801
|
+
return this.post_('to_blocks', 'html');
|
12802
|
+
},
|
12803
|
+
post_: function(action, dataType) {
|
12799
12804
|
var dfr;
|
12805
|
+
if (dataType == null) {
|
12806
|
+
dataType = 'json';
|
12807
|
+
}
|
12800
12808
|
dfr = $.Deferred();
|
12801
12809
|
$.ajax({
|
12802
12810
|
url: "/source_codes/" + action,
|
@@ -12807,7 +12815,7 @@ Blockly.Msg.CONTROLS_IF_ELSE_TITLE_ELSE = Blockly.Msg.CONTROLS_IF_MSG_ELSE;
|
|
12807
12815
|
data: this.get('data')
|
12808
12816
|
}
|
12809
12817
|
},
|
12810
|
-
dataType:
|
12818
|
+
dataType: dataType,
|
12811
12819
|
success: function(data, textStatus, jqXHR) {
|
12812
12820
|
return dfr.resolve(data);
|
12813
12821
|
},
|
@@ -13184,6 +13192,8 @@ Blockly.Msg.CONTROLS_IF_ELSE_TITLE_ELSE = Blockly.Msg.CONTROLS_IF_MSG_ELSE;
|
|
13184
13192
|
Smalruby.MainMenuView = Backbone.View.extend({
|
13185
13193
|
el: '#main-menu',
|
13186
13194
|
events: {
|
13195
|
+
'click #block-mode-button': 'onBlockMode',
|
13196
|
+
'click #ruby-mode-button': 'onRubyMode',
|
13187
13197
|
'click #run-button': 'onRun',
|
13188
13198
|
'click #download-button': 'onDownload',
|
13189
13199
|
'click #load-button': 'onLoad',
|
@@ -13214,6 +13224,7 @@ Blockly.Msg.CONTROLS_IF_ELSE_TITLE_ELSE = Blockly.Msg.CONTROLS_IF_MSG_ELSE;
|
|
13214
13224
|
filename = info.filename;
|
13215
13225
|
if (filename.match(/\.xml$/)) {
|
13216
13226
|
if (!window.blockMode) {
|
13227
|
+
window.blockMode = true;
|
13217
13228
|
$('#tabs a[href="#block-tab"]').tab('show');
|
13218
13229
|
}
|
13219
13230
|
filename = filename.replace(/(\.rb)?\.xml$/, '.rb');
|
@@ -13224,6 +13235,7 @@ Blockly.Msg.CONTROLS_IF_ELSE_TITLE_ELSE = Blockly.Msg.CONTROLS_IF_MSG_ELSE;
|
|
13224
13235
|
Smalruby.Collections.CharacterSet.reset();
|
13225
13236
|
Blockly.mainWorkspace.clear();
|
13226
13237
|
if (window.blockMode) {
|
13238
|
+
window.blockMode = false;
|
13227
13239
|
$('#tabs a[href="#ruby-tab"]').tab('show');
|
13228
13240
|
window.textEditor.focus();
|
13229
13241
|
}
|
@@ -13232,13 +13244,64 @@ Blockly.Msg.CONTROLS_IF_ELSE_TITLE_ELSE = Blockly.Msg.CONTROLS_IF_MSG_ELSE;
|
|
13232
13244
|
window.textEditor.getSession().getDocument().setValue(info.data);
|
13233
13245
|
window.textEditor.moveCursorTo(0, 0);
|
13234
13246
|
window.changed = false;
|
13247
|
+
Smalruby.changedAfterTranslating = true;
|
13235
13248
|
return window.successMessage('ロードしました');
|
13236
13249
|
}
|
13237
13250
|
}
|
13238
13251
|
});
|
13239
13252
|
},
|
13253
|
+
onBlockMode: function(e) {
|
13254
|
+
var sourceCode;
|
13255
|
+
e.preventDefault();
|
13256
|
+
if (window.blockMode) {
|
13257
|
+
return;
|
13258
|
+
}
|
13259
|
+
if (!Smalruby.changedAfterTranslating) {
|
13260
|
+
window.blockMode = true;
|
13261
|
+
$('#tabs a[href="#block-tab"]').tab('show');
|
13262
|
+
return;
|
13263
|
+
}
|
13264
|
+
this.blockUI({
|
13265
|
+
title: "<i class=\"icon-filter\"></i>\nプログラムの変換中",
|
13266
|
+
message: 'プログラムをブロックに変換しています。'
|
13267
|
+
});
|
13268
|
+
sourceCode = new Smalruby.SourceCode();
|
13269
|
+
return sourceCode.toBlocks().then(function(data) {
|
13270
|
+
window.blockMode = true;
|
13271
|
+
$('#tabs a[href="#block-tab"]').tab('show');
|
13272
|
+
if (data.length > 0) {
|
13273
|
+
Smalruby.blocklyLoading = true;
|
13274
|
+
Smalruby.translating = true;
|
13275
|
+
Smalruby.loadXml(data);
|
13276
|
+
Smalruby.translating = false;
|
13277
|
+
return Smalruby.changedAfterTranslating = false;
|
13278
|
+
}
|
13279
|
+
}).then(this.unblockUI, this.unblockUI).fail(function() {
|
13280
|
+
return window.errorMessage('ブロックへの変換に失敗しました');
|
13281
|
+
});
|
13282
|
+
},
|
13283
|
+
onRubyMode: function(e) {
|
13284
|
+
var data;
|
13285
|
+
e.preventDefault();
|
13286
|
+
if (!window.blockMode) {
|
13287
|
+
return;
|
13288
|
+
}
|
13289
|
+
window.blockMode = false;
|
13290
|
+
$('#tabs a[href="#ruby-tab"]').tab('show');
|
13291
|
+
if (!Smalruby.changedAfterTranslating) {
|
13292
|
+
return;
|
13293
|
+
}
|
13294
|
+
data = Blockly.Ruby.workspaceToCode();
|
13295
|
+
Smalruby.translating = true;
|
13296
|
+
window.textEditor.getSession().getDocument().setValue(data);
|
13297
|
+
Smalruby.translating = false;
|
13298
|
+
Smalruby.changedAfterTranslating = false;
|
13299
|
+
window.textEditor.moveCursorTo(0, 0);
|
13300
|
+
return window.textEditor.focus();
|
13301
|
+
},
|
13240
13302
|
onRun: function(e) {
|
13241
|
-
var
|
13303
|
+
var errorMsg, sourceCode,
|
13304
|
+
_this = this;
|
13242
13305
|
e.preventDefault();
|
13243
13306
|
sourceCode = this.getSourceCode();
|
13244
13307
|
this.blockUI({
|
@@ -13246,76 +13309,55 @@ Blockly.Msg.CONTROLS_IF_ELSE_TITLE_ELSE = Blockly.Msg.CONTROLS_IF_MSG_ELSE;
|
|
13246
13309
|
message: 'プログラムの画面に切り替えてください。',
|
13247
13310
|
notice: "プログラムをセーブ・チェックしてから実行するよ♪<br>\nEscキーを押すとプログラムが終わります。"
|
13248
13311
|
});
|
13249
|
-
|
13250
|
-
|
13251
|
-
return
|
13252
|
-
}
|
13253
|
-
|
13254
|
-
|
13255
|
-
|
13256
|
-
|
13257
|
-
|
13258
|
-
|
13259
|
-
|
13260
|
-
|
13261
|
-
|
13262
|
-
|
13263
|
-
|
13264
|
-
|
13265
|
-
|
13266
|
-
|
13267
|
-
|
13268
|
-
|
13269
|
-
|
13270
|
-
msg += "、" + errorInfo.column + "文字";
|
13271
|
-
}
|
13272
|
-
return window.errorMessage(msg + (": " + errorInfo.message));
|
13273
|
-
})(errorInfo));
|
13274
|
-
}
|
13275
|
-
return _results;
|
13276
|
-
} else {
|
13277
|
-
return sourceCode.run().done(function(data) {
|
13278
|
-
var _j, _len1, _results1;
|
13279
|
-
$.unblockUI();
|
13280
|
-
if (data.length > 0) {
|
13281
|
-
_results1 = [];
|
13282
|
-
for (_j = 0, _len1 = data.length; _j < _len1; _j++) {
|
13283
|
-
errorInfo = data[_j];
|
13284
|
-
_results1.push((function(errorInfo) {
|
13285
|
-
var msg;
|
13286
|
-
msg = "" + errorInfo.row + "行";
|
13287
|
-
if (errorInfo.column > 0) {
|
13288
|
-
msg += "、" + errorInfo.column + "文字";
|
13289
|
-
}
|
13290
|
-
return errorMessage(msg + (": " + errorInfo.message));
|
13291
|
-
})(errorInfo));
|
13292
|
-
}
|
13293
|
-
return _results1;
|
13294
|
-
}
|
13295
|
-
}).fail(function() {
|
13296
|
-
return failedFunc();
|
13297
|
-
});
|
13298
|
-
}
|
13299
|
-
}).fail(function() {
|
13300
|
-
return failedFunc();
|
13301
|
-
});
|
13312
|
+
errorMsg = 'プログラムを実行できませんでした';
|
13313
|
+
return sourceCode.save2().then(function(data) {
|
13314
|
+
return sourceCode.write();
|
13315
|
+
}).then(function(data) {
|
13316
|
+
return _this.confirmOverwrite_.call(_this, data, sourceCode, function() {
|
13317
|
+
return errorMsg = 'プログラムの実行をキャンセルしました';
|
13318
|
+
});
|
13319
|
+
}).then(function() {
|
13320
|
+
Smalruby.savedFilename = sourceCode.get('filename');
|
13321
|
+
window.changed = false;
|
13322
|
+
return sourceCode.check();
|
13323
|
+
}).then(function(data) {
|
13324
|
+
var errorInfo, _fn, _i, _len;
|
13325
|
+
if (data.length > 0) {
|
13326
|
+
_fn = function(errorInfo) {
|
13327
|
+
var msg;
|
13328
|
+
msg = "" + errorInfo.row + "行";
|
13329
|
+
if (errorInfo.column > 0) {
|
13330
|
+
msg += "、" + errorInfo.column + "文字";
|
13331
|
+
}
|
13332
|
+
return window.errorMessage(msg + (": " + errorInfo.message));
|
13302
13333
|
};
|
13303
|
-
|
13304
|
-
|
13305
|
-
|
13306
|
-
|
13307
|
-
|
13308
|
-
|
13309
|
-
|
13334
|
+
for (_i = 0, _len = data.length; _i < _len; _i++) {
|
13335
|
+
errorInfo = data[_i];
|
13336
|
+
_fn(errorInfo);
|
13337
|
+
}
|
13338
|
+
return $.Deferred().reject().promise();
|
13339
|
+
}
|
13340
|
+
}).then(function() {
|
13341
|
+
return sourceCode.run();
|
13342
|
+
}).then(function(data) {
|
13343
|
+
var errorInfo, _fn, _i, _len;
|
13344
|
+
if (data.length > 0) {
|
13345
|
+
_fn = function(errorInfo) {
|
13346
|
+
var msg;
|
13347
|
+
msg = "" + errorInfo.row + "行";
|
13348
|
+
if (errorInfo.column > 0) {
|
13349
|
+
msg += "、" + errorInfo.column + "文字";
|
13310
13350
|
}
|
13311
|
-
|
13312
|
-
|
13351
|
+
return errorMessage(msg + (": " + errorInfo.message));
|
13352
|
+
};
|
13353
|
+
for (_i = 0, _len = data.length; _i < _len; _i++) {
|
13354
|
+
errorInfo = data[_i];
|
13355
|
+
_fn(errorInfo);
|
13313
13356
|
}
|
13314
|
-
|
13315
|
-
|
13316
|
-
|
13317
|
-
|
13318
|
-
return failedFunc();
|
13357
|
+
return $.Deferred().reject().promise();
|
13358
|
+
}
|
13359
|
+
}).then(this.unblockUI, this.unblockUI).fail(function() {
|
13360
|
+
return errorMessage(errorMsg);
|
13319
13361
|
});
|
13320
13362
|
},
|
13321
13363
|
onDownload: function(e) {
|
@@ -13327,14 +13369,12 @@ Blockly.Msg.CONTROLS_IF_ELSE_TITLE_ELSE = Blockly.Msg.CONTROLS_IF_MSG_ELSE;
|
|
13327
13369
|
message: 'プログラムをダウンロードしています。',
|
13328
13370
|
notice: "ダウンロードしたプログラムは、<br>\nWindowsだと「ruby " + (sourceCode.get('filename')) + "」、<br>\nMacだと「rsdl " + (sourceCode.get('filename')) + "」で実行できます。"
|
13329
13371
|
});
|
13330
|
-
return sourceCode.save2().
|
13331
|
-
$.unblockUI();
|
13372
|
+
return sourceCode.save2().then(function(data) {
|
13332
13373
|
window.changed = false;
|
13333
13374
|
window.successMessage('ダウンロードしました');
|
13334
13375
|
Smalruby.downloading = true;
|
13335
13376
|
return $('#download-link').click();
|
13336
|
-
}).fail(function() {
|
13337
|
-
$.unblockUI();
|
13377
|
+
}).then(this.unblockUI, this.unblockUI).fail(function() {
|
13338
13378
|
return window.errorMessage('ダウンロードできませんでした');
|
13339
13379
|
});
|
13340
13380
|
},
|
@@ -13348,7 +13388,8 @@ Blockly.Msg.CONTROLS_IF_ELSE_TITLE_ELSE = Blockly.Msg.CONTROLS_IF_MSG_ELSE;
|
|
13348
13388
|
return $('input#load-file[name="source_code[file]"]').click();
|
13349
13389
|
},
|
13350
13390
|
onSave: function(e) {
|
13351
|
-
var
|
13391
|
+
var errorMsg, filename, sourceCode,
|
13392
|
+
_this = this;
|
13352
13393
|
e.preventDefault();
|
13353
13394
|
filename = $.trim($('#filename').val());
|
13354
13395
|
if (filename.length <= 0) {
|
@@ -13371,36 +13412,19 @@ Blockly.Msg.CONTROLS_IF_ELSE_TITLE_ELSE = Blockly.Msg.CONTROLS_IF_MSG_ELSE;
|
|
13371
13412
|
message: 'プログラムをセーブしています。',
|
13372
13413
|
notice: "プログラムの名前は「" + (sourceCode.get('filename')) + "」です。<br>\nプログラムはホームディレクトリにセーブします。<br>"
|
13373
13414
|
});
|
13374
|
-
|
13375
|
-
|
13376
|
-
return
|
13377
|
-
}
|
13378
|
-
|
13379
|
-
|
13380
|
-
var afterSave;
|
13381
|
-
afterSave = function() {
|
13382
|
-
$.unblockUI();
|
13383
|
-
Smalruby.savedFilename = sourceCode.get('filename');
|
13384
|
-
window.changed = false;
|
13385
|
-
return window.successMessage('セーブしました');
|
13386
|
-
};
|
13387
|
-
if (data.source_code.error) {
|
13388
|
-
if (sourceCode.get('filename') === Smalruby.savedFilename || confirm("前に" + (sourceCode.get('filename')) + "という名前でセーブしているけど本当にセーブしますか?\nセーブすると前に作成したプログラムは消えてしまうよ!")) {
|
13389
|
-
return sourceCode.write(true).done(function(data) {
|
13390
|
-
return afterSave();
|
13391
|
-
});
|
13392
|
-
} else {
|
13393
|
-
$.unblockUI();
|
13394
|
-
return window.successMessage('セーブをキャンセルしました');
|
13395
|
-
}
|
13396
|
-
} else {
|
13397
|
-
return afterSave();
|
13398
|
-
}
|
13399
|
-
}).fail(function() {
|
13400
|
-
return failedFunc();
|
13415
|
+
errorMsg = 'セーブできませんでした';
|
13416
|
+
return sourceCode.save2().then(function(data) {
|
13417
|
+
return sourceCode.write();
|
13418
|
+
}).then(function(data) {
|
13419
|
+
return _this.confirmOverwrite_.call(_this, data, sourceCode, function() {
|
13420
|
+
return errorMsg = 'セーブをキャンセルしました';
|
13401
13421
|
});
|
13422
|
+
}).then(this.unblockUI, this.unblockUI).done(function() {
|
13423
|
+
Smalruby.savedFilename = sourceCode.get('filename');
|
13424
|
+
window.changed = false;
|
13425
|
+
return window.successMessage('セーブしました');
|
13402
13426
|
}).fail(function() {
|
13403
|
-
return
|
13427
|
+
return window.errorMessage(errorMsg);
|
13404
13428
|
});
|
13405
13429
|
},
|
13406
13430
|
onCheck: function(e) {
|
@@ -13412,9 +13436,8 @@ Blockly.Msg.CONTROLS_IF_ELSE_TITLE_ELSE = Blockly.Msg.CONTROLS_IF_MSG_ELSE;
|
|
13412
13436
|
message: 'プログラムの文法をチェックしています。',
|
13413
13437
|
notice: "このチェックは簡易的なものですので、<br>\nプログラムを動かすとエラーが見つかるかもしれません。"
|
13414
13438
|
});
|
13415
|
-
return sourceCode.check().
|
13439
|
+
return sourceCode.check().then(function(data) {
|
13416
13440
|
var errorInfo, _i, _len, _results;
|
13417
|
-
$.unblockUI();
|
13418
13441
|
if (data.length === 0) {
|
13419
13442
|
return window.successMessage('チェックしました', 'ただし、プログラムを動かすとエラーが見つかるかもしれません。');
|
13420
13443
|
} else {
|
@@ -13432,8 +13455,7 @@ Blockly.Msg.CONTROLS_IF_ELSE_TITLE_ELSE = Blockly.Msg.CONTROLS_IF_MSG_ELSE;
|
|
13432
13455
|
}
|
13433
13456
|
return _results;
|
13434
13457
|
}
|
13435
|
-
}).fail(function() {
|
13436
|
-
$.unblockUI();
|
13458
|
+
}).then(this.unblockUI, this.unblockUI).fail(function() {
|
13437
13459
|
return errorMessage('チェックできませんでした');
|
13438
13460
|
});
|
13439
13461
|
},
|
@@ -13451,14 +13473,45 @@ Blockly.Msg.CONTROLS_IF_ELSE_TITLE_ELSE = Blockly.Msg.CONTROLS_IF_MSG_ELSE;
|
|
13451
13473
|
return sourceCode;
|
13452
13474
|
},
|
13453
13475
|
blockUI: function(options) {
|
13476
|
+
var message, part;
|
13477
|
+
message = '';
|
13478
|
+
if (options.title) {
|
13479
|
+
message += "<h3>\n " + options.title + "\n</h3>";
|
13480
|
+
}
|
13481
|
+
if (options.message || options.notice) {
|
13482
|
+
part = '';
|
13483
|
+
if (options.message) {
|
13484
|
+
part += "<p>\n " + options.message + "\n</p>";
|
13485
|
+
}
|
13486
|
+
if (options.notice) {
|
13487
|
+
part += "<small>\n " + options.notice + "\n</small>";
|
13488
|
+
}
|
13489
|
+
message += "<blockquote>\n " + part + "\n</blockquote>";
|
13490
|
+
}
|
13454
13491
|
return $.blockUI({
|
13455
|
-
message:
|
13492
|
+
message: message,
|
13456
13493
|
css: {
|
13457
13494
|
border: 'none',
|
13458
13495
|
'text-align': 'left',
|
13459
13496
|
'padding-left': '2em'
|
13460
13497
|
}
|
13461
13498
|
});
|
13499
|
+
},
|
13500
|
+
unblockUI: function() {
|
13501
|
+
return $.unblockUI();
|
13502
|
+
},
|
13503
|
+
confirmOverwrite_: function(data, sourceCode, canceled) {
|
13504
|
+
if (canceled == null) {
|
13505
|
+
canceled = $.noop;
|
13506
|
+
}
|
13507
|
+
if (data.source_code.error) {
|
13508
|
+
if (sourceCode.get('filename') === Smalruby.savedFilename || confirm("前に" + (sourceCode.get('filename')) + "という名前でセーブしているけど本当にセーブしますか?\nセーブすると前に作成したプログラムは消えてしまうよ!")) {
|
13509
|
+
return sourceCode.write(true);
|
13510
|
+
} else {
|
13511
|
+
canceled.call();
|
13512
|
+
return $.Deferred().reject().promise();
|
13513
|
+
}
|
13514
|
+
}
|
13462
13515
|
}
|
13463
13516
|
});
|
13464
13517
|
|
@@ -15912,23 +15965,6 @@ case end next return until\
|
|
15912
15965
|
return ['volume', Blockly.Ruby.ORDER_ATOMIC];
|
15913
15966
|
};
|
15914
15967
|
|
15915
|
-
}).call(this);
|
15916
|
-
(function() {
|
15917
|
-
$(function() {
|
15918
|
-
var session, textEditor;
|
15919
|
-
window.textEditor = textEditor = ace.edit('text-editor');
|
15920
|
-
textEditor.setTheme('ace/theme/clouds');
|
15921
|
-
textEditor.setShowInvisibles(true);
|
15922
|
-
textEditor.gotoLine(0, 0);
|
15923
|
-
textEditor.on('change', function(e) {
|
15924
|
-
return window.changed = true;
|
15925
|
-
});
|
15926
|
-
session = textEditor.getSession();
|
15927
|
-
session.setMode('ace/mode/ruby');
|
15928
|
-
session.setTabSize(2);
|
15929
|
-
return session.setUseSoftTabs(true);
|
15930
|
-
});
|
15931
|
-
|
15932
15968
|
}).call(this);
|
15933
15969
|
// This is a manifest file that'll be compiled into application.js, which will include all the files
|
15934
15970
|
// listed below.
|
@@ -15965,7 +16001,6 @@ case end next return until\
|
|
15965
16001
|
|
15966
16002
|
|
15967
16003
|
|
15968
|
-
|
15969
16004
|
|
15970
16005
|
|
15971
16006
|
;
|