diff --git a/plugin-loader.js b/plugin-loader.js index 00fd40d..6916349 100644 --- a/plugin-loader.js +++ b/plugin-loader.js @@ -1,48 +1,56 @@ -function plugin_load(config, div, entry) { - $("#load-pre-status").text("Loading..."); - var status_span = $('#load-status'); - - var len1 = config.javascript && config.javascript.length || 0; - var len2 = config.globals && config.javascript.length || 0; - var num_progress = len1 + len2; - - status_span.after(" / " + num_progress); - status_span.text("0"); - - var progress = 0; - var check = function() { - if (++progress == num_progress) { - status_span.parent().empty(); - if(typeof plugin_init !== 'undefined') plugin_init(div, entry); - if(typeof plugin_render !== 'undefined') plugin_render(div, entry); - } - } - - config.javascript.forEach(function(script) { - $.ajax({ - dataType: "script", - cache: true, - url: script, - success: function () { - status_span.text(progress + 1 + ""); - check(); - } - }); - }); - - Object.keys(config.globals).forEach(function(global_name) { - $.get(config.globals[global_name], function(data) { - window[global_name] = data; - check(); - }); - }); - - config.css.forEach(function(css_url) { - var link = document.createElement('link'); - link.rel = 'stylesheet'; - link.type = 'text/css'; - link.href = css_url; - link.media = 'all'; - $('head').append(link); - }); -} +function plugin_start(div, entry, editable) { + if(typeof plugin_init !== 'undefined') plugin_init(div, entry, editable); + if(typeof plugin_render !== 'undefined') plugin_render(div, entry); +} + +function plugin_load(config, div, entry, editable) { + $("#load-pre-status").text("Loading..."); + var status_span = $('#load-status'); + + var len_deps = config.dependencies && config.dependencies.length || 0; + var len_globals = config.globals && Object.keys(config.globals).length || 0; + + var progress = 0; + var num_progress = len_deps + len_globals; + + status_span.after(" / " + num_progress); + status_span.text("0"); + + var check = function() { + status_span.text(progress + 1 + ""); + if (++progress >= num_progress) { // has to be >= for num_progress = 0 + status_span.parent().empty(); + $.ajax({dataType: "script", cache: true, url: config.javascript, success: function() { plugin_start(div, entry, editable); }}); + } + } + + config.dependencies.forEach(function(script) { + $.ajax({ + dataType: "script", + cache: true, + url: script, + success: check + }); + }); + + Object.keys(config.globals).forEach(function(global_name) { + $.get(config.globals[global_name], function(data) { + window[global_name] = data; + check(); + }); + }); + + config.css.forEach(function(css_url) { + var link = document.createElement('link'); + link.rel = 'stylesheet'; + link.type = 'text/css'; + link.href = css_url; + link.media = 'all'; + $('head').append(link); + }); + + // always adding a style element for to use for convenience + $('head').append($('')); + + if(num_progress == 0) check(); +} diff --git a/plugin-server.py b/plugin-server.py index 72b9d81..e98e30f 100644 --- a/plugin-server.py +++ b/plugin-server.py @@ -8,6 +8,7 @@ $LOCATION$ -> location of plugin every plugin is its own folder and if folder is "myplugin" and this website's url is "http://example.com", then $LOCATION$ gets the value of http://example.com/myplugin +requirements: flask, redis """ import sys @@ -18,14 +19,11 @@ import random import redis from flask import Flask, Response, request -from flask_cors import CORS - app = Flask(__name__) -CORS(app, resources={r"/*": {"origins": "*"}}) redis = redis.Redis(host='localhost', port=6379, db=0) -URL = "http://plugins.lexonomy.cjvt.si" +URL = "https://plugins.lexonomy.cjvt.si" REPLACE_STRING = "$LOCATION$" @@ -50,7 +48,7 @@ def generate_etag(N=12): def return_file(path, plugin=None): - full_path = path if plugin is None else "plugins/{}/{}".format(plugin, path) + full_path = path if plugin is None else"{}/{}".format(plugin, path) if not os.path.isfile(full_path): return "File not found", 404 @@ -102,6 +100,7 @@ def return_file(path, plugin=None): elif request.headers['If-None-Match'] != etag: status_code = 200 + status_code = 200 return Response(result, mimetype=mt, headers=headers, status=status_code)