Commits

Mikhail Korobov committed 2063ab6

Execute initialization javascript in callbacks to make sure that necessary scripts are loaded. See #32.

Comments (0)

Files changed (3)

admin_tools/dashboard/templates/admin_tools/dashboard/dashboard.html

 {% load i18n admin_tools_dashboard_tags %}
 <script type="text/javascript" src="{{ media_url }}/admin_tools/js/utils.js"></script>
+
 <script type="text/javascript" charset="utf-8">
     // Load js files syncronously and conditionally
+
     var js_files = [
         {
             src : '{{ media_url }}/admin_tools/js/jquery/jquery.min.js',
-            test: function() { return typeof(jQuery) == 'undefined'; } 
+            test: function() { return typeof(jQuery) == 'undefined'; }
         },
         {
             src : '{{ media_url }}/admin_tools/js/jquery/jquery-ui.min.js',
-            test: function() { return typeof(jQuery.ui) == 'undefined'; } 
+            test: function() { return typeof(jQuery.ui) == 'undefined'; }
         },
         {
             src : '{{ media_url }}/admin_tools/js/json.min.js',
-            test: function() { return typeof(JSON.stringify) == 'undefined'; } 
+            test: function() { return typeof(JSON.stringify) == 'undefined'; }
         },
         {
             src : '{{ media_url }}/admin_tools/js/jquery/jquery.cookie.min.js',
-            test: function() { return typeof(jQuery.cookie) == 'undefined'; } 
+            test: function() { return typeof(jQuery.cookie) == 'undefined'; }
         },
         {
             src : '{{ media_url }}/admin_tools/js/jquery/jquery.dashboard.js',
         {
             src : '{{ media_url }}/admin_tools/js/dashboard.js',
             test: function() { return true; }
-        },
-        {% for js in dashboard.Media.js %}
+        }{% for js in dashboard.Media.js %},
         {
             src : '{{ media_url }}/{{ js }}',
             test: function() { return true; }
-        },{% endfor %}
+        }{% endfor %}
     ];
-    load_script(0, js_files);
+
+    loadScripts(js_files, function(){
+        jQuery(function($) {
+            init_dashboard(
+                '{{ dashboard.get_id }}',
+                {{ dashboard.columns }},
+                {% autoescape off %}{{ dashboard_preferences }}{% endautoescape %},
+                '{% url admin-tools-dashboard-set-preferences %}'
+            );
+        });
+    });
 </script>
 
 {% if dashboard.title %}
 <h1 class="dashboard-title">{{ dashboard.title }}</h1>
 {% endif %}
 
-<script type="text/javascript">
-// <![CDATA[
-jQuery(function($) {
-
-    init_dashboard(
-        '{{ dashboard.get_id }}',
-        {{ dashboard.columns }},
-        {% autoescape off %}{{ dashboard_preferences }}{% endautoescape %},
-        '{% url admin-tools-dashboard-set-preferences %}'
-    );
-});
-//]]>
-</script>
-
 <div id="dashboard-panel">
     <h3><a href="#">{% trans "Modules" %}</a></h3>
     {% if has_disabled_modules %}

admin_tools/media/admin_tools/js/utils.js

-var load_script = function(index, js_files) {
-    if (typeof(js_files[index]) != 'undefined') {
-        if (js_files[index].test()) {
-            // add script element
-            //console.log('Loading ' + js_files[index].src);
-            var head = document.getElementsByTagName('head')[0];
+var loadScripts = function(js_files, onComplete){
+    var len = js_files.length;
+    var head = document.getElementsByTagName('head')[0];
+
+    function loadScript(index){
+
+        if (index >= len){
+            onComplete();
+            return;
+        }
+
+        if (js_files[index].test()){
+//            console.log('Loading ' + js_files[index].src);
+
             var s = document.createElement('script');
             s.src = js_files[index].src;
             s.type = 'text/javascript';
             head.appendChild(s);
-            s.onload = load_script(index + 1, js_files);
-        } else {
-            //console.log('Skipped already loaded file ' + js_files[index].src);
-            load_script(index + 1, js_files);
+
+            s.onload = function(){
+                loadScript(index+1);
+            }
+        }
+        else{
+            loadScript(index+1);
         }
     }
+
+    loadScript(0);
 }

admin_tools/menu/templates/admin_tools/menu/menu.html

 {% if menu.children %}
 <script type="text/javascript" src="{{ media_url }}/admin_tools/js/utils.js"></script>
 <script type="text/javascript" charset="utf-8">
+
     // Load js files syncronously and conditionally
     var js_files = [
         {
             src : '{{ media_url }}/admin_tools/js/jquery/jquery.min.js',
-            test: function() { return typeof(jQuery) == 'undefined'; } 
+            test: function() { return typeof(jQuery) == 'undefined'; }
         },
         {
             src : '{{ media_url }}/admin_tools/js/json.min.js',
-            test: function() { return typeof(JSON.stringify) == 'undefined'; } 
+            test: function() { return typeof(JSON.stringify) == 'undefined'; }
         },
         {
             src : '{{ media_url }}/admin_tools/js/menu.js',
             test: function() { return true; }
-        },
-        {% for js in menu.Media.js %}
+        }{% for js in menu.Media.js %},
         {
             src : '{{ media_url }}/{{ js }}',
             test: function() { return true; }
-        },{% endfor %}
+        }{% endfor %}
     ];
-    load_script(0, js_files);
+
+    loadScripts(js_files, function(){
+        jQuery(function($) {
+            {% if has_bookmark_item %}
+                process_bookmarks(
+                   "{{ request.get_full_path }}",
+                   "{{ title }}",
+                   "{% trans 'Please enter a name for the bookmark' %}"
+                );
+            {% endif %}
+        });
+    });
+
 </script>
 <!--[if IE 6]>
 <script type="text/javascript">
 });
 </script>
 <![endif]-->
+
 {% if has_bookmark_item %}
-<script type="text/javascript">
-jQuery(function($) {
-        process_bookmarks("{{ request.get_full_path }}", "{{ title }}", "{% trans 'Please enter a name for the bookmark' %}");
-});
-</script>
 
 {% if bookmark %}
 {% include "admin_tools/menu/remove_bookmark_form.html" %}
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.