Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
E
edx-platform
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
edx
edx-platform
Commits
7b5f9b80
Commit
7b5f9b80
authored
Jun 23, 2015
by
Andy Armstrong
Committed by
cahrens
Jul 20, 2015
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Implement RequireJS Optimizer in the LMS
TNL-2487
parent
80cf4d6e
Hide whitespace changes
Inline
Side-by-side
Showing
32 changed files
with
364 additions
and
141 deletions
+364
-141
cms/envs/bok_choy.py
+2
-2
cms/envs/common.py
+4
-2
cms/envs/devstack_optimized.py
+3
-0
cms/envs/test_static_optimized.py
+1
-0
cms/static/cms/js/build.js
+15
-2
cms/static/cms/js/require-config.js
+0
-0
cms/static/js/factories/common_deps.js
+0
-1
cms/templates/base.html
+3
-3
common/djangoapps/pipeline_mako/templates/static_content.html
+18
-0
common/static/common/js/common_libraries.js
+1
-0
lms/djangoapps/teams/static/teams/js/spec/teams_factory_spec.js
+2
-2
lms/djangoapps/teams/static/teams/js/teams_tab_factory.js
+2
-2
lms/djangoapps/teams/templates/teams/teams.html
+3
-7
lms/envs/bok_choy.py
+23
-7
lms/envs/common.py
+49
-12
lms/envs/devstack.py
+6
-0
lms/envs/devstack_optimized.py
+3
-0
lms/envs/test_static_optimized.py
+1
-0
lms/static/lms/js/build.js
+137
-0
lms/static/lms/js/require-config.js
+84
-66
lms/templates/commerce/checkout_receipt.html
+0
-2
lms/templates/discussion/_js_head_dependencies.html
+0
-2
lms/templates/instructor/instructor_dashboard_2/instructor_dashboard_2.html
+0
-1
lms/templates/main.html
+6
-15
lms/templates/student_account/finish_auth.html
+0
-5
lms/templates/student_account/login_and_register.html
+0
-3
lms/templates/verify_student/incourse_reverify.html
+0
-2
lms/templates/verify_student/pay_and_verify.html
+0
-2
lms/templates/verify_student/reverify.html
+0
-2
lms/urls.py
+1
-1
openedx/core/lib/django_require/__init__.py
+0
-0
openedx/core/lib/django_require/staticstorage.py
+0
-0
No files found.
cms/envs/bok_choy.py
View file @
7b5f9b80
"""
Settings for Bok Choy tests that are used
for running CMS and LMS
.
Settings for Bok Choy tests that are used
when running Studio
.
Bok Choy uses two different settings files:
1. test_static_optimized is used when invoking collectstatic
2. bok_choy is used when running
CMS and LMS
2. bok_choy is used when running
the tests
Note: it isn't possible to have a single settings file, because Django doesn't
support both generating static assets to a directory and also serving static
...
...
cms/envs/common.py
View file @
7b5f9b80
...
...
@@ -455,7 +455,7 @@ MESSAGE_STORAGE = 'django.contrib.messages.storage.session.SessionStorage'
EMBARGO_SITE_REDIRECT_URL
=
None
############################### Pipeline #######################################
STATICFILES_STORAGE
=
'
cms
.lib.django_require.staticstorage.OptimizedCachedRequireJsStorage'
STATICFILES_STORAGE
=
'
openedx.core
.lib.django_require.staticstorage.OptimizedCachedRequireJsStorage'
from
openedx.core.lib.rooted_paths
import
rooted_glob
...
...
@@ -573,7 +573,7 @@ REQUIRE_BASE_URL = "./"
# A sensible value would be 'app.build.js'. Leave blank to use the built-in default build profile.
# Set to False to disable running the default profile (e.g. if only using it to build Standalone
# Modules)
REQUIRE_BUILD_PROFILE
=
"build.js"
REQUIRE_BUILD_PROFILE
=
"
cms/js/
build.js"
# The name of the require.js script used by your project, relative to REQUIRE_BASE_URL.
REQUIRE_JS
=
"js/vendor/require.js"
...
...
@@ -592,6 +592,8 @@ REQUIRE_EXCLUDE = ("build.txt",)
# It can also be a path to a custom class that subclasses require.environments.Environment and defines some "args" function that returns a list with the command arguments to execute.
REQUIRE_ENVIRONMENT
=
"node"
################################# TENDER ######################################
# If you want to enable Tender integration (http://tenderapp.com/),
# put in the subdomain where Tender hosts tender_widget.js. For example,
# if you want to use the URL https://example.tenderapp.com/tender_widget.js,
...
...
cms/envs/devstack_optimized.py
View file @
7b5f9b80
...
...
@@ -29,6 +29,9 @@ TEST_ROOT = REPO_ROOT / "test_root" # pylint: disable=no-value-for-parameter
# Enable debug so that static assets are served by Django
DEBUG
=
True
# Set REQUIRE_DEBUG to false so that it behaves like production
REQUIRE_DEBUG
=
False
# Serve static files at /static directly from the staticfiles directory under test root.
# Note: optimized files for testing are generated with settings from test_static_optimized
STATIC_URL
=
"/static/"
...
...
cms/envs/test_static_optimized.py
View file @
7b5f9b80
...
...
@@ -33,3 +33,4 @@ STATIC_ROOT = (TEST_ROOT / "staticfiles" / "cms").abspath()
# 1. Uglify is by far the slowest part of the build process
# 2. Having full source code makes debugging tests easier for developers
os
.
environ
[
'REQUIRE_BUILD_PROFILE_OPTIMIZE'
]
=
'none'
PIPELINE_JS_COMPRESSOR
=
None
cms/static/build.js
→
cms/static/
cms/js/
build.js
View file @
7b5f9b80
(
function
()
{
'use strict'
;
var
commonLibrariesPath
=
'common/js/common_libraries'
;
var
getModule
=
function
(
moduleName
,
excludeCommonDeps
)
{
var
module
=
{
name
:
moduleName
};
if
(
excludeCommonDeps
)
{
module
.
exclude
=
[
'js/factories/common_deps'
];
module
.
exclude
=
[
commonLibrariesPath
];
}
return
module
;
};
var
getModulesList
=
function
(
modules
)
{
var
result
=
[
getModule
(
'js/factories/common_deps'
)];
var
result
=
[
getModule
(
commonLibrariesPath
)];
return
result
.
concat
(
modules
.
map
(
function
(
moduleName
)
{
return
getModule
(
moduleName
,
true
);
}));
...
...
@@ -84,6 +86,17 @@
'tender'
:
'empty:'
,
'youtube'
:
'empty:'
},
/**
* Inline requireJS text templates.
*/
inlineText
:
true
,
/**
* Stub out requireJS text in the optimized file, but leave available for non-optimized development use.
*/
stubModules
:
[
"text"
],
/**
* If shim config is used in the app during runtime, duplicate the config
* here. Necessary if shim config is used, so that the shim's dependencies
...
...
cms/static/require-config.js
→
cms/static/
cms/js/
require-config.js
View file @
7b5f9b80
File moved
cms/static/js/factories/common_deps.js
deleted
100644 → 0
View file @
80cf4d6e
define
([
'domReady!'
,
'jquery'
,
'backbone'
,
'underscore'
,
'gettext'
,
'text'
]);
cms/templates/base.html
View file @
7b5f9b80
...
...
@@ -36,7 +36,7 @@ import json
</head>
<body
class=
"${static.dir_rtl()} <%block name='bodyclass'></%block> lang_${LANGUAGE_CODE}"
>
<
%
block
name=
"view_notes"
></
%
block>
<
%
block
name=
"view_notes"
></
%
block>
<a
class=
"nav-skip"
href=
"#content"
>
${_("Skip to main content")}
</a>
...
...
@@ -46,7 +46,7 @@ import json
var
require
=
{
baseUrl
:
window
.
baseUrl
};
</script>
<script
type=
"text/javascript"
src=
"${static.url("
js
/
vendor
/
require
.
js
")}"
></script>
<script
type=
"text/javascript"
src=
"${static.url("
require-config
.
js
")}"
></script>
<script
type=
"text/javascript"
src=
"${static.url("
cms
/
js
/
require-config
.
js
")}"
></script>
## js templates
<script
id=
"system-feedback-tpl"
type=
"text/template"
>
...
...
@@ -81,7 +81,7 @@ import json
<
%
block
name=
"jsextra"
></
%
block>
<script
type=
"text/javascript"
>
require
([
'
js/factories/common_dep
s'
],
function
()
{
require
([
'
common/js/common_librarie
s'
],
function
()
{
require
([
'js/factories/base'
],
function
()
{
%
if
context_course
:
require
([
'js/factories/course'
],
function
(
CourseFactory
)
{
...
...
common/djangoapps/pipeline_mako/templates/static_content.html
View file @
7b5f9b80
...
...
@@ -51,3 +51,21 @@ except:
from
django
.
template
.
loaders
.
filesystem
import
_loader
source
,
template_path =
_loader.load_template_source(path)
%
>
${source}
</
%
def>
<
%
def
name=
"require_module(module_name, class_name)"
>
<script
type=
"text/javascript"
>
(
function
(
require
)
{
%
if
settings
.
REQUIRE_DEBUG
:
require
([
'${module_name}'
],
function
(
$
{
class_name
})
{
$
{
caller
.
body
()}
});
%
else
:
require
([
'${staticfiles_storage.url(module_name + ".js")}'
],
function
()
{
require
([
'${module_name}'
],
function
(
$
{
class_name
})
{
$
{
caller
.
body
()}
});
});
%
endif
}).
call
(
this
,
require
||
RequireJS
.
require
);
</script>
</
%
def>
common/static/common/js/common_libraries.js
0 → 100644
View file @
7b5f9b80
define
([
'domReady!'
,
'jquery'
,
'backbone'
,
'underscore'
,
'gettext'
]);
lms/djangoapps/teams/static/teams/js/spec/teams_factory_spec.js
View file @
7b5f9b80
...
...
@@ -2,12 +2,12 @@ define(["jquery", "backbone", "teams/js/teams_tab_factory"],
function
(
$
,
Backbone
,
TeamsTabFactory
)
{
'use strict'
;
describe
(
"
teams django app
"
,
function
()
{
describe
(
"
Teams tab
"
,
function
()
{
var
teamsTab
;
beforeEach
(
function
()
{
setFixtures
(
'<section class="teams-content"></section>'
);
teamsTab
=
new
TeamsTabFactory
({
results
:
[]},
''
,
'edX/DemoX/Demo_Course'
);
teamsTab
=
new
TeamsTabFactory
(
$
(
".teams-content"
),
{
results
:
[]},
''
,
'edX/DemoX/Demo_Course'
);
});
afterEach
(
function
()
{
...
...
lms/djangoapps/teams/static/teams/js/teams_tab_factory.js
View file @
7b5f9b80
...
...
@@ -3,11 +3,11 @@
define
([
'jquery'
,
'teams/js/views/teams_tab'
,
'teams/js/collections/topic'
],
function
(
$
,
TeamsTabView
,
TopicCollection
)
{
return
function
(
topics
,
topics_url
,
course_id
)
{
return
function
(
element
,
topics
,
topics_url
,
course_id
)
{
var
topicCollection
=
new
TopicCollection
(
topics
,
{
url
:
topics_url
,
course_id
:
course_id
,
parse
:
true
});
topicCollection
.
bootstrap
();
var
view
=
new
TeamsTabView
({
el
:
$
(
'.teams-content'
)
,
el
:
element
,
topicCollection
:
topicCollection
});
view
.
render
();
...
...
lms/djangoapps/teams/templates/teams/teams.html
View file @
7b5f9b80
...
...
@@ -21,11 +21,7 @@
</div>
<
%
block
name=
"js_extra"
>
<script
type=
"text/javascript"
>
(
function
(
require
)
{
require
([
'teams/js/teams_tab_factory'
],
function
(
TeamsTabFactory
)
{
new
TeamsTabFactory
(
$
{
json
.
dumps
(
topics
,
cls
=
EscapedEdxJSONEncoder
)
},
'${ topics_url }'
,
'${ unicode(course.id) }'
);
});
}).
call
(
this
,
require
||
RequireJS
.
require
);
</script>
<
%
static:require_module
module_name=
"teams/js/teams_tab_factory"
class_name=
"TeamsTabFactory"
>
TeamsTabFactory($('.teams-content'), ${ json.dumps(topics, cls=EscapedEdxJSONEncoder) }, '${ topics_url }', '${ unicode(course.id) }');
</
%
static:require
_module
>
</
%
block>
lms/envs/bok_choy.py
View file @
7b5f9b80
"""
Settings for bok choy tests
Settings for Bok Choy tests that are used when running LMS.
Bok Choy uses two different settings files:
1. test_static_optimized is used when invoking collectstatic
2. bok_choy is used when running the tests
Note: it isn't possible to have a single settings file, because Django doesn't
support both generating static assets to a directory and also serving static
from the same directory.
"""
import
os
...
...
@@ -48,6 +56,20 @@ update_module_store_settings(
)
############################ STATIC FILES #############################
# Enable debug so that static assets are served by Django
DEBUG
=
True
# Serve static files at /static directly from the staticfiles directory under test root
# Note: optimized files for testing are generated with settings from test_static_optimized
STATIC_URL
=
"/static/"
STATICFILES_FINDERS
=
(
'staticfiles.finders.FileSystemFinder'
,
)
STATICFILES_DIRS
=
(
(
TEST_ROOT
/
"staticfiles"
/
"lms"
)
.
abspath
(),
)
DEFAULT_FILE_STORAGE
=
'django.core.files.storage.FileSystemStorage'
MEDIA_ROOT
=
TEST_ROOT
/
"uploads"
MEDIA_URL
=
"/static/uploads/"
...
...
@@ -74,9 +96,6 @@ OPEN_ENDED_GRADING_INTERFACE['url'] = 'http://localhost:8041/'
EDXNOTES_PUBLIC_API
=
'http://localhost:8042/api/v1'
EDXNOTES_INTERNAL_API
=
'http://localhost:8042/api/v1'
# Enable django-pipeline and staticfiles
STATIC_ROOT
=
(
TEST_ROOT
/
"staticfiles"
/
"lms"
)
.
abspath
()
# Silence noisy logs
import
logging
LOG_OVERRIDES
=
[
...
...
@@ -106,9 +125,6 @@ FEATURES['ENABLE_TEAMS'] = True
# Enable custom content licensing
FEATURES
[
'LICENSING'
]
=
True
# Unfortunately, we need to use debug mode to serve staticfiles
DEBUG
=
True
########################### Entrance Exams #################################
FEATURES
[
'MILESTONES_APP'
]
=
True
FEATURES
[
'ENTRANCE_EXAMS'
]
=
True
...
...
lms/envs/common.py
View file @
7b5f9b80
...
...
@@ -1199,7 +1199,7 @@ X_FRAME_OPTIONS = 'ALLOW'
############################### Pipeline #######################################
STATICFILES_STORAGE
=
'
pipeline.storage.PipelineCached
Storage'
STATICFILES_STORAGE
=
'
openedx.core.lib.django_require.staticstorage.OptimizedCachedRequireJs
Storage'
from
openedx.core.lib.rooted_paths
import
rooted_glob
...
...
@@ -1231,6 +1231,8 @@ base_vendor_js = [
'js/vendor/underscore-min.js'
,
'js/vendor/require.js'
,
'js/RequireJS-namespace-undefine.js'
,
'js/vendor/URI.min.js'
,
'js/vendor/backbone-min.js'
]
main_vendor_js
=
base_vendor_js
+
[
...
...
@@ -1239,7 +1241,12 @@ main_vendor_js = base_vendor_js + [
'js/vendor/jquery.qtip.min.js'
,
'js/vendor/swfobject/swfobject.js'
,
'js/vendor/jquery.ba-bbq.min.js'
,
'js/vendor/URI.min.js'
,
]
# Common files used by both RequireJS code and non-RequireJS code
base_application_js
=
[
'js/src/utility.js'
,
'js/src/logger.js'
,
]
dashboard_js
=
(
...
...
@@ -1265,7 +1272,6 @@ student_account_js = [
'js/toggle_login_modal.js'
,
'js/sticky_filter.js'
,
'js/query-params.js'
,
'js/src/utility.js'
,
'js/src/accessibility_tools.js'
,
'js/src/ie_shim.js'
,
'js/src/string_utils.js'
,
...
...
@@ -1291,7 +1297,6 @@ verify_student_js = [
'js/toggle_login_modal.js'
,
'js/sticky_filter.js'
,
'js/query-params.js'
,
'js/src/utility.js'
,
'js/src/accessibility_tools.js'
,
'js/src/ie_shim.js'
,
'js/src/string_utils.js'
,
...
...
@@ -1478,20 +1483,23 @@ project_js = set(rooted_glob(PROJECT_ROOT / 'static', 'coffee/src/**/*.js')) - s
PIPELINE_JS
=
{
'base_application'
:
{
'source_filenames'
:
base_application_js
,
'output_filename'
:
'js/lms-base-application.js'
,
},
'application'
:
{
# Application will contain all paths not in courseware_only_js
'source_filenames'
:
[
'js/xblock/core.js'
]
+
sorted
(
common_js
)
+
sorted
(
project_js
)
+
[
'source_filenames'
:
[
'js/xblock/core.js'
]
+
sorted
(
common_js
)
+
sorted
(
project_js
)
+
base_application_js
+
[
'js/form.ext.js'
,
'js/my_courses_dropdown.js'
,
'js/toggle_login_modal.js'
,
'js/sticky_filter.js'
,
'js/query-params.js'
,
'js/src/utility.js'
,
'js/src/accessibility_tools.js'
,
'js/src/ie_shim.js'
,
'js/src/string_utils.js'
,
'js/src/logger.js'
,
],
'output_filename'
:
'js/lms-application.js'
,
},
...
...
@@ -1579,10 +1587,6 @@ PIPELINE_JS = {
'source_filenames'
:
certificates_web_view_js
,
'output_filename'
:
'js/certificates/web_view.js'
},
'utility'
:
{
'source_filenames'
:
[
'js/src/utility.js'
],
'output_filename'
:
'js/utility.js'
},
'credit_wv'
:
{
'source_filenames'
:
credit_web_view_js
,
'output_filename'
:
'js/credit/web_view.js'
...
...
@@ -1616,7 +1620,10 @@ PIPELINE_JS_COMPRESSOR = "pipeline.compressors.uglifyjs.UglifyJSCompressor"
STATICFILES_IGNORE_PATTERNS
=
(
"sass/*"
,
"coffee/*"
,
"coffee/*.coffee"
,
"coffee/*/*.coffee"
,
"coffee/*/*/*.coffee"
,
"coffee/*/*/*/*.coffee"
,
# Symlinks used by js-test-tool
"xmodule_js"
,
...
...
@@ -1628,6 +1635,36 @@ PIPELINE_UGLIFYJS_BINARY = 'node_modules/.bin/uglifyjs'
PIPELINE_COMPILE_INPLACE
=
True
################################# DJANGO-REQUIRE ###############################
# The baseUrl to pass to the r.js optimizer, relative to STATIC_ROOT.
REQUIRE_BASE_URL
=
"./"
# The name of a build profile to use for your project, relative to REQUIRE_BASE_URL.
# A sensible value would be 'app.build.js'. Leave blank to use the built-in default build profile.
# Set to False to disable running the default profile (e.g. if only using it to build Standalone
# Modules)
REQUIRE_BUILD_PROFILE
=
"lms/js/build.js"
# The name of the require.js script used by your project, relative to REQUIRE_BASE_URL.
REQUIRE_JS
=
"js/vendor/require.js"
# A dictionary of standalone modules to build with almond.js.
REQUIRE_STANDALONE_MODULES
=
{}
# Whether to run django-require in debug mode.
REQUIRE_DEBUG
=
False
# A tuple of files to exclude from the compilation result of r.js.
REQUIRE_EXCLUDE
=
(
"build.txt"
,)
# The execution environment in which to run r.js: auto, node or rhino.
# auto will autodetect the environment and make use of node if available and rhino if not.
# It can also be a path to a custom class that subclasses require.environments.Environment
# and defines some "args" function that returns a list with the command arguments to execute.
REQUIRE_ENVIRONMENT
=
"node"
################################# CELERY ######################################
# Message configuration
...
...
lms/envs/devstack.py
View file @
7b5f9b80
...
...
@@ -79,6 +79,12 @@ def should_show_debug_toolbar(_):
########################### PIPELINE #################################
# # Skip RequireJS optimizer in development
STATICFILES_STORAGE
=
'pipeline.storage.PipelineCachedStorage'
# Whether to run django-require in debug mode.
REQUIRE_DEBUG
=
DEBUG
PIPELINE_SASS_ARGUMENTS
=
'--debug-info --require {proj_dir}/static/sass/bourbon/lib/bourbon.rb'
.
format
(
proj_dir
=
PROJECT_ROOT
)
########################### VERIFIED CERTIFICATES #################################
...
...
lms/envs/devstack_optimized.py
View file @
7b5f9b80
...
...
@@ -29,6 +29,9 @@ TEST_ROOT = REPO_ROOT / "test_root" # pylint: disable=no-value-for-parameter
# Enable debug so that static assets are served by Django
DEBUG
=
True
# Set REQUIRE_DEBUG to false so that it behaves like production
REQUIRE_DEBUG
=
False
# Serve static files at /static directly from the staticfiles directory under test root.
# Note: optimized files for testing are generated with settings from test_static_optimized
STATIC_URL
=
"/static/"
...
...
lms/envs/test_static_optimized.py
View file @
7b5f9b80
...
...
@@ -45,3 +45,4 @@ STATIC_ROOT = (TEST_ROOT / "staticfiles" / "lms").abspath()
# 1. Uglify is by far the slowest part of the build process
# 2. Having full source code makes debugging tests easier for developers
os
.
environ
[
'REQUIRE_BUILD_PROFILE_OPTIMIZE'
]
=
'none'
PIPELINE_JS_COMPRESSOR
=
None
lms/static/lms/js/build.js
0 → 100644
View file @
7b5f9b80
(
function
()
{
'use strict'
;
var
getModulesList
=
function
(
modules
)
{
return
modules
.
map
(
function
(
moduleName
)
{
return
{
name
:
moduleName
};
});
};
var
jsOptimize
=
process
.
env
.
REQUIRE_BUILD_PROFILE_OPTIMIZE
!==
undefined
?
process
.
env
.
REQUIRE_BUILD_PROFILE_OPTIMIZE
:
'uglify2'
;
return
{
namespace
:
"RequireJS"
,
/**
* List the modules that will be optimized. All their immediate and deep
* dependencies will be included in the module's file when the build is
* done.
*/
modules
:
getModulesList
([
'teams/js/teams_tab_factory'
]),
/**
* By default all the configuration for optimization happens from the command
* line or by properties in the config file, and configuration that was
* passed to requirejs as part of the app's runtime "main" JS file is *not*
* considered. However, if you prefer the "main" JS file configuration
* to be read for the build so that you do not have to duplicate the values
* in a separate configuration, set this property to the location of that
* main JS file. The first requirejs({}), require({}), requirejs.config({}),
* or require.config({}) call found in that file will be used.
* As of 2.1.10, mainConfigFile can be an array of values, with the last
* value's config take precedence over previous values in the array.
*/
mainConfigFile
:
'require-config.js'
,
/**
* Set paths for modules. If relative paths, set relative to baseUrl above.
* If a special value of "empty:" is used for the path value, then that
* acts like mapping the path to an empty file. It allows the optimizer to
* resolve the dependency to path, but then does not include it in the output.
* Useful to map module names that are to resources on a CDN or other
* http: URL when running in the browser and during an optimization that
* file should be skipped because it has no dependencies.
*/
paths
:
{
'gettext'
:
'empty:'
,
'coffee/src/ajax_prefix'
:
'empty:'
,
'jquery'
:
'empty:'
,
'jquery.cookie'
:
'empty:'
,
'jquery.url'
:
'empty:'
,
'backbone'
:
'empty:'
,
'underscore'
:
'empty:'
,
'logger'
:
'empty:'
,
'utility'
:
'empty:'
,
'URI'
:
'empty:'
},
/**
* Inline requireJS text templates.
*/
inlineText
:
true
,
/**
* Stub out requireJS text in the optimized file, but leave available for non-optimized development use.
*/
stubModules
:
[
"text"
],
/**
* If shim config is used in the app during runtime, duplicate the config
* here. Necessary if shim config is used, so that the shim's dependencies
* are included in the build. Using "mainConfigFile" is a better way to
* pass this information though, so that it is only listed in one place.
* However, if mainConfigFile is not an option, the shim config can be
* inlined in the build config.
*/
shim
:
{},
/**
* Introduced in 2.1.2: If using "dir" for an output directory, normally the
* optimize setting is used to optimize the build bundles (the "modules"
* section of the config) and any other JS file in the directory. However, if
* the non-build bundle JS files will not be loaded after a build, you can
* skip the optimization of those files, to speed up builds. Set this value
* to true if you want to skip optimizing those other non-build bundle JS
* files.
*/
skipDirOptimize
:
true
,
/**
* When the optimizer copies files from the source location to the
* destination directory, it will skip directories and files that start
* with a ".". If you want to copy .directories or certain .files, for
* instance if you keep some packages in a .packages directory, or copy
* over .htaccess files, you can set this to null. If you want to change
* the exclusion rules, change it to a different regexp. If the regexp
* matches, it means the directory will be excluded. This used to be
* called dirExclusionRegExp before the 1.0.2 release.
* As of 1.0.3, this value can also be a string that is converted to a
* RegExp via new RegExp().
*/
fileExclusionRegExp
:
/^
\.
|spec|spec_helpers/
,
/**
* Allow CSS optimizations. Allowed values:
* - "standard": @import inlining and removal of comments, unnecessary
* whitespace and line returns.
* Removing line returns may have problems in IE, depending on the type
* of CSS.
* - "standard.keepLines": like "standard" but keeps line returns.
* - "none": skip CSS optimizations.
* - "standard.keepComments": keeps the file comments, but removes line
* returns. (r.js 1.0.8+)
* - "standard.keepComments.keepLines": keeps the file comments and line
* returns. (r.js 1.0.8+)
* - "standard.keepWhitespace": like "standard" but keeps unnecessary whitespace.
*/
optimizeCss
:
'none'
,
/**
* How to optimize all the JS files in the build output directory.
* Right now only the following values are supported:
* - "uglify": Uses UglifyJS to minify the code.
* - "uglify2": Uses UglifyJS2.
* - "closure": Uses Google's Closure Compiler in simple optimization
* mode to minify the code. Only available if REQUIRE_ENVIRONMENT is "rhino" (the default).
* - "none": No minification will be done.
*/
optimize
:
jsOptimize
,
/**
* Sets the logging level. It is a number:
* TRACE: 0,
* INFO: 1,
* WARN: 2,
* ERROR: 3,
* SILENT: 4
* Default is 0.
*/
logLevel
:
1
};
}
())
lms/static/
require-config-lms
.js
→
lms/static/
lms/js/require-config
.js
View file @
7b5f9b80
;(
function
(
require
,
define
)
{
var
paths
=
{},
config
;
// jquery, underscore, gettext, URI, tinymce, or jquery.tinymce may already
// have been loaded and we do not want to load them a second time. Check if
// it is the case and use the global var instead.
if
(
window
.
jQuery
)
{
define
(
"jquery"
,
[],
function
()
{
return
window
.
jQuery
;});
}
else
{
paths
.
jquery
=
"js/vendor/jquery.min"
;
}
if
(
window
.
_
)
{
define
(
"underscore"
,
[],
function
()
{
return
window
.
_
;});
}
else
{
paths
.
jquery
=
"js/vendor/underscore-min"
;
}
if
(
window
.
gettext
)
{
define
(
"gettext"
,
[],
function
()
{
return
window
.
gettext
;});
}
else
{
paths
.
gettext
=
"/i18n"
;
}
if
(
window
.
Logger
)
{
define
(
"logger"
,
[],
function
()
{
return
window
.
Logger
;});
}
else
{
paths
.
logger
=
"js/src/logger"
;
}
if
(
window
.
URI
)
{
define
(
"URI"
,
[],
function
()
{
return
window
.
URI
;});
}
else
{
paths
.
URI
=
"js/vendor/URI.min"
;
}
if
(
window
.
tinymce
)
{
define
(
'tinymce'
,
[],
function
()
{
return
window
.
tinymce
;});
}
else
{
paths
.
tinymce
=
"js/vendor/tinymce/js/tinymce/tinymce.full.min"
;
}
if
(
window
.
jquery
&&
window
.
jquery
.
tinymce
)
{
define
(
"jquery.tinymce"
,
[],
function
()
{
return
window
.
jquery
.
tinymce
;});
}
else
{
paths
.
tinymce
=
"js/vendor/tinymce/js/tinymce/jquery.tinymce.min"
;
// We do not wish to bundle common libraries (that may also be used by non-RequireJS code on the page
// into the optimized files. Therefore load these libraries through script tags and explicitly define them.
// Note that when the optimizer executes this code, window will not be defined.
if
(
window
)
{
var
defineDependency
=
function
(
globalVariable
,
name
,
noShim
)
{
if
(
window
[
globalVariable
])
{
if
(
noShim
)
{
define
(
name
,
{});
}
else
{
define
(
name
,
[],
function
()
{
return
window
[
globalVariable
];});
}
}
else
{
console
.
error
(
"Expected library to be included on page, but not found on window object: "
+
name
);
}
};
defineDependency
(
"jQuery"
,
"jquery"
);
defineDependency
(
"_"
,
"underscore"
);
defineDependency
(
"gettext"
,
"gettext"
);
defineDependency
(
"Logger"
,
"logger"
);
defineDependency
(
"URI"
,
"URI"
);
defineDependency
(
"Backbone"
,
"backbone"
);
// utility.js adds two functions to the window object, but does not return anything
defineDependency
(
"isExternal"
,
"utility"
,
true
);
}
config
=
{
// NOTE: baseUrl has been previously set in lms/
static/
templates/main.html
require
.
config
(
{
// NOTE: baseUrl has been previously set in lms/templates/main.html
waitSeconds
:
60
,
paths
:
{
"gettext"
:
"/i18n"
,
"annotator_1.2.9"
:
"js/vendor/edxnotes/annotator-full.min"
,
"date"
:
"js/vendor/date"
,
"text"
:
'js/vendor/requirejs/text'
,
"text"
:
"js/vendor/requirejs/text"
,
"logger"
:
"js/src/logger"
,
"backbone"
:
"js/vendor/backbone-min"
,
"backbone-super"
:
"js/vendor/backbone-super"
,
"backbone.paginator"
:
"js/vendor/backbone.paginator.min"
,
"underscore"
:
"js/vendor/underscore-min"
,
"underscore.string"
:
"js/vendor/underscore.string.min"
,
"jquery"
:
"js/vendor/jquery.min"
,
"jquery.cookie"
:
"js/vendor/jquery.cookie"
,
"jquery.url"
:
"js/vendor/url.min"
,
"jquery.ui"
:
"js/vendor/jquery-ui.min"
,
"jquery.iframe-transport"
:
"js/vendor/jQuery-File-Upload/js/jquery.iframe-transport"
,
"jquery.fileupload"
:
"js/vendor/jQuery-File-Upload/js/jquery.fileupload"
,
"URI"
:
"js/vendor/URI.min"
,
"string_utils"
:
"js/src/string_utils"
,
"utility"
:
"js/src/utility"
,
// Files needed by OVA
"annotator"
:
"js/vendor/ova/annotator-full"
,
"annotator-harvardx"
:
"js/vendor/ova/annotator-full-firebase-auth"
,
"video.dev"
:
"js/vendor/ova/video.dev"
,
"vjs.youtube"
:
'js/vendor/ova/vjs.youtube'
,
"rangeslider"
:
'js/vendor/ova/rangeslider'
,
"share-annotator"
:
'js/vendor/ova/share-annotator'
,
"richText-annotator"
:
'js/vendor/ova/richText-annotator'
,
"reply-annotator"
:
'js/vendor/ova/reply-annotator'
,
"grouping-annotator"
:
'js/vendor/ova/grouping-annotator'
,
"tags-annotator"
:
'js/vendor/ova/tags-annotator'
,
"diacritic-annotator"
:
'js/vendor/ova/diacritic-annotator'
,
"flagging-annotator"
:
'js/vendor/ova/flagging-annotator'
,
"jquery-Watch"
:
'js/vendor/ova/jquery-Watch'
,
"openseadragon"
:
'js/vendor/ova/openseadragon'
,
"osda"
:
'js/vendor/ova/OpenSeaDragonAnnotation'
,
"ova"
:
'js/vendor/ova/ova'
,
"catch"
:
'js/vendor/ova/catch/js/catch'
,
"handlebars"
:
'js/vendor/ova/catch/js/handlebars-1.1.2'
"vjs.youtube"
:
"js/vendor/ova/vjs.youtube"
,
"rangeslider"
:
"js/vendor/ova/rangeslider"
,
"share-annotator"
:
"js/vendor/ova/share-annotator"
,
"richText-annotator"
:
"js/vendor/ova/richText-annotator"
,
"reply-annotator"
:
"js/vendor/ova/reply-annotator"
,
"grouping-annotator"
:
"js/vendor/ova/grouping-annotator"
,
"tags-annotator"
:
"js/vendor/ova/tags-annotator"
,
"diacritic-annotator"
:
"js/vendor/ova/diacritic-annotator"
,
"flagging-annotator"
:
"js/vendor/ova/flagging-annotator"
,
"jquery-Watch"
:
"js/vendor/ova/jquery-Watch"
,
"openseadragon"
:
"js/vendor/ova/openseadragon"
,
"osda"
:
"js/vendor/ova/OpenSeaDragonAnnotation"
,
"ova"
:
"js/vendor/ova/ova"
,
"catch"
:
"js/vendor/ova/catch/js/catch"
,
"handlebars"
:
"js/vendor/ova/catch/js/handlebars-1.1.2"
,
"tinymce"
:
"js/vendor/tinymce/js/tinymce/tinymce.full.min"
,
"jquery.tinymce"
:
"js/vendor/tinymce/js/tinymce/jquery.tinymce.min"
// end of files needed by OVA
},
shim
:
{
"gettext"
:
{
exports
:
"gettext"
},
"annotator_1.2.9"
:
{
deps
:
[
"jquery"
],
exports
:
"Annotator"
...
...
@@ -83,6 +88,22 @@
"jquery"
:
{
exports
:
"$"
},
"jquery.cookie"
:
{
deps
:
[
"jquery"
],
exports
:
"jQuery.fn.cookie"
},
"jquery.url"
:
{
deps
:
[
"jquery"
],
exports
:
"jQuery.url"
},
"jquery.fileupload"
:
{
deps
:
[
"jquery.ui"
,
"jquery.iframe-transport"
],
exports
:
"jQuery.fn.fileupload"
},
"jquery.tinymce"
:
{
deps
:
[
"jquery"
,
"tinymce"
],
exports
:
"jQuery.fn.tinymce"
},
"underscore"
:
{
exports
:
"_"
},
...
...
@@ -97,8 +118,9 @@
"backbone-super"
:
{
deps
:
[
"backbone"
]
},
"logger"
:
{
exports
:
"Logger"
"string_utils"
:
{
deps
:
[
"underscore"
],
exports
:
"interpolate_text"
},
// Needed by OVA
"video.dev"
:
{
...
...
@@ -153,15 +175,11 @@
"grouping-annotator"
,
"diacritic-annotator"
,
"openseadragon"
,
"jquery-Watch"
,
"catch"
,
"handlebars"
,
"URI"
]
},
"tinymce"
:
{
exports
:
"tinymce"
}
// End of needed by OVA
}
};
for
(
var
key
in
paths
)
{
if
({}.
hasOwnProperty
.
call
(
paths
,
key
))
{
config
.
paths
[
key
]
=
paths
[
key
];
}
}
require
.
config
(
config
);
});
}).
call
(
this
,
require
||
RequireJS
.
require
,
define
||
RequireJS
.
define
);
lms/templates/commerce/checkout_receipt.html
View file @
7b5f9b80
...
...
@@ -19,9 +19,7 @@ from django.utils.translation import ugettext as _
</
%
block>
<
%
block
name=
"js_extra"
>
<script
src=
"${static.url('js/vendor/jquery.ajax-retry.js')}"
></script>
<script
src=
"${static.url('js/vendor/underscore-min.js')}"
></script>
<script
src=
"${static.url('js/vendor/underscore.string.min.js')}"
></script>
<script
src=
"${static.url('js/vendor/backbone-min.js')}"
></script>
<script
src=
"${static.url('js/src/tooltip_manager.js')}"
></script>
<script
src=
"${static.url('js/commerce/views/receipt_view.js')}"
></script>
</
%
block>
...
...
lms/templates/discussion/_js_head_dependencies.html
View file @
7b5f9b80
...
...
@@ -10,8 +10,6 @@
<script
type=
"text/javascript"
src=
"${static.url('js/vendor/jquery.timeago.js')}"
></script>
<script
type=
"text/javascript"
src=
"${static.url('js/src/jquery.timeago.locale.js')}"
></script>
<script
type=
"text/javascript"
src=
"${static.url('js/mustache.js')}"
></script>
<script
type=
"text/javascript"
src=
"${static.url('js/vendor/URI.min.js')}"
></script>
<script
type=
"text/javascript"
src=
"${static.url('js/vendor/backbone-min.js')}"
></script>
<script
type=
"text/javascript"
src=
"${static.url('js/src/tooltip_manager.js')}"
></script>
<link
href=
"${static.url('css/vendor/jquery.autocomplete.css')}"
rel=
"stylesheet"
type=
"text/css"
>
lms/templates/instructor/instructor_dashboard_2/instructor_dashboard_2.html
View file @
7b5f9b80
...
...
@@ -34,7 +34,6 @@ from django.core.urlresolvers import reverse
window
.
Range
.
prototype
=
{
};
}
</script>
<script
type=
"text/javascript"
src=
"${static.url('js/vendor/backbone-min.js')}"
></script>
<script
type=
"text/javascript"
src=
"${static.url('js/vendor/mustache.js')}"
></script>
<script
type=
"text/javascript"
src=
"${static.url('js/vendor/flot/jquery.flot.js')}"
></script>
<script
type=
"text/javascript"
src=
"${static.url('js/vendor/flot/jquery.flot.axislabels.js')}"
></script>
...
...
lms/templates/main.html
View file @
7b5f9b80
...
...
@@ -57,7 +57,7 @@ from branding import api as branding_api
</script>
% endif
<script
type=
"text/javascript"
src=
"/
jsi18n/
"
></script>
<script
type=
"text/javascript"
src=
"/
i18n.js
"
></script>
<link
rel=
"icon"
type=
"image/x-icon"
href=
"${static.url(microsite.get_value('favicon_path', settings.FAVICON_PATH))}"
/>
...
...
@@ -66,26 +66,22 @@ from branding import api as branding_api
% if disable_courseware_js:
<
%
static:js
group=
'base_vendor'
/>
<
%
static:js
group=
'base_application'
/>
% else:
<
%
static:js
group=
'main_vendor'
/>
<
%
static:js
group=
'application'
/>
<
%
static:js
group=
'module-js'
/>
% endif
<script>
window
.
baseUrl
=
"${settings.STATIC_URL}"
;
(
function
(
require
)
{
%
if
settings
.
DEBUG
is
True
:
##
Using
what
amounts
to
a
random
number
in
the
Development
environment
for
cache
-
busting
var
urlArgs
=
"bust="
+
(
new
Date
()).
getTime
();
%
else
:
var
urlArgs
=
"v=${settings.EDX_PLATFORM_REVISION}"
;
%
endif
require
.
config
({
baseUrl
:
baseUrl
,
urlArgs
:
urlArgs
baseUrl
:
window
.
baseUrl
});
}).
call
(
this
,
require
||
RequireJS
.
require
);
</script>
<script
type=
"text/javascript"
src=
"${static.url("
require-config-lms
.
js
")}"
></script>
<script
type=
"text/javascript"
src=
"${static.url("
lms
/
js
/
require-config
.
js
")}"
></script>
<
%
block
name=
"headextra"
/>
...
...
@@ -160,11 +156,6 @@ from branding import api as branding_api
</div>
% endif
% if not disable_courseware_js:
<
%
static:js
group=
'application'
/>
<
%
static:js
group=
'module-js'
/>
% endif
<
%
block
name=
"js_extra"
/>
<script
type=
"text/javascript"
src=
"${static.url('js/vendor/noreferrer.js')}"
charset=
"utf-8"
></script>
</body>
...
...
lms/templates/student_account/finish_auth.html
View file @
7b5f9b80
...
...
@@ -4,11 +4,6 @@
<
%
block
name=
"pagetitle"
>
${_("Please Wait")}
</
%
block>
<
%
block
name=
"js_extra"
>
<script
src=
"${static.url('js/vendor/backbone-min.js')}"
></script>
<
%
static:js
group=
'utility'
/>
</
%
block>
<
%
block
name=
"headextra"
>
<script>
...
...
lms/templates/student_account/login_and_register.html
View file @
7b5f9b80
...
...
@@ -6,10 +6,7 @@
<
%
block
name=
"pagetitle"
>
${_("Sign in or Register")}
</
%
block>
<
%
block
name=
"js_extra"
>
<script
src=
"${static.url('js/vendor/underscore-min.js')}"
></script>
<script
src=
"${static.url('js/vendor/underscore.string.min.js')}"
></script>
<script
src=
"${static.url('js/vendor/backbone-min.js')}"
></script>
<script
src=
"${static.url('js/vendor/url.min.js')}"
></script>
<script
src=
"${static.url('js/vendor/history.js')}"
></script>
<
%
static:js
group=
'student_account'
/>
</
%
block>
...
...
lms/templates/verify_student/incourse_reverify.html
View file @
7b5f9b80
...
...
@@ -18,9 +18,7 @@ from django.utils.translation import ugettext as _
% endfor
</
%
block>
<
%
block
name=
"js_extra"
>
<script
src=
"${static.url('js/vendor/underscore-min.js')}"
></script>
<script
src=
"${static.url('js/vendor/underscore.string.min.js')}"
></script>
<script
src=
"${static.url('js/vendor/backbone-min.js')}"
></script>
<script
src=
"${static.url('js/src/tooltip_manager.js')}"
></script>
<
%
static:js
group=
'incourse_reverify'
/>
</
%
block>
...
...
lms/templates/verify_student/pay_and_verify.html
View file @
7b5f9b80
...
...
@@ -35,9 +35,7 @@ from verify_student.views import PayAndVerifyView
% endfor
</
%
block>
<
%
block
name=
"js_extra"
>
<script
src=
"${static.url('js/vendor/underscore-min.js')}"
></script>
<script
src=
"${static.url('js/vendor/underscore.string.min.js')}"
></script>
<script
src=
"${static.url('js/vendor/backbone-min.js')}"
></script>
<script
src=
"${static.url('js/src/tooltip_manager.js')}"
></script>
<
%
static:js
group=
'verify_student'
/>
</
%
block>
...
...
lms/templates/verify_student/reverify.html
View file @
7b5f9b80
...
...
@@ -16,9 +16,7 @@ from django.utils.translation import ugettext as _
% endfor
</
%
block>
<
%
block
name=
"js_extra"
>
<script
src=
"${static.url('js/vendor/underscore-min.js')}"
></script>
<script
src=
"${static.url('js/vendor/underscore.string.min.js')}"
></script>
<script
src=
"${static.url('js/vendor/backbone-min.js')}"
></script>
<script
src=
"${static.url('js/src/tooltip_manager.js')}"
></script>
<
%
static:js
group=
'reverify'
/>
</
%
block>
...
...
lms/urls.py
View file @
7b5f9b80
...
...
@@ -137,7 +137,7 @@ js_info_dict = {
urlpatterns
+=
(
# Serve catalog of localized strings to be rendered by Javascript
url
(
r'^
jsi18n/
$'
,
'django.views.i18n.javascript_catalog'
,
js_info_dict
),
url
(
r'^
i18n.js
$'
,
'django.views.i18n.javascript_catalog'
,
js_info_dict
),
)
# sysadmin dashboard, to see what courses are loaded, to delete & load courses
...
...
cms
/lib/django_require/__init__.py
→
openedx/core
/lib/django_require/__init__.py
View file @
7b5f9b80
File moved
cms
/lib/django_require/staticstorage.py
→
openedx/core
/lib/django_require/staticstorage.py
View file @
7b5f9b80
File moved
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment