separate file for editor in edit view
This commit is contained in:
43
app/assets/javascripts/editor-edit.js
Normal file
43
app/assets/javascripts/editor-edit.js
Normal file
@ -0,0 +1,43 @@
|
||||
$(function() {
|
||||
var ACE_FILES_PATH = '/assets/ace/';
|
||||
var THEME = 'ace/theme/textmate';
|
||||
|
||||
var configureEditors = function() {
|
||||
_.each(['modePath', 'themePath', 'workerPath'], function(attribute) {
|
||||
ace.config.set(attribute, ACE_FILES_PATH);
|
||||
});
|
||||
};
|
||||
|
||||
var initializeEditors = function() {
|
||||
$('.editor').each(function(index, element) {
|
||||
var editor = ace.edit(element);
|
||||
|
||||
var document = editor.getSession().getDocument();
|
||||
// insert pre-existing code into editor. we have to use insertLines, otherwise the deltas are not properly added
|
||||
var file_id = $(element).data('file-id');
|
||||
var content = $('.editor-content[data-file-id=' + file_id + ']');
|
||||
|
||||
document.insertLines(0, content.text().split(/\n/));
|
||||
// remove last (empty) that is there by default line
|
||||
document.removeLines(document.getLength() - 1, document.getLength() - 1);
|
||||
editor.setReadOnly($(element).data('read-only') !== undefined);
|
||||
editor.setShowPrintMargin(false);
|
||||
editor.setTheme(THEME);
|
||||
editor.commands.bindKey("ctrl+alt+0", null);
|
||||
var session = editor.getSession();
|
||||
session.setMode($(element).data('mode'));
|
||||
session.setTabSize($(element).data('indent-size'));
|
||||
session.setUseSoftTabs(true);
|
||||
session.setUseWrapMode(true);
|
||||
|
||||
var file_id = $(element).data('id');
|
||||
}
|
||||
)};
|
||||
|
||||
if ($('#editor-edit').isPresent()) {
|
||||
configureEditors();
|
||||
initializeEditors();
|
||||
$('.frame').show();
|
||||
}
|
||||
});
|
||||
|
@ -6,7 +6,7 @@ class ExercisesController < ApplicationController
|
||||
|
||||
before_action :handle_file_uploads, only: [:create, :update]
|
||||
before_action :set_execution_environments, only: [:create, :edit, :new, :update]
|
||||
before_action :set_exercise, only: MEMBER_ACTIONS + [:clone, :implement, :edit, :run, :statistics, :submit, :reload]
|
||||
before_action :set_exercise, only: MEMBER_ACTIONS + [:clone, :implement, :run, :statistics, :submit, :reload]
|
||||
before_action :set_external_user, only: [:statistics]
|
||||
before_action :set_file_types, only: [:create, :edit, :new, :update]
|
||||
|
||||
@ -63,8 +63,7 @@ class ExercisesController < ApplicationController
|
||||
end
|
||||
|
||||
def edit
|
||||
@files = (@submission ? @submission.collect_files : @exercise.files).select(&:visible).sort_by(&:name_with_extension)
|
||||
@paths = collect_paths(@files)
|
||||
|
||||
end
|
||||
|
||||
def import_proforma_xml
|
||||
|
@ -1,5 +1,4 @@
|
||||
#editor.panel-group.row data-exercise-id=@exercise.id
|
||||
#files data-entries=FileTree.new(@files).to_js_tree
|
||||
#editor-edit.panel-group.row data-exercise-id=@exercise.id
|
||||
#frames
|
||||
.frame data-executable=file.file_type.executable? data-filename=file.name_with_extension data-renderable=file.file_type.renderable? data-role=file.role data-binary=file.file_type.binary? data-context-type=file.context_type
|
||||
.editor-content.hidden data-file-id=file.ancestor_id = file.content
|
||||
|
@ -9,7 +9,6 @@
|
||||
.form-group
|
||||
= f.label(:description)
|
||||
= f.pagedown_editor :description
|
||||
|
||||
.form-group
|
||||
= f.label(:execution_environment_id)
|
||||
= f.collection_select(:execution_environment_id, @execution_environments, :id, :name, {}, class: 'form-control')
|
||||
@ -31,19 +30,12 @@
|
||||
= t('activerecord.attributes.exercise.allow_file_creation')
|
||||
h2 = t('activerecord.attributes.exercise.files')
|
||||
|
||||
/hidden editor -> to be deleted
|
||||
.hide = render('ace', exercise: @exercise, file: @files.first)
|
||||
/after use $('.frame').show() in js console everything works fine, probably editors are hidden somewhere in editor.js because we get "display:none" on frames
|
||||
|
||||
ul#files.list-unstyled.panel-group
|
||||
= @exercise.files.each do |file|
|
||||
= render partial: 'file_form', locals: { file: file }
|
||||
/= f.fields_for :files do |files_form|
|
||||
/ = render('file_form', f: files_form, file: files_form.object, code: @files)
|
||||
|
||||
a#add-file.btn.btn-default.btn-sm.pull-right href='#' = t('.add_file')
|
||||
|
||||
ul#dummies.hidden
|
||||
// = f.fields_for(:files, CodeOcean::File.new, child_index: 'index') do |files_form|
|
||||
= render partial: 'file_form', locals: { file: CodeOcean::File.new }
|
||||
//= render('file_form', f: files_form, file: nil)
|
||||
.actions = render('shared/submit_button', f: f, object: @exercise)
|
||||
|
Reference in New Issue
Block a user