Detailed commit messages: deleted old tinymce new tinymce js changes to support new tinymce scss changes for alignments Include all the controls on the toolbar that we previously had. Changes to support Bulk e-mail usage. adding new studio skin for TinyMCE4 Get handling of static image links working again. Delete old Studio skin. Version 1.3 of CodeMirror plugin. Modify paths for location of CodeMirror files. Fire events when CodeMirror Editor is open and closed. Needed to switch static links back and forth. Remove CodeMirror tabbed editor. fixed tinymce visual editor css Change how we detect that an image has been inserted. made the codemirror look more studio-like reordered the tinymce buttons Update unit tests. Update acceptance test for image plugin. Make sure to strip out temporary caret. It can get left behind in style blocks. Test for style block being maintained. Allow TinyMCE to create p's, else formatting doesn't work. Add tests for toolbar buttons and converting links. Add test for code format toolbar button. Remove unnecessary code. Remove unused testing templates and unused tabs. Update tinymce paths. Fire an event with the link plugin closes so we can rewrite links. pep8 Updates from code review. Change the name of the button to "Edit HTML". Changed menu name for consistency, but we don't show it. Changed name of "code" toolbar button to "Code block". Switch from tabbed Visual/HTML Editor for HTML modules to showing the code editor as a plugin within TinyMCE (triggered from toolbar). STUD-1422 Fire events before and after the image dialog is shown. We use this to rewrite links. Change the event handling for image plugin. Fixes FireFox bug, and allows us to correct the image path when we show the plugin (as opposed ot only correcting path when we close the plugin). Code review feedback. Fire events before and after the link dialog is shown. This allows us to convert the static links. Remove unnecessary helper method. keeping the component editor inside the component window Use compressed CodeMirror file. replaced code icon in TinyMCE editor; simplified UI on TMCE toolbar Change code editor icon to say HTML. Move code style block button. Update tests for minor UI changes. Code editor button no longer shows an icon, and code style toolbar button location has moved. Fix typos.
293 lines
10 KiB
HTML
293 lines
10 KiB
HTML
## -*- coding: utf-8 -*-
|
|
<%! from django.utils.translation import ugettext as _ %>
|
|
<%namespace name='static' file='static_content.html'/>
|
|
|
|
<!doctype html>
|
|
<!--[if IE 7]><html class="ie7 lte9 lte8 lte7" lang="${LANGUAGE_CODE}"><![endif]-->
|
|
<!--[if IE 8]><html class="ie8 lte9 lte8" lang="${LANGUAGE_CODE}"><![endif]-->
|
|
<!--[if IE 9]><html class="ie9 lte9" lang="${LANGUAGE_CODE}"><![endif]-->
|
|
<!--[if gt IE 9]><!--><html lang="${LANGUAGE_CODE}"><!--<![endif]-->
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
|
<title>
|
|
<%block name="title"></%block> |
|
|
% if context_course:
|
|
<% ctx_loc = context_course.location %>
|
|
${context_course.display_name_with_default} |
|
|
% endif
|
|
edX Studio
|
|
</title>
|
|
|
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
|
<meta name="path_prefix" content="${EDX_ROOT_URL}">
|
|
|
|
<%static:css group='style-vendor'/>
|
|
<%static:css group='style-app'/>
|
|
<%static:css group='style-app-extend1'/>
|
|
<%static:css group='style-xmodule'/>
|
|
|
|
<%include file="widgets/segment-io.html" />
|
|
|
|
<%block name="header_extras"></%block>
|
|
</head>
|
|
|
|
<body class="<%block name='bodyclass'></%block> hide-wip lang_${LANGUAGE_CODE}">
|
|
<a class="nav-skip" href="#content">${_("Skip to this view's content")}</a>
|
|
|
|
<script type="text/javascript">
|
|
window.baseUrl = "${settings.STATIC_URL}";
|
|
var require = {
|
|
baseUrl: baseUrl,
|
|
waitSeconds: 60,
|
|
paths: {
|
|
"domReady": "js/vendor/domReady",
|
|
"gettext": "/i18n",
|
|
"mustache": "js/vendor/mustache",
|
|
"codemirror": "js/vendor/codemirror-compressed",
|
|
"codemirror/stex": "js/vendor/CodeMirror/stex",
|
|
"jquery": "js/vendor/jquery.min",
|
|
"jquery.ui": "js/vendor/jquery-ui.min",
|
|
"jquery.form": "js/vendor/jquery.form",
|
|
"jquery.markitup": "js/vendor/markitup/jquery.markitup",
|
|
"jquery.leanModal": "js/vendor/jquery.leanModal.min",
|
|
"jquery.ajaxQueue": "js/vendor/jquery.ajaxQueue",
|
|
"jquery.smoothScroll": "js/vendor/jquery.smooth-scroll.min",
|
|
"jquery.timepicker": "js/vendor/timepicker/jquery.timepicker",
|
|
"jquery.cookie": "js/vendor/jquery.cookie",
|
|
"jquery.qtip": "js/vendor/jquery.qtip.min",
|
|
"jquery.scrollTo": "js/vendor/jquery.scrollTo-1.4.2-min",
|
|
"jquery.flot": "js/vendor/flot/jquery.flot.min",
|
|
"jquery.fileupload": "js/vendor/jQuery-File-Upload/js/jquery.fileupload",
|
|
"jquery.iframe-transport": "js/vendor/jQuery-File-Upload/js/jquery.iframe-transport",
|
|
"jquery.inputnumber": "js/vendor/html5-input-polyfills/number-polyfill",
|
|
"jquery.immediateDescendents": "coffee/src/jquery.immediateDescendents",
|
|
"datepair": "js/vendor/timepicker/datepair",
|
|
"date": "js/vendor/date",
|
|
"tzAbbr": "js/vendor/tzAbbr",
|
|
"underscore": "js/vendor/underscore-min",
|
|
"underscore.string": "js/vendor/underscore.string.min",
|
|
"backbone": "js/vendor/backbone-min",
|
|
"backbone.associations": "js/vendor/backbone-associations-min",
|
|
"backbone.paginator": "js/vendor/backbone.paginator.min",
|
|
"tinymce": "js/vendor/tiny_mce/tinymce.min",
|
|
"jquery.tinymce": "js/vendor/tiny_mce/jquery.tinymce.min",
|
|
"xmodule": "/xmodule/xmodule",
|
|
"xblock": "coffee/src/xblock",
|
|
"utility": "js/src/utility",
|
|
"accessibility": "js/src/accessibility_tools",
|
|
"draggabilly": "js/vendor/draggabilly.pkgd",
|
|
"URI": "js/vendor/URI.min",
|
|
|
|
// externally hosted files
|
|
"tender": [
|
|
"//edxedge.tenderapp.com/tender_widget",
|
|
// if tender fails to load, fallback on a local file
|
|
// so that require doesn't fall over
|
|
"js/src/tender_fallback"
|
|
],
|
|
"mathjax": "//edx-static.s3.amazonaws.com/mathjax-MathJax-727332c/MathJax.js?config=TeX-MML-AM_HTMLorMML-full&delayStartupUntil=configured",
|
|
"youtube": [
|
|
// youtube URL does not end in ".js". We add "?noext" to the path so
|
|
// that require.js adds the ".js" to the query component of the URL,
|
|
// and leaves the path component intact.
|
|
"//www.youtube.com/player_api?noext",
|
|
// if youtube fails to load, fallback on a local file
|
|
// so that require doesn't fall over
|
|
"js/src/youtube_fallback"
|
|
]
|
|
},
|
|
shim: {
|
|
"gettext": {
|
|
exports: "gettext"
|
|
},
|
|
"date": {
|
|
exports: "Date"
|
|
},
|
|
"jquery.ui": {
|
|
deps: ["jquery"],
|
|
exports: "jQuery.ui"
|
|
},
|
|
"jquery.form": {
|
|
deps: ["jquery"],
|
|
exports: "jQuery.fn.ajaxForm"
|
|
},
|
|
"jquery.markitup": {
|
|
deps: ["jquery"],
|
|
exports: "jQuery.fn.markitup"
|
|
},
|
|
"jquery.leanmodal": {
|
|
deps: ["jquery"],
|
|
exports: "jQuery.fn.leanModal"
|
|
},
|
|
"jquery.ajaxQueue": {
|
|
deps: ["jquery"],
|
|
exports: "jQuery.fn.ajaxQueue"
|
|
},
|
|
"jquery.smoothScroll": {
|
|
deps: ["jquery"],
|
|
exports: "jQuery.fn.smoothScroll"
|
|
},
|
|
"jquery.cookie": {
|
|
deps: ["jquery"],
|
|
exports: "jQuery.fn.cookie"
|
|
},
|
|
"jquery.qtip": {
|
|
deps: ["jquery"],
|
|
exports: "jQuery.fn.qtip"
|
|
},
|
|
"jquery.scrollTo": {
|
|
deps: ["jquery"],
|
|
exports: "jQuery.fn.scrollTo",
|
|
},
|
|
"jquery.flot": {
|
|
deps: ["jquery"],
|
|
exports: "jQuery.fn.plot"
|
|
},
|
|
"jquery.fileupload": {
|
|
deps: ["jquery.iframe-transport"],
|
|
exports: "jQuery.fn.fileupload"
|
|
},
|
|
"jquery.inputnumber": {
|
|
deps: ["jquery"],
|
|
exports: "jQuery.fn.inputNumber"
|
|
},
|
|
"jquery.tinymce": {
|
|
deps: ["jquery", "tinymce"],
|
|
exports: "jQuery.fn.tinymce"
|
|
},
|
|
"datepair": {
|
|
deps: ["jquery.ui", "jquery.timepicker"]
|
|
},
|
|
"underscore": {
|
|
exports: "_"
|
|
},
|
|
"backbone": {
|
|
deps: ["underscore", "jquery"],
|
|
exports: "Backbone"
|
|
},
|
|
"backbone.associations": {
|
|
deps: ["backbone"],
|
|
exports: "Backbone.Associations"
|
|
},
|
|
"backbone.paginator": {
|
|
deps: ["backbone"],
|
|
exports: "Backbone.Paginator"
|
|
},
|
|
"tender": {
|
|
exports: 'Tender'
|
|
},
|
|
"youtube": {
|
|
exports: "YT"
|
|
},
|
|
"codemirror": {
|
|
exports: "CodeMirror"
|
|
},
|
|
"codemirror/stex": {
|
|
deps: ["codemirror"]
|
|
},
|
|
"tinymce": {
|
|
exports: "tinymce"
|
|
},
|
|
"mathjax": {
|
|
exports: "MathJax",
|
|
init: function() {
|
|
MathJax.Hub.Config({
|
|
tex2jax: {
|
|
inlineMath: [
|
|
["\\(","\\)"],
|
|
['[mathjaxinline]','[/mathjaxinline]']
|
|
],
|
|
displayMath: [
|
|
["\\[","\\]"],
|
|
['[mathjax]','[/mathjax]']
|
|
]
|
|
}
|
|
});
|
|
MathJax.Hub.Configured();
|
|
}
|
|
},
|
|
"URI": {
|
|
exports: "URI"
|
|
},
|
|
"xblock/core": {
|
|
exports: "XBlock",
|
|
deps: ["jquery", "jquery.immediateDescendents"]
|
|
},
|
|
"xblock/runtime.v1": {
|
|
exports: "XBlock",
|
|
deps: ["xblock/core"]
|
|
},
|
|
|
|
"coffee/src/main": {
|
|
deps: ["coffee/src/ajax_prefix"]
|
|
},
|
|
"coffee/src/logger": {
|
|
exports: "Logger",
|
|
deps: ["coffee/src/ajax_prefix"]
|
|
}
|
|
},
|
|
// load jquery and gettext automatically
|
|
deps: ["jquery", "gettext"],
|
|
callback: function() {
|
|
// load other scripts on every page, after jquery loads
|
|
require(["js/base", "coffee/src/main", "coffee/src/logger", "datepair", "accessibility"]);
|
|
// we need "datepair" because it dynamically modifies the page
|
|
// when it is loaded -- yuck!
|
|
}
|
|
};
|
|
</script>
|
|
<script type="text/javascript" src="${static.url("js/vendor/require.js")}"></script>
|
|
|
|
## js templates
|
|
<script id="system-feedback-tpl" type="text/template">
|
|
<%static:include path="js/system-feedback.underscore" />
|
|
</script>
|
|
|
|
|
|
% if context_course:
|
|
<script type="text/javascript">
|
|
require(['js/models/course'], function(Course) {
|
|
window.course = new Course({
|
|
id: "${context_course.id}",
|
|
name: "${context_course.display_name_with_default | h}",
|
|
url_name: "${context_course.location.name | h}",
|
|
org: "${context_course.location.org | h}",
|
|
num: "${context_course.location.course | h}",
|
|
revision: "${context_course.location.revision | h}"
|
|
});
|
|
});
|
|
</script>
|
|
% endif
|
|
|
|
<!-- view -->
|
|
<div class="wrapper wrapper-view">
|
|
<%include file="widgets/header.html" />
|
|
|
|
<div id="page-alert"></div>
|
|
|
|
<div id="content">
|
|
<%block name="content"></%block>
|
|
</div>
|
|
|
|
% if user.is_authenticated():
|
|
<script type="text/javascript">
|
|
require(['js/sock']);
|
|
</script>
|
|
<%include file="widgets/sock.html" />
|
|
% endif
|
|
|
|
<%include file="widgets/footer.html" />
|
|
<%include file="widgets/tender.html" />
|
|
|
|
<div id="page-notification"></div>
|
|
</div>
|
|
|
|
<div id="page-prompt"></div>
|
|
<%block name="jsextra"></%block>
|
|
<div class="modal-cover"></div>
|
|
</body>
|
|
|
|
<%include file="widgets/qualaroo.html" />
|
|
</html>
|