<%!
from staticfiles.storage import staticfiles_storage
from pipeline_mako import compressed_css, compressed_js
from django.utils.translation import get_language_bidi
%>

<%def name='url(file, raw=False)'><%
try:
    url = staticfiles_storage.url(file)
except:
    url = file
%>${url}${"?raw" if raw else ""}</%def>

<%def name='css(group, raw=False)'>
  <%
      rtl_group = '{}-rtl'.format(group)

      if get_language_bidi() and rtl_group in settings.PIPELINE_CSS:
        group = rtl_group
  %>

  % if settings.FEATURES['USE_DJANGO_PIPELINE']:
    ${compressed_css(group, raw=raw)}
  % else:
    % for filename in settings.PIPELINE_CSS[group]['source_filenames']:
      <link rel="stylesheet" href="${staticfiles_storage.url(filename.replace('.scss', '.css'))}${"?raw" if raw else ""}" type="text/css" media="all" / >
    % endfor
  %endif
</%def>

<%def name='js(group)'>
  % if settings.FEATURES['USE_DJANGO_PIPELINE']:
    ${compressed_js(group)}
  % else:
    % for filename in settings.PIPELINE_JS[group]['source_filenames']:
      <script type="text/javascript" src="${staticfiles_storage.url(filename.replace('.coffee', '.js'))}"></script>
    % endfor
  %endif
</%def>

## A language-direction indicator, suitable for use in class="" attributes,
## for example:
##
##      <body class="${dir_rtl()}">
##
<%def name="dir_rtl()"><%
    return 'rtl' if get_language_bidi() else 'ltr'
%></%def>

<%def name="include(path)"><%
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:
                ## The "raw" parameter is specified to avoid the URL from being further maninpulated by
                ## static_replace calls (as woudl happen if require_module is used within courseware).
                ## Without specifying "raw", a call to static_replace would result in the MD5 hash being
                ## being appended more than once, causing the import to fail in production environments.
                require(['${staticfiles_storage.url(module_name + ".js") + "?raw"}'], function () {
                    require(['${module_name}'], function (${class_name}) {
                        ${caller.body()}
                    });
                });
            % endif
        }).call(this, require || RequireJS.require);
    </script>
</%def>
