mirror of
https://github.com/Eaglercraft-TeaVM-Fork/eagler-teavm.git
synced 2024-12-22 16:14:10 -08:00
Adds datetime demonstration application.
This commit is contained in:
parent
5770df5413
commit
e83fd18dec
1
pom.xml
1
pom.xml
|
@ -76,6 +76,7 @@
|
||||||
<module>teavm-dom</module>
|
<module>teavm-dom</module>
|
||||||
<module>teavm-jso</module>
|
<module>teavm-jso</module>
|
||||||
<module>teavm-html4j</module>
|
<module>teavm-html4j</module>
|
||||||
|
<module>teavm-samples</module>
|
||||||
</modules>
|
</modules>
|
||||||
|
|
||||||
<dependencyManagement>
|
<dependencyManagement>
|
||||||
|
|
|
@ -15,6 +15,7 @@
|
||||||
*/
|
*/
|
||||||
package org.teavm.classlib.impl;
|
package org.teavm.classlib.impl;
|
||||||
|
|
||||||
|
import org.teavm.classlib.impl.unicode.CLDRHelper;
|
||||||
import org.teavm.classlib.java.util.LocaleSettingsNativeGenerator;
|
import org.teavm.classlib.java.util.LocaleSettingsNativeGenerator;
|
||||||
import org.teavm.javascript.ni.Generator;
|
import org.teavm.javascript.ni.Generator;
|
||||||
import org.teavm.model.MethodDescriptor;
|
import org.teavm.model.MethodDescriptor;
|
||||||
|
@ -47,7 +48,10 @@ public class JCLPlugin implements TeaVMPlugin {
|
||||||
host.add(new MethodReference("java.util.Locale", "readLanguagesFromCLDR", ValueType.VOID), localeGen);
|
host.add(new MethodReference("java.util.Locale", "readLanguagesFromCLDR", ValueType.VOID), localeGen);
|
||||||
host.add(new MethodReference("java.util.Locale", "readCountriesFromCLDR", ValueType.VOID), localeGen);
|
host.add(new MethodReference("java.util.Locale", "readCountriesFromCLDR", ValueType.VOID), localeGen);
|
||||||
host.add(new MethodReference("java.util.Calendar", "readWeeksFromCLDR", ValueType.VOID), localeGen);
|
host.add(new MethodReference("java.util.Calendar", "readWeeksFromCLDR", ValueType.VOID), localeGen);
|
||||||
|
host.add(new MethodReference(CLDRHelper.class.getName(), "readLikelySubtagsFromCLDR", ValueType.VOID),
|
||||||
|
localeGen);
|
||||||
host.add(new MethodReference("java.util.Locale", "getDefaultLocale", ValueType.object("java.lang.String")),
|
host.add(new MethodReference("java.util.Locale", "getDefaultLocale", ValueType.object("java.lang.String")),
|
||||||
localeGen);
|
localeGen);
|
||||||
|
host.add(new MethodReference("java.util.Locale", "readAvailableLocales", ValueType.VOID), localeGen);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,6 +15,9 @@
|
||||||
*/
|
*/
|
||||||
package org.teavm.classlib.impl.unicode;
|
package org.teavm.classlib.impl.unicode;
|
||||||
|
|
||||||
|
import org.teavm.dependency.PluggableDependency;
|
||||||
|
import org.teavm.javascript.ni.GeneratedBy;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @author Alexey Andreev <konsoletyper@gmail.com>
|
* @author Alexey Andreev <konsoletyper@gmail.com>
|
||||||
|
@ -33,6 +36,7 @@ public class CLDRHelper {
|
||||||
// Defined by JCLPlugin
|
// Defined by JCLPlugin
|
||||||
private static native void readLikelySubtagsFromCLDR();
|
private static native void readLikelySubtagsFromCLDR();
|
||||||
|
|
||||||
// TODO: implement using CLDR
|
@GeneratedBy(CLDRHelperNativeGenerator.class)
|
||||||
|
@PluggableDependency(CLDRHelperNativeGenerator.class)
|
||||||
private static native String getLikelySubtagsImpl(String localeCode);
|
private static native String getLikelySubtagsImpl(String localeCode);
|
||||||
}
|
}
|
||||||
|
|
|
@ -56,7 +56,8 @@ public class LocaleNativeGenerator implements Generator, DependencyPlugin {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void generateAvailableLocales(SourceWriter writer) throws IOException {
|
private void generateAvailableLocales(SourceWriter writer) throws IOException {
|
||||||
writer.append("var locales = Object.keys(").appendClass("java.util.Locale").append(".$CLDR);").softNewLine();
|
writer.append("var locales = ").appendClass("java.util.Locale").append(".$CLDR.availableLocales;")
|
||||||
|
.softNewLine();
|
||||||
writer.append("var array = $rt_createArray(").appendClass("java.lang.String").append(", locales);")
|
writer.append("var array = $rt_createArray(").appendClass("java.lang.String").append(", locales);")
|
||||||
.softNewLine();
|
.softNewLine();
|
||||||
writer.append("for (var i = 0; i < locales.length; ++i) {").indent().softNewLine();
|
writer.append("for (var i = 0; i < locales.length; ++i) {").indent().softNewLine();
|
||||||
|
|
|
@ -40,6 +40,7 @@ public class LocaleSettingsNativeGenerator implements Generator {
|
||||||
private Map<String, LocaleInfo> knownLocales = new LinkedHashMap<>();
|
private Map<String, LocaleInfo> knownLocales = new LinkedHashMap<>();
|
||||||
private Map<String, Integer> minDaysMap = new LinkedHashMap<>();
|
private Map<String, Integer> minDaysMap = new LinkedHashMap<>();
|
||||||
private Map<String, Integer> firstDayMap = new LinkedHashMap<>();
|
private Map<String, Integer> firstDayMap = new LinkedHashMap<>();
|
||||||
|
private Map<String, String> likelySubtags = new LinkedHashMap<>();
|
||||||
private Set<String> availableLocales = new LinkedHashSet<>();
|
private Set<String> availableLocales = new LinkedHashSet<>();
|
||||||
private Set<String> availableLanguages = new LinkedHashSet<>();
|
private Set<String> availableLanguages = new LinkedHashSet<>();
|
||||||
private Set<String> availableCountries = new LinkedHashSet<>();
|
private Set<String> availableCountries = new LinkedHashSet<>();
|
||||||
|
@ -60,7 +61,7 @@ public class LocaleSettingsNativeGenerator implements Generator {
|
||||||
|
|
||||||
private void findAvailableLocales() {
|
private void findAvailableLocales() {
|
||||||
String availableLocalesString = properties.getProperty("java.util.Locale.available", "en_EN").trim();
|
String availableLocalesString = properties.getProperty("java.util.Locale.available", "en_EN").trim();
|
||||||
for (String locale : Arrays.asList(availableLocalesString.split(" *, +"))) {
|
for (String locale : Arrays.asList(availableLocalesString.split(" *, *"))) {
|
||||||
int countryIndex = locale.indexOf('_');
|
int countryIndex = locale.indexOf('_');
|
||||||
if (countryIndex > 0) {
|
if (countryIndex > 0) {
|
||||||
String language = locale.substring(0, countryIndex);
|
String language = locale.substring(0, countryIndex);
|
||||||
|
@ -90,6 +91,8 @@ public class LocaleSettingsNativeGenerator implements Generator {
|
||||||
if (entry.getName().equals("supplemental/weekData.json")) {
|
if (entry.getName().equals("supplemental/weekData.json")) {
|
||||||
readWeekData(input);
|
readWeekData(input);
|
||||||
continue;
|
continue;
|
||||||
|
} else if (entry.getName().equals("supplemental/likelySubtags.json")) {
|
||||||
|
readLikelySubtags(input);
|
||||||
}
|
}
|
||||||
int objectIndex = entry.getName().lastIndexOf('/');
|
int objectIndex = entry.getName().lastIndexOf('/');
|
||||||
String objectName = entry.getName().substring(objectIndex + 1);
|
String objectName = entry.getName().substring(objectIndex + 1);
|
||||||
|
@ -156,6 +159,15 @@ public class LocaleSettingsNativeGenerator implements Generator {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void readLikelySubtags(InputStream input) {
|
||||||
|
JsonObject root = (JsonObject)new JsonParser().parse(new InputStreamReader(input));
|
||||||
|
JsonObject likelySubtagsJson = root.get("supplemental").getAsJsonObject().get("likelySubtags")
|
||||||
|
.getAsJsonObject();
|
||||||
|
for (Map.Entry<String, JsonElement> property : likelySubtagsJson.entrySet()) {
|
||||||
|
likelySubtags.put(property.getKey(), property.getValue().getAsString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private int getNumericDay(String day) {
|
private int getNumericDay(String day) {
|
||||||
switch (day) {
|
switch (day) {
|
||||||
case "sun":
|
case "sun":
|
||||||
|
@ -190,6 +202,12 @@ public class LocaleSettingsNativeGenerator implements Generator {
|
||||||
case "readWeeksFromCLDR":
|
case "readWeeksFromCLDR":
|
||||||
generateReadWeeksFromCDLR(writer);
|
generateReadWeeksFromCDLR(writer);
|
||||||
break;
|
break;
|
||||||
|
case "readLikelySubtagsFromCLDR":
|
||||||
|
generateReadLikelySubtagsFromCLDR(writer);
|
||||||
|
break;
|
||||||
|
case "readAvailableLocales":
|
||||||
|
generateReadAvailableLocales(writer);
|
||||||
|
break;
|
||||||
case "getDefaultLocale":
|
case "getDefaultLocale":
|
||||||
generateGetDefaultLocale(writer);
|
generateGetDefaultLocale(writer);
|
||||||
break;
|
break;
|
||||||
|
@ -203,6 +221,20 @@ public class LocaleSettingsNativeGenerator implements Generator {
|
||||||
writer.outdent().append("}").softNewLine();
|
writer.outdent().append("}").softNewLine();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void generateReadAvailableLocales(SourceWriter writer) throws IOException {
|
||||||
|
generateDefender(writer, "availableLocales");
|
||||||
|
writer.appendClass("java.util.Locale").append(".$CLDR.availableLocales = [");
|
||||||
|
boolean first = true;
|
||||||
|
for (String locale : availableLocales) {
|
||||||
|
if (!first) {
|
||||||
|
writer.append(',').ws();
|
||||||
|
}
|
||||||
|
first = false;
|
||||||
|
writer.append('"').append(Renderer.escapeString(locale)).append('"');
|
||||||
|
}
|
||||||
|
writer.append("];").softNewLine();
|
||||||
|
}
|
||||||
|
|
||||||
private void generateReadLanguagesFromCLDR(SourceWriter writer) throws IOException {
|
private void generateReadLanguagesFromCLDR(SourceWriter writer) throws IOException {
|
||||||
generateDefender(writer, "languages");
|
generateDefender(writer, "languages");
|
||||||
writer.appendClass("java.util.Locale").append(".$CLDR.languages = {").indent().softNewLine();
|
writer.appendClass("java.util.Locale").append(".$CLDR.languages = {").indent().softNewLine();
|
||||||
|
@ -226,7 +258,7 @@ public class LocaleSettingsNativeGenerator implements Generator {
|
||||||
}
|
}
|
||||||
writer.outdent().append('}');
|
writer.outdent().append('}');
|
||||||
}
|
}
|
||||||
writer.outdent().append("}").softNewLine();
|
writer.outdent().append("};").softNewLine();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void generateReadCountriesFromCLDR(SourceWriter writer) throws IOException {
|
private void generateReadCountriesFromCLDR(SourceWriter writer) throws IOException {
|
||||||
|
@ -253,34 +285,49 @@ public class LocaleSettingsNativeGenerator implements Generator {
|
||||||
|
|
||||||
writer.outdent().append('}');
|
writer.outdent().append('}');
|
||||||
}
|
}
|
||||||
writer.outdent().append("}").softNewLine();
|
writer.outdent().append("};").softNewLine();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void generateReadWeeksFromCDLR(SourceWriter writer) throws IOException {
|
private void generateReadWeeksFromCDLR(SourceWriter writer) throws IOException {
|
||||||
generateDefender(writer, "minDays");
|
generateDefender(writer, "minDays");
|
||||||
writer.appendClass("java.util.Locale").append(".$CLDR.minDays = {").indent().softNewLine();
|
writer.appendClass("java.util.Locale").append(".$CLDR.minDays = {").indent().softNewLine();
|
||||||
boolean firstLocale = true;
|
boolean first = true;
|
||||||
for (Map.Entry<String, Integer> entry : minDaysMap.entrySet()) {
|
for (Map.Entry<String, Integer> entry : minDaysMap.entrySet()) {
|
||||||
if (!firstLocale) {
|
if (!first) {
|
||||||
writer.append(",").softNewLine();
|
writer.append(",").softNewLine();
|
||||||
}
|
}
|
||||||
firstLocale = false;
|
first = false;
|
||||||
writer.append('"').append(Renderer.escapeString(entry.getKey())).append('"').ws().append(':')
|
writer.append('"').append(Renderer.escapeString(entry.getKey())).append('"').ws().append(':')
|
||||||
.ws().append('"').append(entry.getValue()).append('"');
|
.ws().append(entry.getValue());
|
||||||
}
|
}
|
||||||
writer.outdent().append("}").softNewLine();
|
writer.outdent().append("};").softNewLine();
|
||||||
|
|
||||||
writer.appendClass("java.util.Locale").append(".$CLDR.firstDay = {").indent().softNewLine();
|
writer.appendClass("java.util.Locale").append(".$CLDR.firstDay = {").indent().softNewLine();
|
||||||
firstLocale = true;
|
first = true;
|
||||||
for (Map.Entry<String, Integer> entry : firstDayMap.entrySet()) {
|
for (Map.Entry<String, Integer> entry : firstDayMap.entrySet()) {
|
||||||
if (!firstLocale) {
|
if (!first) {
|
||||||
writer.append(",").softNewLine();
|
writer.append(",").softNewLine();
|
||||||
}
|
}
|
||||||
firstLocale = false;
|
first = false;
|
||||||
writer.append('"').append(Renderer.escapeString(entry.getKey())).append('"').ws().append(':')
|
writer.append('"').append(Renderer.escapeString(entry.getKey())).append('"').ws().append(':')
|
||||||
.ws().append('"').append(entry.getValue()).append('"');
|
.ws().append('"').append(entry.getValue()).append('"');
|
||||||
}
|
}
|
||||||
writer.outdent().append("}").softNewLine();
|
writer.outdent().append("};").softNewLine();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void generateReadLikelySubtagsFromCLDR(SourceWriter writer) throws IOException {
|
||||||
|
generateDefender(writer, "likelySubtags");
|
||||||
|
writer.append("java.util.Locale").append(".$CLDR.likelySubtags = {").indent().softNewLine();
|
||||||
|
boolean first = true;
|
||||||
|
for (Map.Entry<String, String> entry : likelySubtags.entrySet()) {
|
||||||
|
if (!first) {
|
||||||
|
writer.append(",").softNewLine();
|
||||||
|
}
|
||||||
|
first = false;
|
||||||
|
writer.append('"').append(Renderer.escapeString(entry.getKey())).append('"').ws().append(':')
|
||||||
|
.ws().append('"').append(Renderer.escapeString(entry.getValue())).append('"');
|
||||||
|
}
|
||||||
|
writer.outdent().append("};").softNewLine();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void generateGetDefaultLocale(SourceWriter writer) throws IOException {
|
private void generateGetDefaultLocale(SourceWriter writer) throws IOException {
|
||||||
|
|
|
@ -88,6 +88,9 @@ public final class TLocale implements TCloneable, TSerializable {
|
||||||
// Redefined by JCLPlugin
|
// Redefined by JCLPlugin
|
||||||
private static native void readLanguagesFromCLDR();
|
private static native void readLanguagesFromCLDR();
|
||||||
|
|
||||||
|
// Redefined by JCLPlugin
|
||||||
|
private static native void readAvailableLocales();
|
||||||
|
|
||||||
public TLocale(String language) {
|
public TLocale(String language) {
|
||||||
this(language, "", "");
|
this(language, "", "");
|
||||||
}
|
}
|
||||||
|
@ -134,6 +137,7 @@ public final class TLocale implements TCloneable, TSerializable {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static TLocale[] getAvailableLocales() {
|
public static TLocale[] getAvailableLocales() {
|
||||||
|
readAvailableLocales();
|
||||||
if (availableLocales == null) {
|
if (availableLocales == null) {
|
||||||
String[] strings = getAvailableLocaleStrings();
|
String[] strings = getAvailableLocaleStrings();
|
||||||
availableLocales = new TLocale[strings.length];
|
availableLocales = new TLocale[strings.length];
|
||||||
|
@ -142,7 +146,7 @@ public final class TLocale implements TCloneable, TSerializable {
|
||||||
int countryIndex = string.indexOf('-');
|
int countryIndex = string.indexOf('-');
|
||||||
if (countryIndex > 0) {
|
if (countryIndex > 0) {
|
||||||
availableLocales[i] = new TLocale(string.substring(0, countryIndex),
|
availableLocales[i] = new TLocale(string.substring(0, countryIndex),
|
||||||
string.substring(countryIndex));
|
string.substring(countryIndex + 1));
|
||||||
} else {
|
} else {
|
||||||
availableLocales[i] = new TLocale(string);
|
availableLocales[i] = new TLocale(string);
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,7 +24,11 @@ import org.teavm.jso.JSObject;
|
||||||
public interface EventTarget extends JSObject {
|
public interface EventTarget extends JSObject {
|
||||||
void addEventListener(String type, EventListener listener, boolean useCapture);
|
void addEventListener(String type, EventListener listener, boolean useCapture);
|
||||||
|
|
||||||
|
void addEventListener(String type, EventListener listener);
|
||||||
|
|
||||||
void removeEventListener(String type, EventListener listener, boolean useCapture);
|
void removeEventListener(String type, EventListener listener, boolean useCapture);
|
||||||
|
|
||||||
|
void removeEventListener(String type, EventListener listener);
|
||||||
|
|
||||||
boolean dispatchEvent(Event evt);
|
boolean dispatchEvent(Event evt);
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,29 @@
|
||||||
|
/*
|
||||||
|
* 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.dom.core.Element;
|
||||||
|
import org.teavm.jso.JSArrayReader;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Alexey Andreev <konsoletyper@gmail.com>
|
||||||
|
*/
|
||||||
|
public interface HTMLCollection extends JSArrayReader<Element> {
|
||||||
|
Element item(int index);
|
||||||
|
|
||||||
|
Element namedItem(String name);
|
||||||
|
}
|
|
@ -0,0 +1,72 @@
|
||||||
|
/*
|
||||||
|
* 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 Alexey Andreev <konsoletyper@gmail.com>
|
||||||
|
*/
|
||||||
|
public interface HTMLInputElement extends HTMLElement {
|
||||||
|
@JSProperty
|
||||||
|
boolean isChecked();
|
||||||
|
|
||||||
|
@JSProperty
|
||||||
|
void setChecked(boolean checked);
|
||||||
|
|
||||||
|
@JSProperty
|
||||||
|
boolean isDisabled();
|
||||||
|
|
||||||
|
@JSProperty
|
||||||
|
void setDisabled(boolean disabled);
|
||||||
|
|
||||||
|
@JSProperty
|
||||||
|
int getMaxLength();
|
||||||
|
|
||||||
|
@JSProperty
|
||||||
|
void setMaxLength(int maxLength);
|
||||||
|
|
||||||
|
@JSProperty
|
||||||
|
String getName();
|
||||||
|
|
||||||
|
@JSProperty
|
||||||
|
void setName(String name);
|
||||||
|
|
||||||
|
@JSProperty
|
||||||
|
boolean isReadOnly();
|
||||||
|
|
||||||
|
@JSProperty
|
||||||
|
void setReadOnly(boolean readOnly);
|
||||||
|
|
||||||
|
@JSProperty
|
||||||
|
int getSize();
|
||||||
|
|
||||||
|
@JSProperty
|
||||||
|
void setSize(int size);
|
||||||
|
|
||||||
|
@JSProperty
|
||||||
|
String getType();
|
||||||
|
|
||||||
|
@JSProperty
|
||||||
|
void setType(String type);
|
||||||
|
|
||||||
|
@JSProperty
|
||||||
|
String getValue();
|
||||||
|
|
||||||
|
@JSProperty
|
||||||
|
void setValue(String value);
|
||||||
|
}
|
|
@ -0,0 +1,63 @@
|
||||||
|
/*
|
||||||
|
* 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 Alexey Andreev <konsoletyper@gmail.com>
|
||||||
|
*/
|
||||||
|
public interface HTMLOptionElement extends HTMLElement {
|
||||||
|
@JSProperty
|
||||||
|
boolean isDisabled();
|
||||||
|
|
||||||
|
@JSProperty
|
||||||
|
void setDisabled(boolean disabled);
|
||||||
|
|
||||||
|
@JSProperty
|
||||||
|
String getLabel();
|
||||||
|
|
||||||
|
@JSProperty
|
||||||
|
void setLabel(String label);
|
||||||
|
|
||||||
|
@JSProperty
|
||||||
|
boolean isDefaultSelected();
|
||||||
|
|
||||||
|
@JSProperty
|
||||||
|
void setDefaultSelected(boolean defaultSelected);
|
||||||
|
|
||||||
|
@JSProperty
|
||||||
|
boolean isSelected();
|
||||||
|
|
||||||
|
@JSProperty
|
||||||
|
void setSelected(boolean selected);
|
||||||
|
|
||||||
|
@JSProperty
|
||||||
|
String getValue();
|
||||||
|
|
||||||
|
@JSProperty
|
||||||
|
void setValue(String value);
|
||||||
|
|
||||||
|
@JSProperty
|
||||||
|
String getText();
|
||||||
|
|
||||||
|
@JSProperty
|
||||||
|
void setText(String text);
|
||||||
|
|
||||||
|
@JSProperty
|
||||||
|
int getIndex();
|
||||||
|
}
|
|
@ -0,0 +1,48 @@
|
||||||
|
/*
|
||||||
|
* 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.JSIndexer;
|
||||||
|
import org.teavm.jso.JSProperty;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Alexey Andreev <konsoletyper@gmail.com>
|
||||||
|
*/
|
||||||
|
public interface HTMLOptionsCollection extends HTMLCollection {
|
||||||
|
@Override
|
||||||
|
HTMLOptionElement item(int index);
|
||||||
|
|
||||||
|
@Override
|
||||||
|
HTMLOptionElement namedItem(String name);
|
||||||
|
|
||||||
|
@JSIndexer
|
||||||
|
void set(int index, HTMLOptionElement element);
|
||||||
|
|
||||||
|
void add(HTMLOptionElement element, HTMLElement before);
|
||||||
|
|
||||||
|
void add(HTMLOptionElement element, int before);
|
||||||
|
|
||||||
|
void add(HTMLOptionElement element);
|
||||||
|
|
||||||
|
void remove(int index);
|
||||||
|
|
||||||
|
@JSProperty
|
||||||
|
int getSelectedIndex();
|
||||||
|
|
||||||
|
@JSProperty
|
||||||
|
void setSelectedIndex(int selectedIndex);
|
||||||
|
}
|
|
@ -0,0 +1,63 @@
|
||||||
|
/*
|
||||||
|
* 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 Alexey Andreev <konsoletyper@gmail.com>
|
||||||
|
*/
|
||||||
|
public interface HTMLSelectElement extends HTMLElement {
|
||||||
|
@JSProperty
|
||||||
|
boolean isDisabled();
|
||||||
|
|
||||||
|
@JSProperty
|
||||||
|
void setDisabled(boolean disabled);
|
||||||
|
|
||||||
|
@JSProperty
|
||||||
|
boolean isMultiple();
|
||||||
|
|
||||||
|
@JSProperty
|
||||||
|
void setMultiple(boolean multiple);
|
||||||
|
|
||||||
|
@JSProperty
|
||||||
|
HTMLOptionsCollection getOptions();
|
||||||
|
|
||||||
|
@JSProperty
|
||||||
|
String getName();
|
||||||
|
|
||||||
|
@JSProperty
|
||||||
|
void setName(String name);
|
||||||
|
|
||||||
|
@JSProperty
|
||||||
|
int getSize();
|
||||||
|
|
||||||
|
@JSProperty
|
||||||
|
void setSize(int size);
|
||||||
|
|
||||||
|
@JSProperty
|
||||||
|
int getSelectedIndex();
|
||||||
|
|
||||||
|
@JSProperty
|
||||||
|
void setSelectedIndex(int selectedIndex);
|
||||||
|
|
||||||
|
@JSProperty
|
||||||
|
String getValue();
|
||||||
|
|
||||||
|
@JSProperty
|
||||||
|
void setValue(String value);
|
||||||
|
}
|
|
@ -76,6 +76,39 @@
|
||||||
<targetDirectory>${project.build.directory}/javascript/matrix</targetDirectory>
|
<targetDirectory>${project.build.directory}/javascript/matrix</targetDirectory>
|
||||||
</configuration>
|
</configuration>
|
||||||
</execution>
|
</execution>
|
||||||
|
<execution>
|
||||||
|
<id>generate-datetime</id>
|
||||||
|
<goals>
|
||||||
|
<goal>build-javascript</goal>
|
||||||
|
</goals>
|
||||||
|
<phase>process-classes</phase>
|
||||||
|
<configuration>
|
||||||
|
<minifying>false</minifying>
|
||||||
|
<mainClass>org.teavm.samples.DateTime</mainClass>
|
||||||
|
<targetDirectory>${project.build.directory}/javascript/datetime</targetDirectory>
|
||||||
|
<properties>
|
||||||
|
<java.util.Locale.available>en_US,en_GB,ru_RU,ru_UA,nl_NL,nl_BE</java.util.Locale.available>
|
||||||
|
</properties>
|
||||||
|
</configuration>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<artifactId>maven-assembly-plugin</artifactId>
|
||||||
|
<version>2.4</version>
|
||||||
|
<configuration>
|
||||||
|
<descriptors>
|
||||||
|
<descriptor>src/main/assembly/teavm-demos.xml</descriptor>
|
||||||
|
</descriptors>
|
||||||
|
</configuration>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<id>make-assembly</id>
|
||||||
|
<phase>package</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>single</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
</executions>
|
</executions>
|
||||||
</plugin>
|
</plugin>
|
||||||
</plugins>
|
</plugins>
|
||||||
|
|
24
teavm-samples/src/main/assembly/teavm-demos.xml
Normal file
24
teavm-samples/src/main/assembly/teavm-demos.xml
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2
|
||||||
|
http://maven.apache.org/xsd/assembly-1.1.2.xsd">
|
||||||
|
<id>teavm-demos</id>
|
||||||
|
<formats>
|
||||||
|
<format>zip</format>
|
||||||
|
</formats>
|
||||||
|
<files>
|
||||||
|
<file>
|
||||||
|
<source>src/main/resources/datetime.html</source>
|
||||||
|
<outputDirectory>/</outputDirectory>
|
||||||
|
</file>
|
||||||
|
<file>
|
||||||
|
<source>${project.build.directory}/javascript/datetime/classes.js</source>
|
||||||
|
<outputDirectory>/</outputDirectory>
|
||||||
|
<destName>datetime.js</destName>
|
||||||
|
</file>
|
||||||
|
<file>
|
||||||
|
<source>${project.build.directory}/javascript/datetime/runtime.js</source>
|
||||||
|
<outputDirectory>/</outputDirectory>
|
||||||
|
</file>
|
||||||
|
</files>
|
||||||
|
</assembly>
|
77
teavm-samples/src/main/java/org/teavm/samples/DateTime.java
Normal file
77
teavm-samples/src/main/java/org/teavm/samples/DateTime.java
Normal file
|
@ -0,0 +1,77 @@
|
||||||
|
/*
|
||||||
|
* 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;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.Locale;
|
||||||
|
import org.teavm.dom.browser.TimerHandler;
|
||||||
|
import org.teavm.dom.browser.Window;
|
||||||
|
import org.teavm.dom.events.Event;
|
||||||
|
import org.teavm.dom.events.EventListener;
|
||||||
|
import org.teavm.dom.html.HTMLDocument;
|
||||||
|
import org.teavm.dom.html.HTMLInputElement;
|
||||||
|
import org.teavm.dom.html.HTMLOptionElement;
|
||||||
|
import org.teavm.dom.html.HTMLSelectElement;
|
||||||
|
import org.teavm.jso.JS;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Alexey Andreev <konsoletyper@gmail.com>
|
||||||
|
*/
|
||||||
|
public class DateTime {
|
||||||
|
private static Window window = (Window)JS.getGlobal();
|
||||||
|
private static HTMLDocument document = window.getDocument();
|
||||||
|
private static Date currentDate;
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
fillLocales();
|
||||||
|
window.setInterval(new TimerHandler() {
|
||||||
|
@Override
|
||||||
|
public void onTimer() {
|
||||||
|
updateCurrentTime();
|
||||||
|
}
|
||||||
|
}, 250);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void fillLocales() {
|
||||||
|
final HTMLSelectElement localeElem = (HTMLSelectElement)document.getElementById("locale");
|
||||||
|
for (Locale locale : Locale.getAvailableLocales()) {
|
||||||
|
HTMLOptionElement option = (HTMLOptionElement)document.createElement("option");
|
||||||
|
option.setValue(locale.toString());
|
||||||
|
option.setLabel(locale.getDisplayName(Locale.getDefault()));
|
||||||
|
localeElem.getOptions().add(option);
|
||||||
|
}
|
||||||
|
localeElem.addEventListener("change", new EventListener() {
|
||||||
|
@Override public void handleEvent(Event evt) {
|
||||||
|
// Don't do anything
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void updateCurrentTime() {
|
||||||
|
setCurrentTime(new Date());
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void setCurrentTime(Date date) {
|
||||||
|
currentDate = date;
|
||||||
|
updateCurrentTimeText();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void updateCurrentTimeText() {
|
||||||
|
HTMLInputElement timeElem = (HTMLInputElement)document.getElementById("current-time");
|
||||||
|
timeElem.setValue(currentDate.toString());
|
||||||
|
}
|
||||||
|
}
|
42
teavm-samples/src/main/resources/datetime.html
Normal file
42
teavm-samples/src/main/resources/datetime.html
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Localized date & time demo application</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
|
||||||
|
<script src="runtime.js" type="text/javascript"></script>
|
||||||
|
<script src="datetime.js" type="text/javascript"></script>
|
||||||
|
</head>
|
||||||
|
<body onload="main()">
|
||||||
|
<div>
|
||||||
|
<label for="locale">Pick a locale:</label>
|
||||||
|
<select id="locale" size="1"></select>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<label for="current-time">Current time is:</label>
|
||||||
|
<input type="text" id="current-time" readonly>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<label for="field">Pick a field:</label>
|
||||||
|
<select id="field" size="1">
|
||||||
|
<option value="era">Era</option>
|
||||||
|
<option value="year">Year</option>
|
||||||
|
<option value="month">Month</option>
|
||||||
|
<option value="week-of-year">Week of year</option>
|
||||||
|
<option value="week-of-month">Week of month</option>
|
||||||
|
<option value="date">Date</option>
|
||||||
|
<option value="day-of-year">Day of year</option>
|
||||||
|
<option value="day-of-week">Day of week</option>
|
||||||
|
<option value="am-pm">AM/PM</option>
|
||||||
|
<option value="hour">Hour</option>
|
||||||
|
<option value="hour-of-day">Hour of day</option>
|
||||||
|
<option value="minute">Minute</option>
|
||||||
|
<option value="second">Second</option>
|
||||||
|
<option value="zone-offset">Zone offset</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<label for="field-value">Field value is:</label>
|
||||||
|
<input type="text" id="field-value" readonly>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
Loading…
Reference in New Issue
Block a user