diff --git a/cms/static/js/views/course_info_helper.js b/cms/static/js/views/course_info_helper.js index 1eaaa57eb5..2a77d7fc98 100644 --- a/cms/static/js/views/course_info_helper.js +++ b/cms/static/js/views/course_info_helper.js @@ -2,6 +2,7 @@ define(['codemirror', 'js/utils/handle_iframe_binding', 'utility'], function(CodeMirror, IframeBinding) { var editWithCodeMirror = function(model, contentName, baseAssetUrl, textArea) { var content = rewriteStaticLinks(model.get(contentName), baseAssetUrl, '/static/'); + content = rewriteCdnLinksToStatic(content); // eslint-disable-line no-undef model.set(contentName, content); var $codeMirror = CodeMirror.fromTextArea(textArea, { mode: 'text/html', diff --git a/common/static/js/spec/utility_spec.js b/common/static/js/spec/utility_spec.js index 65abdd47f4..cd15ee9a32 100644 --- a/common/static/js/spec/utility_spec.js +++ b/common/static/js/spec/utility_spec.js @@ -16,3 +16,25 @@ describe('utility.rewriteStaticLinks', function() { ).toBe(''); }); }); +describe('utility.rewriteCdnLinksToStatic', function() { + 'use strict'; + it('does not replace "url" to "static url" if url is not following "cdn url" pattern', function() { + expect( + rewriteCdnLinksToStatic( // eslint-disable-line no-undef + '') + ).toBe(''); + expect( + rewriteCdnLinksToStatic('') // eslint-disable-line no-undef + ).toBe(''); + }); + it('does a replace of "cdn url" to "static url" if url is part of absolute url', function() { + expect( + rewriteCdnLinksToStatic( // eslint-disable-line no-undef + '') + ).toBe(''); + expect( + rewriteCdnLinksToStatic( // eslint-disable-line no-undef + '') + ).toBe(''); + }); +}); diff --git a/common/static/js/src/utility.js b/common/static/js/src/utility.js index ec8d8de838..cb85718493 100644 --- a/common/static/js/src/utility.js +++ b/common/static/js/src/utility.js @@ -35,5 +35,13 @@ window.rewriteStaticLinks = function(content, from, to) { // escape all regex interpretable chars fromRe = from.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); var regex = new RegExp('(https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}([-a-zA-Z0-9@:%_\+.~#?&//=]*))?' + fromRe, 'g'); + return content.replace(regex, replacer); }; + +// Utility method for replacing absolute URLs +window.rewriteCdnLinksToStatic = function(content) { + 'use strict'; + var regex = new RegExp('((https?:)?[/][/](www.)?[-a-zA-Z0-9@:%._+~#=]{2,256}[a-z]{2,6}([-a-zA-Z0-9@:%_+~#?&//=]*)|[a-z-]{14})[/]', 'g');// eslint-disable-line max-len + return content.replace(regex, '/static/'); +};