source: Dev/trunk/src/client/dojox/mobile/Audio.js @ 529

Last change on this file since 529 was 483, checked in by hendrikvanantwerpen, 11 years ago

Added Dojo 1.9.3 release.

File size: 3.3 KB
Line 
1define([
2        "dojo/_base/declare",
3        "dojo/dom-construct",
4        "dojo/sniff",
5        "dijit/_Contained",
6        "dijit/_WidgetBase"
7], function(declare, domConstruct, has, Contained, WidgetBase){
8        // module:
9        //              dojox/mobile/Audio
10
11        return declare("dojox.mobile.Audio", [WidgetBase, Contained], {
12                // summary:
13                //              A thin wrapper around the HTML5 `<audio>` element.
14                // description:
15                //              dojox/mobile/Audio is a widget which plays audio. If all sources cannot
16                //              be played (typically, in desktop browsers that do not support `<audio>`),
17                //              dojox/mobile/Audio automatically replaces `<audio>` with `<embed>`, such
18                //              that the browser tries to play it with a suitable plug-in.
19               
20                // source: [const] Array
21                //              An array of src and type,
22                //              ex. [{src:"a.mp3", type:"audio/mpeg"}, {src:"a.ogg", type:"audio/ogg"}, ...].
23                //              The src gives the path of the media resource. The type gives the
24                //              type of the media resource.
25                //              Note that changing the value of the property after the widget
26                //              creation has no effect.
27                source: null,
28
29                // width: [const] String
30                //              The width of the embed element.
31                //              Note that changing the value of the property after the widget
32                //              creation has no effect.
33                width: "200px",
34
35                // height: [const] String
36                //              The height of the embed element.
37                //              Note that changing the value of the property after the widget
38                //              creation has no effect.
39                height: "15px",
40
41                // _playable: [private] Boolean
42                //              Internal flag.
43                _playable: false,
44               
45                // _tag: [private] String
46                //              The name of the tag ("audio").
47                _tag: "audio",
48
49                constructor: function(){
50                        // summary:
51                        //              Creates a new instance of the class.
52                        this.source = [];
53                },
54
55                buildRendering: function(){
56                        this.domNode = this.srcNodeRef || domConstruct.create(this._tag);
57                },
58
59                _getEmbedRegExp: function(){
60                        // tags:
61                        //              private
62                        return has('ff') ? /audio\/mpeg/i :
63                                   has('ie') ? /audio\/wav/i :
64                                   null;
65                },
66
67                startup: function(){
68                        if(this._started){ return; }
69                        this.inherited(arguments);
70                        var i;
71                        if(this.domNode.canPlayType){
72                                if(this.source.length > 0){
73                                        for(i = 0, len = this.source.length; i < len; i++){
74                                                domConstruct.create("source", {src:this.source[i].src, type:this.source[i].type}, this.domNode);
75                                                this._playable = this._playable || !!this.domNode.canPlayType(this.source[i].type);
76                                        }
77                                }else{
78                                        for(i = 0, len = this.domNode.childNodes.length; i < len; i++){
79                                                var n = this.domNode.childNodes[i];
80                                                if(n.nodeType === 1 && n.nodeName === "SOURCE"){
81                                                        this.source.push({src:n.src, type:n.type});
82                                                        this._playable = this._playable || !!this.domNode.canPlayType(n.type);
83                                                }
84                                        }
85                                }
86                        }
87                        has.add("mobile-embed-audio-video-support", true);      //It should move to staticHasFeatures
88                        if(has("mobile-embed-audio-video-support")){
89                                if(!this._playable){
90                                        for(i = 0, len = this.source.length, re = this._getEmbedRegExp(); i < len; i++){
91                                                if(this.source[i].type.match(re)){
92                                                        var node = domConstruct.create("embed", {
93                                                                src: this.source[0].src,
94                                                                type: this.source[0].type,
95                                                                width: this.width,
96                                                                height: this.height
97                                                        });
98                                                        this.domNode.parentNode.replaceChild(node, this.domNode);
99                                                        this.domNode = node;
100                                                        this._playable = true;
101                                                        break;
102                                                }
103                                        }
104                                }
105                        }
106                }
107
108        });
109});
Note: See TracBrowser for help on using the repository browser.