Project

General

Profile

1
import { $, camelize, fastdom, isArray, isJQuery, isPlainObject } from '../util/index';
2

    
3
export default function (UIkit) {
4

    
5
    const DATA = UIkit.data;
6

    
7
    UIkit.components = {};
8

    
9
    UIkit.component = function (id, options) {
10

    
11
        var name = camelize(id);
12

    
13
        if (isPlainObject(options)) {
14
            options.name = name;
15
            options = UIkit.extend(options);
16
        } else {
17
            options.options.name = name;
18
        }
19

    
20
        UIkit.components[name] = options;
21

    
22
        UIkit[name] = function (element, data) {
23

    
24
            if (isPlainObject(element)) {
25
                return new UIkit.components[name]({data: element});
26
            }
27

    
28
            if (UIkit.components[name].options.functional) {
29
                return new UIkit.components[name]({data: [...arguments]});
30
            }
31

    
32
            return $(element).toArray().map(element =>
33
                UIkit.getComponent(element, name) || new UIkit.components[name]({el: element, data: data || {}})
34
            )[0];
35
        };
36

    
37
        if (UIkit._initialized && !options.options.functional) {
38
            fastdom.measure(() => UIkit[name](`[uk-${id}],[data-uk-${id}]`));
39
        }
40

    
41
        return UIkit.components[name];
42
    };
43

    
44
    UIkit.getComponents = element => element && (element = isJQuery(element) ? element[0] : element) && element[DATA] || {};
45
    UIkit.getComponent = (element, name) => UIkit.getComponents(element)[name];
46

    
47
    UIkit.connect = node => {
48

    
49
        var name;
50

    
51
        if (node[DATA]) {
52
            for (name in node[DATA]) {
53
                node[DATA][name]._callConnected();
54
            }
55
        }
56

    
57
        for (var i = 0; i < node.attributes.length; i++) {
58

    
59
            name = node.attributes[i].name;
60

    
61
            if (name.lastIndexOf('uk-', 0) === 0 || name.lastIndexOf('data-uk-', 0) === 0) {
62

    
63
                name = camelize(name.replace('data-uk-', '').replace('uk-', ''));
64

    
65
                if (UIkit[name]) {
66
                    UIkit[name](node);
67
                }
68
            }
69
        }
70

    
71
    };
72

    
73
    UIkit.disconnect = node => {
74
        for (var name in node[DATA]) {
75
            node[DATA][name]._callDisconnected();
76
        }
77
    }
78

    
79
}
(2-2/7)