From 476188990ff48d3a016bb86a49d26f6c6490a642 Mon Sep 17 00:00:00 2001 From: yqbk Date: Wed, 17 Aug 2016 15:37:36 +0200 Subject: [PATCH] separate file for editor in edit view --- app/assets/javascripts/editor-edit.js | 43 +++++++++++++++++++++++++ app/controllers/exercises_controller.rb | 5 ++- app/views/exercises/_ace.html.slim | 3 +- app/views/exercises/_form.html.slim | 10 +----- 4 files changed, 47 insertions(+), 14 deletions(-) create mode 100644 app/assets/javascripts/editor-edit.js diff --git a/app/assets/javascripts/editor-edit.js b/app/assets/javascripts/editor-edit.js new file mode 100644 index 00000000..5ae92c33 --- /dev/null +++ b/app/assets/javascripts/editor-edit.js @@ -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(); + } +}); + diff --git a/app/controllers/exercises_controller.rb b/app/controllers/exercises_controller.rb index f7ffc24f..d1fcadd4 100644 --- a/app/controllers/exercises_controller.rb +++ b/app/controllers/exercises_controller.rb @@ -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 diff --git a/app/views/exercises/_ace.html.slim b/app/views/exercises/_ace.html.slim index 2fc2875d..c694bb49 100644 --- a/app/views/exercises/_ace.html.slim +++ b/app/views/exercises/_ace.html.slim @@ -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 diff --git a/app/views/exercises/_form.html.slim b/app/views/exercises/_form.html.slim index 4b4baea1..7ce719b3 100644 --- a/app/views/exercises/_form.html.slim +++ b/app/views/exercises/_form.html.slim @@ -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)