summaryrefslogtreecommitdiff
path: root/public/assets/js/_dependency-control/require/plugins.attribute.setup.js
blob: 296b5676a8bb50e6ceddc1a9ca43b5270edd984f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
define('plugins.attribute.setup', ['plugins.attribute'], function (attributePlugins) {
    var $ = window.jQuery, _done = false;
    if ($) {
        $ = window.jQuery;
        $.defineAttributePlugin = function (pluginName, dependencies, plugin) {
            return attributePlugins.define(pluginName, dependencies, plugin, function (fn, args, context){
                args[0] = $(args[0]);
                return fn.apply(context, args);
            });
        }

        $.fn.parseAttributePlugins = function () {
            attributePlugins.parse(this);
            return $(this);
        };

        $.fn.executePlugin = function (pluginName, pluginConfiguration, callback) {
            return $(this).each(function () {
                var $element = $(this);
                return attributePlugins.execute(this, pluginName, pluginConfiguration).then(function (resolved) {
                    if (typeof (callback) !== 'undefined') {
                        return callback.apply($element, [resolved]);
                    }
                });
            });
        };

        $.getOnce = function (options) {
            if (!window.getOnceCallbacks) {
                window.getOnceCallbacks = {};
            }
            if (options.data) {
                var s = $.param(options.data, options.traditional);
                if (options.url.indexOf('?') == -1) {
                    options.url += '?' + s;
                }
                else {
                    options.url += '&' + s;
                }
                delete options.data;
            }
            if (window.getOnceCallbacks[options.url]) {
                window.getOnceCallbacks[options.url].push({
                    success: options.success,
                    error: options.error
                });
                return;
            }

            window.getOnceCallbacks[options.url] = [{
                success: options.success,
                error: options.error
            }];
            function done(m, a) {
                var callbacks = window.getOnceCallbacks[options.url];
                for (var i = 0; i < callbacks.length; i++) {
                    callbacks[i][m].apply(this, a);
                }
                delete window.getOnceCallbacks[options.url];
            }

            options.success = function () {
                done.apply(this, ['success', arguments]);

            };
            options.error = function () {
                done.apply(this, ['error', arguments]);
            };
            $.ajax(options);
        }
        window.define.amd["jQuery"] = window.define.amd["jquery"] = { loaded: true, ready: true, object: $ };   
    }
    
    window.$$plugins = attributePlugins;
    return function () {
        if (_done) {
            return;
        }
        _done = true;
        attributePlugins.initialize({
            preconfigure: function (ctx) {
                //This is the way to configure/extend all plugin instances. 
                //The 'configuration' object will be available to all plugins by invoking this.configuration
                //You can return a promise like an xhr request or other async operations 
                //that should be resolved using the value of ctx parameter.
                let loggingConfigString = localStorage.getItem("plugins.configuration.logging");
                ctx.configuration.logging = (loggingConfigString && JSON.parse(loggingConfigString))  || {};
            }
        });   
    }
});
require(['plugins.attribute.setup'], function (setup) {
    setup();
});