yzt
2023-05-26 de4278af2fd46705a40bac58ec01122db6b7f3d7
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
define([
    "dojo/_base/declare", // declare
    "dojo/dom", // dom.byId
    "dojo/_base/lang", // lang.trim
    "dojo/query", // query
    "dojo/store/Memory",
    "../registry"   // registry.add registry.remove
], function(declare, dom, lang, query, MemoryStore, registry){
 
    // module:
    //      dijit/form/DataList
 
    function toItem(/*DOMNode*/ option){
        // summary:
        //      Convert `<option>` node to hash
        return {
            id: option.value,
            value: option.value,
            name: lang.trim(option.innerText || option.textContent || '')
        };
    }
 
    return declare("dijit.form.DataList", MemoryStore, {
        // summary:
        //      Inefficient but small data store specialized for inlined data via OPTION tags
        //
        // description:
        //      Provides a store for inlined data like:
        //
        //  |   <datalist>
        //  |       <option value="AL">Alabama</option>
        //  |       ...
 
        constructor: function(params, srcNodeRef){
            // summary:
            //      Create the widget.
            // params: Object|null
            //      Hash of initialization parameters for widget, including scalar values (like title, duration etc.)
            //      and functions, typically callbacks like onClick.
            //      The hash can contain any of the widget's properties, excluding read-only properties.
            // srcNodeRef: DOMNode|String
            //      Attach widget to this DOM node.
 
            // store pointer to original DOM tree
            this.domNode = dom.byId(srcNodeRef);
 
            lang.mixin(this, params);
            if(this.id){
                registry.add(this); // add to registry so it can be easily found by id
            }
            this.domNode.style.display = "none";
 
            this.inherited(arguments, [{
                data: query("option", this.domNode).map(toItem)
            }]);
        },
 
        destroy: function(){
            registry.remove(this.id);
        },
 
        fetchSelectedItem: function(){
            // summary:
            //      Get the option marked as selected, like `<option selected>`.
            //      Not part of dojo.data API.
            var option = query("> option[selected]", this.domNode)[0] || query("> option", this.domNode)[0];
            return option && toItem(option);
        }
    });
});