Merge pull request #10324 from stvstnfrd/debt/circuit
Remove circuit djangoapp from LMS
This commit is contained in:
@@ -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;
|
||||
}());
|
||||
|
||||
|
||||
@@ -1,8 +1,3 @@
|
||||
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, "'");
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
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]
|
||||
@@ -1,65 +0,0 @@
|
||||
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
|
||||
@@ -1,71 +0,0 @@
|
||||
#!/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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
<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>
|
||||
@@ -1,2 +0,0 @@
|
||||
<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$',
|
||||
|
||||
Reference in New Issue
Block a user