mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 12:37:44 +00:00
LibJS: Add String.prototype.anchor & friends
Adds an implementation of the following StringPrototype methods: anchor, big, blink, bold, fixed, fontcolor, fontsize, italics, link, small, strike, sub, sup.
This commit is contained in:
parent
460c0f9847
commit
6bfeb87572
3 changed files with 137 additions and 0 deletions
|
@ -44,6 +44,7 @@ namespace JS {
|
||||||
P(acosh) \
|
P(acosh) \
|
||||||
P(all) \
|
P(all) \
|
||||||
P(allSettled) \
|
P(allSettled) \
|
||||||
|
P(anchor) \
|
||||||
P(any) \
|
P(any) \
|
||||||
P(apply) \
|
P(apply) \
|
||||||
P(arguments) \
|
P(arguments) \
|
||||||
|
@ -56,7 +57,10 @@ namespace JS {
|
||||||
P(atan) \
|
P(atan) \
|
||||||
P(atan2) \
|
P(atan2) \
|
||||||
P(atanh) \
|
P(atanh) \
|
||||||
|
P(big) \
|
||||||
P(bind) \
|
P(bind) \
|
||||||
|
P(blink) \
|
||||||
|
P(bold) \
|
||||||
P(buffer) \
|
P(buffer) \
|
||||||
P(byteLength) \
|
P(byteLength) \
|
||||||
P(byteOffset) \
|
P(byteOffset) \
|
||||||
|
@ -103,9 +107,12 @@ namespace JS {
|
||||||
P(finally) \
|
P(finally) \
|
||||||
P(find) \
|
P(find) \
|
||||||
P(findIndex) \
|
P(findIndex) \
|
||||||
|
P(fixed) \
|
||||||
P(flags) \
|
P(flags) \
|
||||||
P(flat) \
|
P(flat) \
|
||||||
P(floor) \
|
P(floor) \
|
||||||
|
P(fontcolor) \
|
||||||
|
P(fontsize) \
|
||||||
P(forEach) \
|
P(forEach) \
|
||||||
P(freeze) \
|
P(freeze) \
|
||||||
P(from) \
|
P(from) \
|
||||||
|
@ -159,12 +166,14 @@ namespace JS {
|
||||||
P(isSafeInteger) \
|
P(isSafeInteger) \
|
||||||
P(isSealed) \
|
P(isSealed) \
|
||||||
P(isView) \
|
P(isView) \
|
||||||
|
P(italics) \
|
||||||
P(join) \
|
P(join) \
|
||||||
P(keyFor) \
|
P(keyFor) \
|
||||||
P(keys) \
|
P(keys) \
|
||||||
P(lastIndex) \
|
P(lastIndex) \
|
||||||
P(lastIndexOf) \
|
P(lastIndexOf) \
|
||||||
P(length) \
|
P(length) \
|
||||||
|
P(link) \
|
||||||
P(log) \
|
P(log) \
|
||||||
P(log1p) \
|
P(log1p) \
|
||||||
P(log2) \
|
P(log2) \
|
||||||
|
@ -214,6 +223,7 @@ namespace JS {
|
||||||
P(sin) \
|
P(sin) \
|
||||||
P(sinh) \
|
P(sinh) \
|
||||||
P(slice) \
|
P(slice) \
|
||||||
|
P(small) \
|
||||||
P(some) \
|
P(some) \
|
||||||
P(sort) \
|
P(sort) \
|
||||||
P(source) \
|
P(source) \
|
||||||
|
@ -221,9 +231,12 @@ namespace JS {
|
||||||
P(sqrt) \
|
P(sqrt) \
|
||||||
P(startsWith) \
|
P(startsWith) \
|
||||||
P(sticky) \
|
P(sticky) \
|
||||||
|
P(strike) \
|
||||||
P(stringify) \
|
P(stringify) \
|
||||||
|
P(sub) \
|
||||||
P(substr) \
|
P(substr) \
|
||||||
P(substring) \
|
P(substring) \
|
||||||
|
P(sup) \
|
||||||
P(tan) \
|
P(tan) \
|
||||||
P(tanh) \
|
P(tanh) \
|
||||||
P(test) \
|
P(test) \
|
||||||
|
|
|
@ -89,6 +89,19 @@ void StringPrototype::initialize(GlobalObject& global_object)
|
||||||
define_native_function(vm.names.at, at, 1, attr);
|
define_native_function(vm.names.at, at, 1, attr);
|
||||||
define_native_function(vm.names.match, match, 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.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);
|
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());
|
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("\"", """, 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());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,6 +45,19 @@ private:
|
||||||
JS_DECLARE_NATIVE_FUNCTION(at);
|
JS_DECLARE_NATIVE_FUNCTION(at);
|
||||||
JS_DECLARE_NATIVE_FUNCTION(match);
|
JS_DECLARE_NATIVE_FUNCTION(match);
|
||||||
JS_DECLARE_NATIVE_FUNCTION(replace);
|
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);
|
JS_DECLARE_NATIVE_FUNCTION(symbol_iterator);
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue