summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Userland/Libraries/LibJS/Runtime/CommonPropertyNames.h13
-rw-r--r--Userland/Libraries/LibJS/Runtime/StringPrototype.cpp111
-rw-r--r--Userland/Libraries/LibJS/Runtime/StringPrototype.h13
3 files changed, 137 insertions, 0 deletions
diff --git a/Userland/Libraries/LibJS/Runtime/CommonPropertyNames.h b/Userland/Libraries/LibJS/Runtime/CommonPropertyNames.h
index 552695acf8..1cce212878 100644
--- a/Userland/Libraries/LibJS/Runtime/CommonPropertyNames.h
+++ b/Userland/Libraries/LibJS/Runtime/CommonPropertyNames.h
@@ -44,6 +44,7 @@ namespace JS {
P(acosh) \
P(all) \
P(allSettled) \
+ P(anchor) \
P(any) \
P(apply) \
P(arguments) \
@@ -56,7 +57,10 @@ namespace JS {
P(atan) \
P(atan2) \
P(atanh) \
+ P(big) \
P(bind) \
+ P(blink) \
+ P(bold) \
P(buffer) \
P(byteLength) \
P(byteOffset) \
@@ -103,9 +107,12 @@ namespace JS {
P(finally) \
P(find) \
P(findIndex) \
+ P(fixed) \
P(flags) \
P(flat) \
P(floor) \
+ P(fontcolor) \
+ P(fontsize) \
P(forEach) \
P(freeze) \
P(from) \
@@ -159,12 +166,14 @@ namespace JS {
P(isSafeInteger) \
P(isSealed) \
P(isView) \
+ P(italics) \
P(join) \
P(keyFor) \
P(keys) \
P(lastIndex) \
P(lastIndexOf) \
P(length) \
+ P(link) \
P(log) \
P(log1p) \
P(log2) \
@@ -214,6 +223,7 @@ namespace JS {
P(sin) \
P(sinh) \
P(slice) \
+ P(small) \
P(some) \
P(sort) \
P(source) \
@@ -221,9 +231,12 @@ namespace JS {
P(sqrt) \
P(startsWith) \
P(sticky) \
+ P(strike) \
P(stringify) \
+ P(sub) \
P(substr) \
P(substring) \
+ P(sup) \
P(tan) \
P(tanh) \
P(test) \
diff --git a/Userland/Libraries/LibJS/Runtime/StringPrototype.cpp b/Userland/Libraries/LibJS/Runtime/StringPrototype.cpp
index 826206d041..d30f4adba0 100644
--- a/Userland/Libraries/LibJS/Runtime/StringPrototype.cpp
+++ b/Userland/Libraries/LibJS/Runtime/StringPrototype.cpp
@@ -89,6 +89,19 @@ void StringPrototype::initialize(GlobalObject& global_object)
define_native_function(vm.names.at, at, 1, attr);
define_native_function(vm.names.match, match, 1, attr);
define_native_function(vm.names.replace, replace, 2, attr);
+ define_native_function(vm.names.anchor, anchor, 1, attr);
+ define_native_function(vm.names.big, big, 0, attr);
+ define_native_function(vm.names.blink, blink, 0, attr);
+ define_native_function(vm.names.bold, bold, 0, attr);
+ define_native_function(vm.names.fixed, fixed, 0, attr);
+ define_native_function(vm.names.fontcolor, fontcolor, 1, attr);
+ define_native_function(vm.names.fontsize, fontsize, 1, attr);
+ define_native_function(vm.names.italics, italics, 0, attr);
+ define_native_function(vm.names.link, link, 1, attr);
+ define_native_function(vm.names.small, small, 0, attr);
+ define_native_function(vm.names.strike, strike, 0, attr);
+ define_native_function(vm.names.sub, sub, 0, attr);
+ define_native_function(vm.names.sup, sup, 0, attr);
define_native_function(vm.well_known_symbol_iterator(), symbol_iterator, 0, attr);
}
@@ -722,4 +735,102 @@ JS_DEFINE_NATIVE_FUNCTION(StringPrototype::replace)
return js_string(vm, builder.build());
}
+// B.2.3.2.1
+static Value create_html(GlobalObject& global_object, Value string, const String& tag, const String& attribute, Value value)
+{
+ auto& vm = global_object.vm();
+ if (string.is_nullish()) {
+ vm.throw_exception<TypeError>(global_object, ErrorType::ToObjectNullOrUndefined);
+ return {};
+ }
+ auto str = string.to_string(global_object);
+ if (vm.exception())
+ return {};
+ StringBuilder builder;
+ builder.append('<');
+ builder.append(tag);
+ if (!attribute.is_empty()) {
+ auto value_string = value.to_string(global_object);
+ if (vm.exception())
+ return {};
+ value_string.replace("\"", "&quot;", true);
+ builder.append(' ');
+ builder.append(attribute);
+ builder.append("=\"");
+ builder.append(value_string);
+ builder.append('"');
+ }
+ builder.append('>');
+ builder.append(str);
+ builder.append("</");
+ builder.append(tag);
+ builder.append('>');
+ return js_string(vm, builder.build());
+}
+
+JS_DEFINE_NATIVE_FUNCTION(StringPrototype::anchor)
+{
+ return create_html(global_object, vm.this_value(global_object), "a", "name", vm.argument(0));
+}
+
+JS_DEFINE_NATIVE_FUNCTION(StringPrototype::big)
+{
+ return create_html(global_object, vm.this_value(global_object), "big", String::empty(), Value());
+}
+
+JS_DEFINE_NATIVE_FUNCTION(StringPrototype::blink)
+{
+ return create_html(global_object, vm.this_value(global_object), "blink", String::empty(), Value());
+}
+
+JS_DEFINE_NATIVE_FUNCTION(StringPrototype::bold)
+{
+ return create_html(global_object, vm.this_value(global_object), "b", String::empty(), Value());
+}
+
+JS_DEFINE_NATIVE_FUNCTION(StringPrototype::fixed)
+{
+ return create_html(global_object, vm.this_value(global_object), "tt", String::empty(), Value());
+}
+
+JS_DEFINE_NATIVE_FUNCTION(StringPrototype::fontcolor)
+{
+ return create_html(global_object, vm.this_value(global_object), "font", "color", vm.argument(0));
+}
+
+JS_DEFINE_NATIVE_FUNCTION(StringPrototype::fontsize)
+{
+ return create_html(global_object, vm.this_value(global_object), "font", "size", vm.argument(0));
+}
+
+JS_DEFINE_NATIVE_FUNCTION(StringPrototype::italics)
+{
+ return create_html(global_object, vm.this_value(global_object), "i", String::empty(), Value());
+}
+
+JS_DEFINE_NATIVE_FUNCTION(StringPrototype::link)
+{
+ return create_html(global_object, vm.this_value(global_object), "a", "href", vm.argument(0));
+}
+
+JS_DEFINE_NATIVE_FUNCTION(StringPrototype::small)
+{
+ return create_html(global_object, vm.this_value(global_object), "small", String::empty(), Value());
+}
+
+JS_DEFINE_NATIVE_FUNCTION(StringPrototype::strike)
+{
+ return create_html(global_object, vm.this_value(global_object), "strike", String::empty(), Value());
+}
+
+JS_DEFINE_NATIVE_FUNCTION(StringPrototype::sub)
+{
+ return create_html(global_object, vm.this_value(global_object), "sub", String::empty(), Value());
+}
+
+JS_DEFINE_NATIVE_FUNCTION(StringPrototype::sup)
+{
+ return create_html(global_object, vm.this_value(global_object), "sup", String::empty(), Value());
+}
+
}
diff --git a/Userland/Libraries/LibJS/Runtime/StringPrototype.h b/Userland/Libraries/LibJS/Runtime/StringPrototype.h
index 30c7b9d703..d9a051e4a3 100644
--- a/Userland/Libraries/LibJS/Runtime/StringPrototype.h
+++ b/Userland/Libraries/LibJS/Runtime/StringPrototype.h
@@ -45,6 +45,19 @@ private:
JS_DECLARE_NATIVE_FUNCTION(at);
JS_DECLARE_NATIVE_FUNCTION(match);
JS_DECLARE_NATIVE_FUNCTION(replace);
+ JS_DECLARE_NATIVE_FUNCTION(anchor);
+ JS_DECLARE_NATIVE_FUNCTION(big);
+ JS_DECLARE_NATIVE_FUNCTION(blink);
+ JS_DECLARE_NATIVE_FUNCTION(bold);
+ JS_DECLARE_NATIVE_FUNCTION(fixed);
+ JS_DECLARE_NATIVE_FUNCTION(fontcolor);
+ JS_DECLARE_NATIVE_FUNCTION(fontsize);
+ JS_DECLARE_NATIVE_FUNCTION(italics);
+ JS_DECLARE_NATIVE_FUNCTION(link);
+ JS_DECLARE_NATIVE_FUNCTION(small);
+ JS_DECLARE_NATIVE_FUNCTION(strike);
+ JS_DECLARE_NATIVE_FUNCTION(sub);
+ JS_DECLARE_NATIVE_FUNCTION(sup);
JS_DECLARE_NATIVE_FUNCTION(symbol_iterator);
};