Commit 2206b8a0 by Sarina Canelake

Merge pull request #10324 from stvstnfrd/debt/circuit

Remove circuit djangoapp from LMS
parents 9f89112e c2fe4483
......@@ -1987,23 +1987,6 @@ function update_schematics() {
}
window.update_schematics = update_schematics;
// add ourselves to the tasks that get performed when window is loaded
function add_schematic_handler(other_onload) {
return function() {
// execute othe onload functions first
if (other_onload) other_onload();
update_schematics();
}
}
// ask each schematic input widget to update its value field for submission
function prepare_schematics() {
var schematics = $('.schematic');
for (var i = schematics.length - 1; i >= 0; i--)
schematics[i].schematic.update_value();
}
schematic = (function() {
var background_style = 'rgb(220,220,220)';
var element_style = 'rgb(255,255,255)';
......@@ -6196,4 +6179,3 @@ schematic = (function() {
}
return module;
}());
var schematic_height = 220;
var schematic_width = 400;
var styling_height_delta = 2; //How many pixels are added to the height of the box because of styling (like a shadow)
var styling_width_delta = 2;
$(function() {
// TODO: someone should fix all of this...
//$("a[rel*=leanModal]").leanModal(); //TODO: Make this work with the new modal library. Try and integrate this with the "slices"
......@@ -50,9 +45,5 @@ $(function() {
editingCircuit.schematic.load_schematic(saving_circuit, "");
editingCircuit.schematic.zoomall();
if (editingCircuit.codeMirrorLine) {
editingCircuit.codeMirrorLine.replace(0, null, "circuit-schematic:" + saving_circuit);
}
});
});
......@@ -19,7 +19,7 @@ CodeMirror.defineMode("edx_markdown", function(cmCfg, modeCfg) {
, olRE = /^[0-9]+\.\s+/
, headerRE = /^(?:\={3,}|-{3,})$/
, textRE = /^[^\[*_\\<>`]+/
, circuitRE = /^circuit-schematic:(.*)$/;
;
function switchInline(stream, state, f) {
state.f = state.inline = f;
......@@ -55,43 +55,9 @@ CodeMirror.defineMode("edx_markdown", function(cmCfg, modeCfg) {
.replace(/'/g, "&#039;");
}
var circuit_formatter = {
creator: function(text) {
var circuit_value = text.match(circuitRE)[1]
circuit_value = escapeHtml(circuit_value);
var html = "<div style='display:block;line-height:0;' class='schematic_container'><a href='#circuit_editor_modal' data-toggle='modal' class='schematic_open' style='display:inline-block;'>" +
"<input type='hidden' parts='' value='" + circuit_value + "' width='" + schematic_width + "' height='" + schematic_height + "' analyses='' class='schematic ctrls'/></a></div>";
return html;
},
size: function(text) {
return {width: schematic_width + styling_width_delta, height:schematic_height + styling_height_delta};
},
callback: function(node, line) {
try {
update_schematics();
var schmInput = node.firstChild.firstChild;
schmInput.codeMirrorLine = line;
if (schmInput.schematic) { //This is undefined if there was an error making the schematic
schmInput.schematic.canvas.style.display = "block"; //Otherwise, it gets line height and is a weird size
schmInput.schematic.always_draw_grid = true;
schmInput.schematic.redraw_background();
}
} catch (err) {
console.log("Error in edx_markdown callback: " + err);
}
}
};
function blockNormal(stream, state) {
var match;
if (stream.sol() && stream.match(circuitRE)) {
stream.skipToEnd();
return circuit_formatter;
} else if (state.indentationDiff >= 4) {
if (state.indentationDiff >= 4) {
state.indentation -= state.indentationDiff;
stream.skipToEnd();
return code;
......
from django.db import models
class ServerCircuit(models.Model):
# Later, add owner, who can edit, part of what app, etc.
name = models.CharField(max_length=32, unique=True, db_index=True)
schematic = models.TextField(blank=True)
def __unicode__(self):
return self.name + ":" + self.schematic[:8]
import json
import xml.etree.ElementTree
from django.http import Http404
from django.http import HttpResponse
from edxmako.shortcuts import render_to_response
from .models import ServerCircuit
def circuit_line(circuit):
''' Returns string for an appropriate input element for a circuit.
TODO: Rename. '''
if not circuit.isalnum():
raise Http404()
try:
sc = ServerCircuit.objects.get(name=circuit)
schematic = sc.schematic
except:
schematic = ''
circuit_line = xml.etree.ElementTree.Element('input')
circuit_line.set('type', 'hidden')
circuit_line.set('class', 'schematic')
circuit_line.set('width', '640')
circuit_line.set('height', '480')
circuit_line.set('name', 'schematic')
circuit_line.set('id', 'schematic_' + circuit)
circuit_line.set('value', schematic) # We do it this way for security -- guarantees users cannot put funny stuff in schematic.
return xml.etree.ElementTree.tostring(circuit_line)
def edit_circuit(_request, circuit):
try:
sc = ServerCircuit.objects.get(name=circuit)
except:
sc = None
if not circuit.isalnum():
raise Http404()
response = render_to_response('edit_circuit.html', {'name': circuit,
'circuit_line': circuit_line(circuit)})
response['Cache-Control'] = 'no-cache'
return response
def save_circuit(request, circuit):
if not circuit.isalnum():
raise Http404()
print dict(request.POST)
schematic = request.POST['schematic']
print schematic
try:
sc = ServerCircuit.objects.get(name=circuit)
except:
sc = ServerCircuit()
sc.name = circuit
sc.schematic = schematic
print ":", sc.schematic
sc.save()
json_str = json.dumps({'results': 'success'})
response = HttpResponse(json_str, mimetype='application/json')
response['Cache-Control'] = 'no-cache'
return response
#!/usr/bin/env python
'''
Image Circuit Extension for Python-Markdown
======================================
Any single line beginning with circuit-schematic: and followed by data (which should be json data, but this
is not enforced at this level) will be displayed as a circuit schematic. This is simply an input element with
the value set to the data. It is left to javascript on the page to render that input as a circuit schematic.
ex:
circuit-schematic:[["r",[128,48,0],{"r":"1","_json_":0},["2","1"]],["view",0,0,2,null,null,null,null,null,null,null],["dc",{"0":0,"1":1,"I(_3)":-1}]]
(This is a schematic with a single one-ohm resistor. Note that this data is not meant to be user-editable.)
'''
import markdown
import re
from django.utils.html import escape
try:
# Markdown 2.1.0 changed from 2.0.3. We try importing the new version first,
# but import the 2.0.3 version if it fails
from markdown.util import etree
except:
from markdown import etree
class CircuitExtension(markdown.Extension):
def __init__(self, configs):
for key, value in configs:
self.setConfig(key, value)
def extendMarkdown(self, md, md_globals):
## Because Markdown treats contigous lines as one block of text, it is hard to match
## a regex that must occupy the whole line (like the circuit regex). This is why we have
## a preprocessor that inspects the lines and replaces the matched lines with text that is
## easier to match
md.preprocessors.add('circuit', CircuitPreprocessor(md), "_begin")
pattern = CircuitLink(r'processed-schematic:(?P<data>.*?)processed-schematic-end')
pattern.md = md
pattern.ext = self
md.inlinePatterns.add('circuit', pattern, "<reference")
class CircuitPreprocessor(markdown.preprocessors.Preprocessor):
preRegex = re.compile(r'^circuit-schematic:(?P<data>.*)$')
def run(self, lines):
def convertLine(line):
m = self.preRegex.match(line)
if m:
return 'processed-schematic:{0}processed-schematic-end'.format(m.group('data'))
else:
return line
return [convertLine(line) for line in lines]
class CircuitLink(markdown.inlinepatterns.Pattern):
def handleMatch(self, m):
data = m.group('data')
data = escape(data)
return etree.fromstring("<div align='center'><input type='hidden' parts='' value='" + data + "' analyses='' class='schematic ctrls' width='400' height='220'/></div>")
def makeExtension(configs=None):
to_return = CircuitExtension(configs=configs)
return to_return
......@@ -3,7 +3,7 @@
from wiki.core.plugins.base import BasePlugin
from wiki.core.plugins import registry as plugin_registry
from course_wiki.plugins.markdownedx import mdx_circuit, mdx_mathjax, mdx_video
from course_wiki.plugins.markdownedx import mdx_mathjax, mdx_video
class ExtendMarkdownPlugin(BasePlugin):
......@@ -11,8 +11,9 @@ class ExtendMarkdownPlugin(BasePlugin):
This plugin simply loads all of the markdown extensions we use in edX.
"""
markdown_extensions = [mdx_circuit.CircuitExtension(configs={}),
mdx_mathjax.MathJaxExtension(configs={}),
mdx_video.VideoExtension(configs={})]
markdown_extensions = [
mdx_mathjax.MathJaxExtension(configs={}),
mdx_video.VideoExtension(configs={}),
]
plugin_registry.register(ExtendMarkdownPlugin)
......@@ -1818,7 +1818,6 @@ INSTALLED_APPS = (
'openedx.core.djangoapps.theming',
# Our courseware
'circuit',
'courseware',
'student',
......
......@@ -18,15 +18,6 @@ $ ->
if $('body').hasClass('courseware')
Courseware.start()
# Preserved for backward compatibility
window.submit_circuit = (circuit_id) ->
$("input.schematic").each (index, el) ->
el.schematic.update_value()
schematic_value $("#schematic_#{circuit_id}").attr("value")
$.postWithPrefix "/save_circuit/#{circuit_id}", schematic: schematic_value, (data) ->
alert('Saved') if data.results == 'success'
window.postJSON = (url, data, callback) ->
$.postWithPrefix url, data, callback
......
......@@ -973,57 +973,3 @@ section.wiki {
width: 100% !important;
margin-left: 0;
}
#circuit_editor_modal.modal {
@extend %ui-depth4;
width: 648px;
margin-left: -325px;
top: 150px;
.modal-header {
h1, p {
color: $white;
}
h1 {
margin: 3px 12px 8px;
font-size: 1.1em;
}
p {
font-size: 0.9em;
margin: 5px 12px 20px;
line-height: 1em;
}
}
.modal-body {
padding-bottom: 8px;
}
.modal-footer {
margin: 12px;
}
.modal-footer .btn {
@include button(simple, #eee);
font-size: 0.8em;
margin-right: ($baseline/4);
line-height: 1.2em;
text-transform: none !important;
letter-spacing: 0 !important;
&:hover, &:focus {
color: $base-font-color;
text-decoration: none;
}
&.btn-primary {
@include button;
font-size: 0.8em;
}
margin-right: ($baseline/2);
}
}
<div align="center">
<form onsubmit="return submit_circuit('${name}');" action="" method="post">
<!--input type="hidden" class="schematic" width="600" height="400" name="schematic" value="" /-->
${ circuit_line }
<input type="submit" value="save">
<input type="hidden" name="csrfmiddlewaretoken" id="csrfmiddlewaretoken">
</form>
</div>
<div align="center" id="div_wiki_circuit_${name}" class="div_wiki_circuit">
</div>
......@@ -34,10 +34,6 @@
{% addtoblock 'js' %}
{% comment %} These scripts load at the bottom of the body {% endcomment %}
<script>
window.onload = add_schematic_handler(window.onload);
</script>
<script src="{% static 'js/bootstrap-alert.js' %}"></script>
<script src="{% static 'js/bootstrap-collapse.js' %}"></script>
<script src="{% static 'js/bootstrap-modal.js' %}"></script>
......
......@@ -22,7 +22,6 @@
</section>
<section>
<h3>{% blocktrans with platform_name=settings.PLATFORM_NAME %}{{ platform_name }} Additions:{% endblocktrans %}</h3>
<pre>circuit-schematic:</pre>
<pre>$LaTeX {% trans "Math Expression" %}$</pre>
</section>
</div>
......
......@@ -41,11 +41,6 @@
{% compressed_js 'application' %}
{% compressed_js 'module-js' %}
<script>
window.onload = add_schematic_handler(window.onload);
</script>
{% with mathjax_mode='wiki' %}
{% include "mathjax_include.html" %}
{% endwith %}
......
......@@ -334,10 +334,6 @@ if settings.COURSEWARE_ENABLED:
# TODO: These views need to be updated before they work
url(r'^calculate$', 'util.views.calculate'),
# TODO: We should probably remove the circuit package. I believe it was only used in the old way of saving wiki
# circuits for the wiki
# url(r'^edit_circuit/(?P<circuit>[^/]*)$', 'circuit.views.edit_circuit'),
# url(r'^save_circuit/(?P<circuit>[^/]*)$', 'circuit.views.save_circuit'),
url(r'^courses/?$', 'branding.views.courses', name="courses"),
url(r'^change_enrollment$',
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment