From 998af82baa859fb924b264dfa7b122ef0d8e8eb3 Mon Sep 17 00:00:00 2001
From: Waheed Ahmed <waheed.ahmed@arbisoft.com>
Date: Tue, 29 Apr 2014 16:24:57 +0500
Subject: [PATCH] Fixed cheatsheet for open ended editor. STUD-1583

---
 cms/static/js/views/modals/edit_xblock.js       | 11 ++++++-----
 .../js/spec/combinedopenended/edit_spec.coffee  | 12 ++++++++++++
 .../xmodule/js/spec/problem/edit_spec.coffee    | 12 ++++++++++++
 .../js/src/combinedopenended/edit.coffee        | 17 +++++++++++++++++
 4 files changed, 47 insertions(+), 5 deletions(-)

diff --git a/cms/static/js/views/modals/edit_xblock.js b/cms/static/js/views/modals/edit_xblock.js
index 0e5e83fbefa..f8f5cef52bc 100644
--- a/cms/static/js/views/modals/edit_xblock.js
+++ b/cms/static/js/views/modals/edit_xblock.js
@@ -135,13 +135,14 @@ define(["jquery", "underscore", "gettext", "js/views/modals/base_modal",
                 var parent = $(event.target.parentElement),
                     mode = parent.data('mode');
                 event.preventDefault();
+                this.selectMode(mode);
                 var $cheatsheet = $('.simple-editor-cheatsheet');
-                if ($cheatsheet.hasClass("shown")) {
-                    $(".CodeMirror").removeAttr("style");
-                    $(".modal-content").removeAttr("style");
-                    $cheatsheet.removeClass('shown');
+                if ($cheatsheet.length == 0){
+                    $cheatsheet = $('.simple-editor-open-ended-cheatsheet');
                 }
-                this.selectMode(mode);
+                $(".CodeMirror").css({"overflow": "none"});
+                $(".modal-content").removeAttr("style");
+                $cheatsheet.removeClass('shown');
             },
 
             selectMode: function(mode) {
diff --git a/common/lib/xmodule/xmodule/js/spec/combinedopenended/edit_spec.coffee b/common/lib/xmodule/xmodule/js/spec/combinedopenended/edit_spec.coffee
index d859a59ddae..cb1efd5a942 100644
--- a/common/lib/xmodule/xmodule/js/spec/combinedopenended/edit_spec.coffee
+++ b/common/lib/xmodule/xmodule/js/spec/combinedopenended/edit_spec.coffee
@@ -20,6 +20,18 @@ describe 'OpenEndedMarkdownEditingDescriptor', ->
       expect(saveResult.nullout).toEqual(['markdown'])
       expect(saveResult.data).toEqual('xml only')
 
+  describe 'advanced editor opens correctly', ->
+    it 'click on advanced editor should work', ->
+      loadFixtures 'combinedopenended-with-markdown.html'
+      @descriptor = new OpenEndedMarkdownEditingDescriptor($('.combinedopenended-editor'))
+      spyOn(@descriptor, 'confirmConversionToXml').andReturn(true)
+      expect(@descriptor.confirmConversionToXml).not.toHaveBeenCalled()
+      e = jasmine.createSpyObj('e', [ 'preventDefault' ])
+      @descriptor.onShowXMLButton(e)
+      expect(e.preventDefault).toHaveBeenCalled()
+      expect(@descriptor.confirmConversionToXml).toHaveBeenCalled()
+      expect($('.editor-bar').length).toEqual(0)
+
   describe 'insertPrompt', ->
     it 'inserts the template if selection is empty', ->
       revisedSelection = OpenEndedMarkdownEditingDescriptor.insertPrompt('')
diff --git a/common/lib/xmodule/xmodule/js/spec/problem/edit_spec.coffee b/common/lib/xmodule/xmodule/js/spec/problem/edit_spec.coffee
index e1bdb1e6e0f..f59a36baf92 100644
--- a/common/lib/xmodule/xmodule/js/spec/problem/edit_spec.coffee
+++ b/common/lib/xmodule/xmodule/js/spec/problem/edit_spec.coffee
@@ -20,6 +20,18 @@ describe 'MarkdownEditingDescriptor', ->
       expect(saveResult.nullout).toEqual(['markdown'])
       expect(saveResult.data).toEqual('xml only')
 
+  describe 'advanced editor opens correctly', ->
+    it 'click on advanced editor should work', ->
+      loadFixtures 'problem-with-markdown.html'
+      @descriptor = new MarkdownEditingDescriptor($('.problem-editor'))
+      spyOn(@descriptor, 'confirmConversionToXml').andReturn(true)
+      expect(@descriptor.confirmConversionToXml).not.toHaveBeenCalled()
+      e = jasmine.createSpyObj('e', [ 'preventDefault' ])
+      @descriptor.onShowXMLButton(e)
+      expect(e.preventDefault).toHaveBeenCalled()
+      expect(@descriptor.confirmConversionToXml).toHaveBeenCalled()
+      expect($('.editor-bar').length).toEqual(0)
+
   describe 'insertMultipleChoice', ->
     it 'inserts the template if selection is empty', ->
       revisedSelection = MarkdownEditingDescriptor.insertMultipleChoice('')
diff --git a/common/lib/xmodule/xmodule/js/src/combinedopenended/edit.coffee b/common/lib/xmodule/xmodule/js/src/combinedopenended/edit.coffee
index 80efa37fdf3..9434fa7e020 100644
--- a/common/lib/xmodule/xmodule/js/src/combinedopenended/edit.coffee
+++ b/common/lib/xmodule/xmodule/js/src/combinedopenended/edit.coffee
@@ -87,6 +87,8 @@ Write a persuasive essay to a newspaper reflecting your views on censorship in l
   ###
   onShowXMLButton: (e) =>
     e.preventDefault();
+    if @cheatsheet != undefined
+      @addRemoveCheatsheetCSS()
     if @confirmConversionToXml()
       @createXMLEditor(OpenEndedMarkdownEditingDescriptor.markdownToXml(@markdown_editor.getValue()))
       # Need to refresh to get line numbers to display properly (and put cursor position to 0)
@@ -131,8 +133,23 @@ Write a persuasive essay to a newspaper reflecting your views on censorship in l
       @cheatsheet = $($('#simple-editor-open-ended-cheatsheet').html())
       $(@markdown_editor.getWrapperElement()).append(@cheatsheet)
 
+    @addRemoveCheatsheetCSS()
+
     setTimeout (=> @cheatsheet.toggleClass('shown')), 10
 
+
+  ###
+  Function to add/remove CSS for cheatsheet.
+  ###
+  addRemoveCheatsheetCSS: () =>
+    if !@cheatsheet.hasClass("shown")
+      $(".CodeMirror").css({"overflow": "visible"})
+      $(".modal-content").css({"overflow-y": "visible", "overflow-x": "visible"})
+    else
+      $(".CodeMirror").css({"overflow": ""})
+      $(".modal-content").removeAttr("style")
+
+
   ###
   Stores the current editor and hides the one that is not displayed.
   ###
-- 
GitLab