Merge branch 'implements-html-media-element' of

https://github.com/jtakakura/teavm into
jtakakura-implements-html-media-element

Conflicts:
	teavm-samples/pom.xml
This commit is contained in:
Alexey Andreev 2015-01-26 11:31:55 +04:00
commit 7fb5c32c9b
21 changed files with 1203 additions and 0 deletions

View File

@ -0,0 +1,24 @@
/*
* Copyright 2014 Alexey Andreev.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.teavm.dom.html;
/**
*
* @author Junji Takakura
*/
public interface HTMLAudioElement extends HTMLMediaElement {
}

View File

@ -0,0 +1,185 @@
/*
* Copyright 2014 Alexey Andreev.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.teavm.dom.html;
import java.util.Date;
import org.teavm.dom.media.AudioTrackList;
import org.teavm.dom.media.MediaController;
import org.teavm.dom.media.MediaError;
import org.teavm.dom.media.TextTrack;
import org.teavm.dom.media.TextTrackList;
import org.teavm.dom.media.TimeRanges;
import org.teavm.dom.media.VideoTrackList;
import org.teavm.jso.JSProperty;
/**
*
* @author Junji Takakura
*/
public interface HTMLMediaElement extends HTMLElement {
int HAVE_NOTHING = 0;
int HAVE_METADATA = 1;
int HAVE_CURRENT_DATA = 2;
int HAVE_FUTURE_DATA = 3;
int HAVE_ENOUGH_DATA = 4;
int NETWORK_EMPTY = 0;
int NETWORK_IDLE = 1;
int NETWORK_LOADING = 2;
int NETWORK_NO_SOURCE = 3;
@JSProperty
MediaError getError();
@JSProperty
String getSrc();
@JSProperty
void setSrc(String src);
@JSProperty
String getCurrentSrc();
@JSProperty
String getCrossOrigin();
@JSProperty
void setCrossOrigin(String crossOrigin);
@JSProperty
int getNetworkState();
@JSProperty
String getPreload();
@JSProperty
void setPreload(String preload);
@JSProperty
TimeRanges getBuffered();
@JSProperty
int getReadyState();
@JSProperty
boolean isSeeking();
@JSProperty
double getCurrentTime();
@JSProperty
void setCurrentTime(double currentTime);
@JSProperty
double getDuration();
@JSProperty
Date getStartDate();
@JSProperty
boolean isPaused();
@JSProperty
double getDefaultPlaybackRate();
@JSProperty
void setDefaultPlaybackRate(double defaultPlaybackRate);
@JSProperty
double getPlaybackRate();
@JSProperty
void setPlaybackRate(double playbackRate);
@JSProperty
TimeRanges getPlayed();
@JSProperty
TimeRanges getSeekable();
@JSProperty
boolean isEnded();
@JSProperty
boolean isAutoplay();
@JSProperty
void setAutoplay(boolean autoplay);
@JSProperty
boolean isLoop();
@JSProperty
void setLoop(boolean loop);
@JSProperty
String getMediaGroup();
@JSProperty
void setMediaGroup(String mediaGroup);
@JSProperty
MediaController getController();
@JSProperty
void setController(MediaController controller);
@JSProperty
boolean isControls();
@JSProperty
void setControls(boolean controls);
@JSProperty
float getVolume();
@JSProperty
void setVolume(float volume);
@JSProperty
boolean isMuted();
@JSProperty
void setMuted(boolean muted);
@JSProperty
boolean isDefaultMuted();
@JSProperty
void setDefaultMuted(boolean defaultMuted);
AudioTrackList getAudioTracks();
VideoTrackList getVideoTracks();
TextTrackList getTextTracks();
TextTrack addTextTrack(String kind);
TextTrack addTextTrack(String kind, String label);
TextTrack addTextTrack(String kind, String label, String language);
void play();
void pause();
void load();
String canPlayType(String type);
}

View File

@ -0,0 +1,44 @@
/*
* Copyright 2014 Alexey Andreev.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.teavm.dom.html;
import org.teavm.jso.JSProperty;
/**
*
* @author Junji Takakura
*/
public interface HTMLSourceElement extends HTMLElement {
@JSProperty
String getType();
@JSProperty
void setType(String type);
@JSProperty
String getSrc();
@JSProperty
void setSrc(String src);
@JSProperty
String getMedia();
@JSProperty
void setMedia(String media);
}

View File

@ -0,0 +1,49 @@
/*
* Copyright 2014 Alexey Andreev.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.teavm.dom.html;
import org.teavm.jso.JSProperty;
/**
*
* @author Junji Takakura
*/
public interface HTMLVideoElement extends HTMLMediaElement {
@JSProperty
int getWidth();
@JSProperty
int getHeight();
@JSProperty
void setWidth(int width);
@JSProperty
void setHeight(int height);
@JSProperty
int getVideoWidth();
@JSProperty
int getVideoHeight();
@JSProperty
String getPoster();
@JSProperty
void setPoster(String poster);
}

View File

@ -0,0 +1,44 @@
/*
* Copyright 2014 Alexey Andreev.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.teavm.dom.media;
import org.teavm.jso.JSObject;
import org.teavm.jso.JSProperty;
/**
*
* @author Junji Takakura
*/
public interface AudioTrack extends JSObject {
@JSProperty
String getId();
@JSProperty
String getLabel();
@JSProperty
String getKind();
@JSProperty
String getLanguage();
@JSProperty
boolean isEnabled();
@JSProperty
void setEnabled(boolean enabled);
}

View File

@ -0,0 +1,28 @@
/*
* Copyright 2014 Alexey Andreev.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.teavm.dom.media;
import org.teavm.dom.events.EventTarget;
import org.teavm.jso.JSArrayReader;
/**
*
* @author Junji Takakura
*/
public interface AudioTrackList extends EventTarget, JSArrayReader<AudioTrack> {
AudioTrack getTrackById(String id);
}

View File

@ -0,0 +1,81 @@
/*
* Copyright 2014 Alexey Andreev.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.teavm.dom.media;
import org.teavm.jso.JSObject;
import org.teavm.jso.JSProperty;
/**
*
* @author Junji Takakura
*/
public interface MediaController extends JSObject {
@JSProperty
TimeRanges getBuffered();
@JSProperty
double getCurrentTime();
@JSProperty
void setCurrentTime(double currentTime);
@JSProperty
double getDefaultPlaybackRate();
@JSProperty
void setDefaultPlaybackRate(double defaultPlaybackRate);
@JSProperty
double getDuration();
@JSProperty
boolean isMuted();
@JSProperty
void setMuted(boolean muted);
@JSProperty
boolean isPaused();
@JSProperty
double getPlaybackRate();
@JSProperty
void setPlaybackRate(double playbackRate);
@JSProperty
String getPlaybackState();
@JSProperty
TimeRanges getPlayed();
@JSProperty
int getReadyState();
@JSProperty
TimeRanges getSeekable();
@JSProperty
float getVolume();
@JSProperty
void setVolume(float volume);
void play();
void pause();
}

View File

@ -0,0 +1,34 @@
/*
* Copyright 2014 Alexey Andreev.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.teavm.dom.media;
import org.teavm.jso.JSObject;
import org.teavm.jso.JSProperty;
/**
*
* @author Junji Takakura
*/
public interface MediaError extends JSObject {
int MEDIA_ERR_ABORTED = 1;
int MEDIA_ERR_NETWORK = 2;
int MEDIA_ERR_DECODE = 3;
int MEDIA_ERR_SRC_NOT_SUPPORTED = 4;
@JSProperty
int getCode();
}

View File

@ -0,0 +1,58 @@
/*
* Copyright 2014 Alexey Andreev.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.teavm.dom.media;
import org.teavm.dom.events.EventTarget;
import org.teavm.jso.JSProperty;
/**
*
* @author Junji Takakura
*/
public interface TextTrack extends EventTarget {
String DISABLED = "disabled";
String HIDDEN = "hidden";
String SHOWING = "showing";
@JSProperty
String getId();
@JSProperty
String getLabel();
@JSProperty
String getKind();
@JSProperty
String getLanguage();
@JSProperty
String getMode();
@JSProperty
void setMode(String mode);
@JSProperty
TextTrackCueList getCues();
@JSProperty
TextTrackCueList getActiveCues();
void addCue(TextTrackCue cue);
void removeCue(TextTrackCue cue);
}

View File

@ -0,0 +1,98 @@
/*
* Copyright 2014 Alexey Andreev.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.teavm.dom.media;
import org.teavm.dom.core.DocumentFragment;
import org.teavm.dom.events.EventTarget;
import org.teavm.jso.JSProperty;
/**
*
* @author Junji Takakura
*/
public interface TextTrackCue extends EventTarget {
@JSProperty
TextTrack getTrack();
@JSProperty
String getId();
@JSProperty
void setId(String id);
@JSProperty
double getStartTime();
@JSProperty
void setStartTime(double startTime);
@JSProperty
double getEndTime();
@JSProperty
void setEndTime(double endTime);
@JSProperty
boolean isPauseOnExit();
@JSProperty
void setPauseOnExit(boolean pauseOnExit);
@JSProperty
String getVertical();
@JSProperty
void setVertical(String vertical);
@JSProperty
boolean isSnapToLines();
@JSProperty
void setSnapToLines(boolean snapToLines);
@JSProperty
int getLine();
@JSProperty
void setLine(int line);
@JSProperty
int getPosition();
@JSProperty
void setPosition(int position);
@JSProperty
int getSize();
@JSProperty
void setSize(int size);
@JSProperty
String getAlign();
@JSProperty
void setAlign(String align);
@JSProperty
String getText();
@JSProperty
void setText(String text);
DocumentFragment getCueAsHTML();
}

View File

@ -0,0 +1,28 @@
/*
* Copyright 2014 Alexey Andreev.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.teavm.dom.media;
import org.teavm.jso.JSArrayReader;
import org.teavm.jso.JSObject;
/**
*
* @author Junji Takakura
*/
public interface TextTrackCueList extends JSObject, JSArrayReader<TextTrackCue> {
TextTrackCue getCueById(String id);
}

View File

@ -0,0 +1,28 @@
/*
* Copyright 2014 Alexey Andreev.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.teavm.dom.media;
import org.teavm.dom.events.EventTarget;
import org.teavm.jso.JSArrayReader;
/**
*
* @author Junji Takakura
*/
public interface TextTrackList extends EventTarget, JSArrayReader<TextTrack> {
TextTrack getTrackById(String id);
}

View File

@ -0,0 +1,33 @@
/*
* Copyright 2014 Alexey Andreev.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.teavm.dom.media;
import org.teavm.jso.JSObject;
import org.teavm.jso.JSProperty;
/**
*
* @author Junji Takakura
*/
public interface TimeRanges extends JSObject {
@JSProperty
int getLength();
float start(int index);
float end(int index);
}

View File

@ -0,0 +1,44 @@
/*
* Copyright 2014 Alexey Andreev.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.teavm.dom.media;
import org.teavm.jso.JSObject;
import org.teavm.jso.JSProperty;
/**
*
* @author Junji Takakura
*/
public interface VideoTrack extends JSObject {
@JSProperty
String getId();
@JSProperty
String getLabel();
@JSProperty
String getKind();
@JSProperty
String getLanguage();
@JSProperty
boolean isSelected();
@JSProperty
void setSelected(boolean selected);
}

View File

@ -0,0 +1,32 @@
/*
* Copyright 2014 Alexey Andreev.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.teavm.dom.media;
import org.teavm.dom.events.EventTarget;
import org.teavm.jso.JSArrayReader;
import org.teavm.jso.JSProperty;
/**
*
* @author Junji Takakura
*/
public interface VideoTrackList extends EventTarget, JSArrayReader<VideoTrack> {
@JSProperty
int getSelectedIndex();
VideoTrack getTrackById(String id);
}

View File

@ -33,5 +33,6 @@
<module>teavm-samples-hello</module>
<module>teavm-samples-benchmark</module>
<module>teavm-samples-storage</module>
<module>teavm-samples-video</module>
</modules>
</project>

View File

@ -0,0 +1,110 @@
<!--
Copyright 2015 Alexey Andreev.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.teavm</groupId>
<artifactId>teavm-samples</artifactId>
<version>0.3.0-SNAPSHOT</version>
</parent>
<artifactId>teavm-samples-video</artifactId>
<packaging>war</packaging>
<name>TeaVM HTML5 video web application</name>
<description>A sample application that shows HTML5 video implementation for TeaVM</description>
<dependencies>
<dependency>
<groupId>org.teavm</groupId>
<artifactId>teavm-classlib</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.teavm</groupId>
<artifactId>teavm-jso</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.teavm</groupId>
<artifactId>teavm-dom</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.4</version>
<configuration>
<webResources>
<resource>
<directory>${project.build.directory}/generated/js</directory>
</resource>
</webResources>
</configuration>
</plugin>
<plugin>
<groupId>org.teavm</groupId>
<artifactId>teavm-maven-plugin</artifactId>
<version>${project.version}</version>
<executions>
<execution>
<id>web-client</id>
<phase>prepare-package</phase>
<goals>
<goal>build-javascript</goal>
</goals>
<configuration>
<targetDirectory>${project.build.directory}/generated/js/teavm</targetDirectory>
<mainClass>org.teavm.samples.video.Player</mainClass>
<runtime>SEPARATE</runtime>
<minifying>false</minifying>
<debugInformationGenerated>true</debugInformationGenerated>
<sourceMapsGenerated>true</sourceMapsGenerated>
<sourceFilesCopied>true</sourceFilesCopied>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<configuration>
<configLocation>../../checkstyle.xml</configLocation>
<propertyExpansion>config_loc=${basedir}/../..</propertyExpansion>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>

View File

@ -0,0 +1,221 @@
/*
* Copyright 2014 Alexey Andreev.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.teavm.samples.video;
import org.teavm.dom.browser.Window;
import org.teavm.dom.events.Event;
import org.teavm.dom.events.EventListener;
import org.teavm.dom.html.HTMLBodyElement;
import org.teavm.dom.html.HTMLButtonElement;
import org.teavm.dom.html.HTMLDocument;
import org.teavm.dom.html.HTMLElement;
import org.teavm.dom.html.HTMLSourceElement;
import org.teavm.dom.html.HTMLVideoElement;
import org.teavm.jso.JS;
public final class Player {
private static Window window = (Window)JS.getGlobal();
private static HTMLDocument document = window.getDocument();
private Player() {
}
public static void main(String[] args) {
HTMLSourceElement sourceMp4 = (HTMLSourceElement)document.createElement("source");
sourceMp4.setAttribute("id", "mp4");
sourceMp4.setSrc("http://media.w3.org/2010/05/sintel/trailer.mp4");
sourceMp4.setAttribute("type", "video/mp4");
HTMLSourceElement sourceWebm = (HTMLSourceElement)document.createElement("source");
sourceWebm.setAttribute("id", "webm");
sourceWebm.setSrc("http://media.w3.org/2010/05/sintel/trailer.webm");
sourceWebm.setAttribute("type", "video/webm");
HTMLSourceElement sourceOgv = (HTMLSourceElement)document.createElement("source");
sourceOgv.setAttribute("id", "ogv");
sourceOgv.setSrc("http://media.w3.org/2010/05/sintel/trailer.ogv");
sourceOgv.setAttribute("type", "video/ogg");
HTMLElement p = document.createElement("p");
p.appendChild(document.createTextNode("Your user agent does not support the HTML5 Video element."));
final HTMLVideoElement video = (HTMLVideoElement)document.createElement("video");
video.setAttribute("id", "video");
video.setControls(true);
video.setPreload("none");
video.setMediaGroup("myVideoGroup");
video.setPoster("http://media.w3.org/2010/05/sintel/poster.png");
video.appendChild(sourceMp4);
video.appendChild(sourceWebm);
video.appendChild(sourceOgv);
video.appendChild(p);
HTMLElement divVideo = document.createElement("div");
divVideo.appendChild(video);
HTMLButtonElement loadButton = (HTMLButtonElement)document.createElement("button");
loadButton.appendChild(document.createTextNode("load()"));
loadButton.addEventListener("click", new EventListener() {
@Override
public void handleEvent(Event evt) {
video.load();
}
});
HTMLButtonElement playButton = (HTMLButtonElement)document.createElement("button");
playButton.appendChild(document.createTextNode("play()"));
playButton.addEventListener("click", new EventListener() {
@Override
public void handleEvent(Event evt) {
video.play();
}
});
HTMLButtonElement pauseButton = (HTMLButtonElement)document.createElement("button");
pauseButton.appendChild(document.createTextNode("pause()"));
pauseButton.addEventListener("click", new EventListener() {
@Override
public void handleEvent(Event evt) {
video.pause();
}
});
HTMLButtonElement currentTimePlusButton = (HTMLButtonElement)document.createElement("button");
currentTimePlusButton.appendChild(document.createTextNode("currentTime+=10"));
currentTimePlusButton.addEventListener("click", new EventListener() {
@Override
public void handleEvent(Event evt) {
video.setCurrentTime(video.getCurrentTime() + 10);
}
});
HTMLButtonElement currentTimeMinusButton = (HTMLButtonElement)document.createElement("button");
currentTimeMinusButton.appendChild(document.createTextNode("currentTime-=10"));
currentTimeMinusButton.addEventListener("click", new EventListener() {
@Override
public void handleEvent(Event evt) {
video.setCurrentTime(video.getCurrentTime() - 10);
}
});
HTMLButtonElement currentTime50Button = (HTMLButtonElement)document.createElement("button");
currentTime50Button.appendChild(document.createTextNode("currentTime=50"));
currentTime50Button.addEventListener("click", new EventListener() {
@Override
public void handleEvent(Event evt) {
video.setCurrentTime(50);
}
});
HTMLButtonElement playbackRateIncrementButton = (HTMLButtonElement)document.createElement("button");
playbackRateIncrementButton.appendChild(document.createTextNode("playbackRate++"));
playbackRateIncrementButton.addEventListener("click", new EventListener() {
@Override
public void handleEvent(Event evt) {
video.setPlaybackRate(video.getPlaybackRate() + 1);
}
});
HTMLButtonElement playbackRateDecrementButton = (HTMLButtonElement)document.createElement("button");
playbackRateDecrementButton.appendChild(document.createTextNode("playbackRate--"));
playbackRateDecrementButton.addEventListener("click", new EventListener() {
@Override
public void handleEvent(Event evt) {
video.setPlaybackRate(video.getPlaybackRate() - 1);
}
});
HTMLButtonElement playbackRatePlusButton = (HTMLButtonElement)document.createElement("button");
playbackRatePlusButton.appendChild(document.createTextNode("playbackRate+=0.1"));
playbackRatePlusButton.addEventListener("click", new EventListener() {
@Override
public void handleEvent(Event evt) {
video.setPlaybackRate(video.getPlaybackRate() + 0.1);
}
});
HTMLButtonElement playbackRateMinusButton = (HTMLButtonElement)document.createElement("button");
playbackRateMinusButton.appendChild(document.createTextNode("playbackRate-=0.1"));
playbackRateMinusButton.addEventListener("click", new EventListener() {
@Override
public void handleEvent(Event evt) {
video.setPlaybackRate(video.getPlaybackRate() - 0.1);
}
});
HTMLButtonElement volumePlusButton = (HTMLButtonElement)document.createElement("button");
volumePlusButton.appendChild(document.createTextNode("volume+=0.1"));
volumePlusButton.addEventListener("click", new EventListener() {
@Override
public void handleEvent(Event evt) {
video.setVolume(video.getVolume() + 0.1f);
}
});
HTMLButtonElement volumeMinusButton = (HTMLButtonElement)document.createElement("button");
volumeMinusButton.appendChild(document.createTextNode("volume-=0.1"));
volumeMinusButton.addEventListener("click", new EventListener() {
@Override
public void handleEvent(Event evt) {
video.setVolume(video.getVolume() - 0.1f);
}
});
HTMLButtonElement muteButton = (HTMLButtonElement)document.createElement("button");
muteButton.appendChild(document.createTextNode("muted=true"));
muteButton.addEventListener("click", new EventListener() {
@Override
public void handleEvent(Event evt) {
video.setMuted(true);
}
});
HTMLButtonElement unmuteButton = (HTMLButtonElement)document.createElement("button");
unmuteButton.appendChild(document.createTextNode("muted=false"));
unmuteButton.addEventListener("click", new EventListener() {
@Override
public void handleEvent(Event evt) {
video.setMuted(false);
}
});
HTMLElement divButtons = document.createElement("div");
divButtons.setAttribute("id", "buttons");
divButtons.appendChild(loadButton);
divButtons.appendChild(playButton);
divButtons.appendChild(pauseButton);
divButtons.appendChild(document.createElement("br"));
divButtons.appendChild(currentTimePlusButton);
divButtons.appendChild(currentTimeMinusButton);
divButtons.appendChild(currentTime50Button);
divButtons.appendChild(document.createElement("br"));
divButtons.appendChild(playbackRateIncrementButton);
divButtons.appendChild(playbackRateDecrementButton);
divButtons.appendChild(playbackRatePlusButton);
divButtons.appendChild(playbackRateMinusButton);
divButtons.appendChild(document.createElement("br"));
divButtons.appendChild(volumePlusButton);
divButtons.appendChild(volumeMinusButton);
divButtons.appendChild(muteButton);
divButtons.appendChild(unmuteButton);
HTMLBodyElement body = document.getBody();
body.appendChild(divVideo);
body.appendChild(divButtons);
}
}

View File

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright 2015 Alexey Andreev.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
</web-app>

View File

@ -0,0 +1,28 @@
<!--
Copyright 2015 Alexey Andreev.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<!DOCTYPE html>
<html>
<head>
<title>HTML5 Video web application</title>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<script type="text/javascript" charset="utf-8" src="teavm/runtime.js"></script>
<script type="text/javascript" charset="utf-8" src="teavm/classes.js"></script>
<link href="style.css" rel="stylesheet" type="text/css">
</head>
<body onload="main()">
<h1>HTML5 Video web application</h1>
</body>
</html>

View File

@ -0,0 +1,12 @@
video {
border: 1px solid black;
padding: 0; margin: 0;
width: 427px;
height: 240px;
background-color: black;
margin: auto;
float: left;
}
#buttons {
text-align: center;
}