Loading editor/widgets/image/image.cpp +153 −0 Changes for editor/widgets/image/image.cpp: 153 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -53,10 +53,28 @@ extern "C" { int realWidth = 0; // actual pixel width for preview int realHeight = 0; // actual pixel height for preview // Spacing (innen/aussen) std::string paddingTop = ""; std::string paddingRight = ""; std::string paddingBottom = ""; std::string paddingLeft = ""; std::string marginTop = ""; std::string marginRight = ""; std::string marginBottom = ""; std::string marginLeft = ""; // Mobile overrides (empty = inherit desktop value) std::string m_width = ""; std::string m_height = ""; std::string m_borderStyle = ""; std::string m_paddingTop = ""; std::string m_paddingRight = ""; std::string m_paddingBottom = ""; std::string m_paddingLeft = ""; std::string m_marginTop = ""; std::string m_marginRight = ""; std::string m_marginBottom = ""; std::string m_marginLeft = ""; // Visibility bool hidden = false; Loading Loading @@ -265,9 +283,27 @@ extern "C" { element->SetAttribute("real_width", realWidth); element->SetAttribute("real_height", realHeight); // Spacing (innen/aussen) element->SetAttribute("padding_top", paddingTop.c_str()); element->SetAttribute("padding_right", paddingRight.c_str()); element->SetAttribute("padding_bottom", paddingBottom.c_str()); element->SetAttribute("padding_left", paddingLeft.c_str()); element->SetAttribute("margin_top", marginTop.c_str()); element->SetAttribute("margin_right", marginRight.c_str()); element->SetAttribute("margin_bottom", marginBottom.c_str()); element->SetAttribute("margin_left", marginLeft.c_str()); // Mobile overrides element->SetAttribute("m_width", m_width.c_str()); element->SetAttribute("m_height", m_height.c_str()); element->SetAttribute("m_padding_top", m_paddingTop.c_str()); element->SetAttribute("m_padding_right", m_paddingRight.c_str()); element->SetAttribute("m_padding_bottom", m_paddingBottom.c_str()); element->SetAttribute("m_padding_left", m_paddingLeft.c_str()); element->SetAttribute("m_margin_top", m_marginTop.c_str()); element->SetAttribute("m_margin_right", m_marginRight.c_str()); element->SetAttribute("m_margin_bottom", m_marginBottom.c_str()); element->SetAttribute("m_margin_left", m_marginLeft.c_str()); // Visibility element->SetAttribute("hidden", hidden ? "true" : "false"); Loading Loading @@ -300,10 +336,28 @@ extern "C" { xml_data->QueryIntAttribute("real_width", &realWidth); xml_data->QueryIntAttribute("real_height", &realHeight); // Spacing (innen/aussen) val = xml_data->Attribute("padding_top"); if (val) paddingTop = val; val = xml_data->Attribute("padding_right"); if (val) paddingRight = val; val = xml_data->Attribute("padding_bottom"); if (val) paddingBottom = val; val = xml_data->Attribute("padding_left"); if (val) paddingLeft = val; val = xml_data->Attribute("margin_top"); if (val) marginTop = val; val = xml_data->Attribute("margin_right"); if (val) marginRight = val; val = xml_data->Attribute("margin_bottom"); if (val) marginBottom = val; val = xml_data->Attribute("margin_left"); if (val) marginLeft = val; // Mobile overrides val = xml_data->Attribute("m_width"); if (val) m_width = val; val = xml_data->Attribute("m_height"); if (val) m_height = val; val = xml_data->Attribute("m_border_style"); if (val) m_borderStyle = val; val = xml_data->Attribute("m_padding_top"); if (val) m_paddingTop = val; val = xml_data->Attribute("m_padding_right"); if (val) m_paddingRight = val; val = xml_data->Attribute("m_padding_bottom"); if (val) m_paddingBottom = val; val = xml_data->Attribute("m_padding_left"); if (val) m_paddingLeft = val; val = xml_data->Attribute("m_margin_top"); if (val) m_marginTop = val; val = xml_data->Attribute("m_margin_right"); if (val) m_marginRight = val; val = xml_data->Attribute("m_margin_bottom"); if (val) m_marginBottom = val; val = xml_data->Attribute("m_margin_left"); if (val) m_marginLeft = val; // Visibility val = xml_data->Attribute("hidden"); Loading Loading @@ -337,9 +391,25 @@ extern "C" { json_object_object_add(obj, "media_ext", json_object_new_string(mediaExt.c_str())); json_object_object_add(obj, "real_width", json_object_new_int(realWidth)); json_object_object_add(obj, "real_height", json_object_new_int(realHeight)); json_object_object_add(obj, "padding_top", json_object_new_string(paddingTop.c_str())); json_object_object_add(obj, "padding_right", json_object_new_string(paddingRight.c_str())); json_object_object_add(obj, "padding_bottom", json_object_new_string(paddingBottom.c_str())); json_object_object_add(obj, "padding_left", json_object_new_string(paddingLeft.c_str())); json_object_object_add(obj, "margin_top", json_object_new_string(marginTop.c_str())); json_object_object_add(obj, "margin_right", json_object_new_string(marginRight.c_str())); json_object_object_add(obj, "margin_bottom", json_object_new_string(marginBottom.c_str())); json_object_object_add(obj, "margin_left", json_object_new_string(marginLeft.c_str())); json_object_object_add(obj, "m_width", json_object_new_string(m_width.c_str())); json_object_object_add(obj, "m_height", json_object_new_string(m_height.c_str())); json_object_object_add(obj, "m_border_style", json_object_new_string(m_borderStyle.c_str())); json_object_object_add(obj, "m_padding_top", json_object_new_string(m_paddingTop.c_str())); json_object_object_add(obj, "m_padding_right", json_object_new_string(m_paddingRight.c_str())); json_object_object_add(obj, "m_padding_bottom", json_object_new_string(m_paddingBottom.c_str())); json_object_object_add(obj, "m_padding_left", json_object_new_string(m_paddingLeft.c_str())); json_object_object_add(obj, "m_margin_top", json_object_new_string(m_marginTop.c_str())); json_object_object_add(obj, "m_margin_right", json_object_new_string(m_marginRight.c_str())); json_object_object_add(obj, "m_margin_bottom", json_object_new_string(m_marginBottom.c_str())); json_object_object_add(obj, "m_margin_left", json_object_new_string(m_marginLeft.c_str())); json_object_object_add(obj, "hidden", json_object_new_boolean(hidden)); json_object_object_add(obj, "m_hidden", json_object_new_boolean(m_hidden)); json_object_object_add(obj, "fullscreen", json_object_new_boolean(fullscreen)); Loading Loading @@ -392,6 +462,30 @@ extern "C" { if (json_object_object_get_ex(obj, "real_height", &val_obj)) { realHeight = json_object_get_int(val_obj); } if (json_object_object_get_ex(obj, "padding_top", &val_obj)) { val = json_object_get_string(val_obj); if (val) paddingTop = val; } if (json_object_object_get_ex(obj, "padding_right", &val_obj)) { val = json_object_get_string(val_obj); if (val) paddingRight = val; } if (json_object_object_get_ex(obj, "padding_bottom", &val_obj)) { val = json_object_get_string(val_obj); if (val) paddingBottom = val; } if (json_object_object_get_ex(obj, "padding_left", &val_obj)) { val = json_object_get_string(val_obj); if (val) paddingLeft = val; } if (json_object_object_get_ex(obj, "margin_top", &val_obj)) { val = json_object_get_string(val_obj); if (val) marginTop = val; } if (json_object_object_get_ex(obj, "margin_right", &val_obj)) { val = json_object_get_string(val_obj); if (val) marginRight = val; } if (json_object_object_get_ex(obj, "margin_bottom", &val_obj)) { val = json_object_get_string(val_obj); if (val) marginBottom = val; } if (json_object_object_get_ex(obj, "margin_left", &val_obj)) { val = json_object_get_string(val_obj); if (val) marginLeft = val; } if (json_object_object_get_ex(obj, "m_width", &val_obj)) { val = json_object_get_string(val_obj); if (val) m_width = val; } Loading @@ -401,6 +495,30 @@ extern "C" { if (json_object_object_get_ex(obj, "m_border_style", &val_obj)) { val = json_object_get_string(val_obj); if (val) m_borderStyle = val; } if (json_object_object_get_ex(obj, "m_padding_top", &val_obj)) { val = json_object_get_string(val_obj); if (val) m_paddingTop = val; } if (json_object_object_get_ex(obj, "m_padding_right", &val_obj)) { val = json_object_get_string(val_obj); if (val) m_paddingRight = val; } if (json_object_object_get_ex(obj, "m_padding_bottom", &val_obj)) { val = json_object_get_string(val_obj); if (val) m_paddingBottom = val; } if (json_object_object_get_ex(obj, "m_padding_left", &val_obj)) { val = json_object_get_string(val_obj); if (val) m_paddingLeft = val; } if (json_object_object_get_ex(obj, "m_margin_top", &val_obj)) { val = json_object_get_string(val_obj); if (val) m_marginTop = val; } if (json_object_object_get_ex(obj, "m_margin_right", &val_obj)) { val = json_object_get_string(val_obj); if (val) m_marginRight = val; } if (json_object_object_get_ex(obj, "m_margin_bottom", &val_obj)) { val = json_object_get_string(val_obj); if (val) m_marginBottom = val; } if (json_object_object_get_ex(obj, "m_margin_left", &val_obj)) { val = json_object_get_string(val_obj); if (val) m_marginLeft = val; } if (json_object_object_get_ex(obj, "hidden", &val_obj)) { if (json_object_is_type(val_obj, json_type_string)) { const char *s = json_object_get_string(val_obj); Loading Loading @@ -462,6 +580,25 @@ extern "C" { for (auto v : vals) json_object_array_add(a, json_object_new_string(v)); return a; }; // Renders as four linked top/right/bottom/left inputs with a lock // toggle in the properties panel (see properties.js _renderSpacingBox) // instead of a single raw CSS shorthand string. auto addSpacingBox = [&](const char *key, const char *label, const char *target, const char *level = "expert") { json_object *f = json_object_new_object(); json_object_object_add(f, "key", json_object_new_string(key)); json_object_object_add(f, "label", json_object_new_string(label)); json_object_object_add(f, "type", json_object_new_string("spacing_box")); json_object_object_add(f, "placeholder", json_object_new_string("e.g. 10px")); json_object_object_add(f, "target", json_object_new_string(target)); json_object_object_add(f, "level", json_object_new_string(level)); json_object *keys = json_object_new_object(); json_object_object_add(keys, "top", json_object_new_string((std::string(key) + "_top").c_str())); json_object_object_add(keys, "right", json_object_new_string((std::string(key) + "_right").c_str())); json_object_object_add(keys, "bottom", json_object_new_string((std::string(key) + "_bottom").c_str())); json_object_object_add(keys, "left", json_object_new_string((std::string(key) + "_left").c_str())); json_object_object_add(f, "keys", keys); json_object_array_add(arr, f); }; addField("media_id", "Media (from MediaDB)", "media_browse", nullptr, "all", nullptr, -1, nullptr, "simple"); addField("media_ext", "Format", "select", nullptr, "all", mkOpts({"webp","png","jpg","jpeg","gif","avif","svg"})); addField("real_width", "Preview Width (px)", "number", nullptr, "all", nullptr, 0); Loading @@ -474,6 +611,10 @@ extern "C" { addField("border_radius", "Border Radius", "text", "0"); addField("border_style", "Border", "text", "e.g. 1px solid #ccc", "desktop"); addField("m_border_style", "Border (Mobile)", "text", "e.g. 1px solid #ccc", "mobile"); addSpacingBox("padding", "Padding", "desktop"); addSpacingBox("margin", "Margin", "desktop"); addSpacingBox("m_padding", "Mobile Padding", "mobile"); addSpacingBox("m_margin", "Mobile Margin", "mobile"); addField("link_url", "Link URL", "text", "/page or https://...", "all", nullptr, -1, nullptr, "simple"); addField("fullscreen", "Show in Fullscreen", "checkbox", nullptr, "all", nullptr, -1, nullptr, "simple"); addField("hidden", "Hidden", "checkbox", nullptr, "desktop", nullptr, -1, nullptr, "simple"); Loading Loading @@ -604,6 +745,10 @@ extern "C" { if (!borderStyle.empty()) { style += " border: " + borderStyle + ";"; } std::string paddingShorthand = joinSpacingShorthand(paddingTop, paddingRight, paddingBottom, paddingLeft); if (!paddingShorthand.empty()) style += " padding: " + paddingShorthand + ";"; std::string marginShorthand = joinSpacingShorthand(marginTop, marginRight, marginBottom, marginLeft); if (!marginShorthand.empty()) style += " margin: " + marginShorthand + ";"; style += " display: block;"; if (hidden) style += " display: none;"; img.setAttribute("style", style.c_str()); Loading @@ -613,6 +758,14 @@ extern "C" { if (!m_width.empty()) mobileCSS += " width: " + m_width + " !important;"; if (!m_height.empty()) mobileCSS += " height: " + m_height + " !important;"; if (!m_borderStyle.empty()) mobileCSS += " border: " + m_borderStyle + " !important;"; std::string m_paddingShorthand = joinSpacingShorthandOverride( m_paddingTop, m_paddingRight, m_paddingBottom, m_paddingLeft, paddingTop, paddingRight, paddingBottom, paddingLeft); if (!m_paddingShorthand.empty()) mobileCSS += " padding: " + m_paddingShorthand + " !important;"; std::string m_marginShorthand = joinSpacingShorthandOverride( m_marginTop, m_marginRight, m_marginBottom, m_marginLeft, marginTop, marginRight, marginBottom, marginLeft); if (!m_marginShorthand.empty()) mobileCSS += " margin: " + m_marginShorthand + " !important;"; if (m_hidden) mobileCSS += " display: none !important;"; else if (hidden) mobileCSS += " display: block !important;"; Loading editor/widgets/image/translations.h +4 −0 Changes for editor/widgets/image/translations.h: 4 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -47,8 +47,12 @@ namespace blogi { namespace webedit { namespace image_i18n { {"Hidden (Mobile)", "Ausgeblendet (Mobil)"}, {"Image Path (manual)", "Bildpfad (manuell)"}, {"Link URL", "Link-URL"}, {"Margin", "Außenabstand"}, {"Media (from MediaDB)", "Medium (aus MediaDB)"}, {"Mobile Margin", "Außenabstand (Mobil)"}, {"Mobile Padding", "Innenabstand (Mobil)"}, {"Object Fit", "Bildanpassung"}, {"Padding", "Innenabstand"}, {"Preview Height (px)", "Vorschauhöhe (px)"}, {"Preview Width (px)", "Vorschaubreite (px)"}, {"Show in Fullscreen", "Im Vollbild anzeigen"}, Loading Loading
editor/widgets/image/image.cpp +153 −0 Changes for editor/widgets/image/image.cpp: 153 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -53,10 +53,28 @@ extern "C" { int realWidth = 0; // actual pixel width for preview int realHeight = 0; // actual pixel height for preview // Spacing (innen/aussen) std::string paddingTop = ""; std::string paddingRight = ""; std::string paddingBottom = ""; std::string paddingLeft = ""; std::string marginTop = ""; std::string marginRight = ""; std::string marginBottom = ""; std::string marginLeft = ""; // Mobile overrides (empty = inherit desktop value) std::string m_width = ""; std::string m_height = ""; std::string m_borderStyle = ""; std::string m_paddingTop = ""; std::string m_paddingRight = ""; std::string m_paddingBottom = ""; std::string m_paddingLeft = ""; std::string m_marginTop = ""; std::string m_marginRight = ""; std::string m_marginBottom = ""; std::string m_marginLeft = ""; // Visibility bool hidden = false; Loading Loading @@ -265,9 +283,27 @@ extern "C" { element->SetAttribute("real_width", realWidth); element->SetAttribute("real_height", realHeight); // Spacing (innen/aussen) element->SetAttribute("padding_top", paddingTop.c_str()); element->SetAttribute("padding_right", paddingRight.c_str()); element->SetAttribute("padding_bottom", paddingBottom.c_str()); element->SetAttribute("padding_left", paddingLeft.c_str()); element->SetAttribute("margin_top", marginTop.c_str()); element->SetAttribute("margin_right", marginRight.c_str()); element->SetAttribute("margin_bottom", marginBottom.c_str()); element->SetAttribute("margin_left", marginLeft.c_str()); // Mobile overrides element->SetAttribute("m_width", m_width.c_str()); element->SetAttribute("m_height", m_height.c_str()); element->SetAttribute("m_padding_top", m_paddingTop.c_str()); element->SetAttribute("m_padding_right", m_paddingRight.c_str()); element->SetAttribute("m_padding_bottom", m_paddingBottom.c_str()); element->SetAttribute("m_padding_left", m_paddingLeft.c_str()); element->SetAttribute("m_margin_top", m_marginTop.c_str()); element->SetAttribute("m_margin_right", m_marginRight.c_str()); element->SetAttribute("m_margin_bottom", m_marginBottom.c_str()); element->SetAttribute("m_margin_left", m_marginLeft.c_str()); // Visibility element->SetAttribute("hidden", hidden ? "true" : "false"); Loading Loading @@ -300,10 +336,28 @@ extern "C" { xml_data->QueryIntAttribute("real_width", &realWidth); xml_data->QueryIntAttribute("real_height", &realHeight); // Spacing (innen/aussen) val = xml_data->Attribute("padding_top"); if (val) paddingTop = val; val = xml_data->Attribute("padding_right"); if (val) paddingRight = val; val = xml_data->Attribute("padding_bottom"); if (val) paddingBottom = val; val = xml_data->Attribute("padding_left"); if (val) paddingLeft = val; val = xml_data->Attribute("margin_top"); if (val) marginTop = val; val = xml_data->Attribute("margin_right"); if (val) marginRight = val; val = xml_data->Attribute("margin_bottom"); if (val) marginBottom = val; val = xml_data->Attribute("margin_left"); if (val) marginLeft = val; // Mobile overrides val = xml_data->Attribute("m_width"); if (val) m_width = val; val = xml_data->Attribute("m_height"); if (val) m_height = val; val = xml_data->Attribute("m_border_style"); if (val) m_borderStyle = val; val = xml_data->Attribute("m_padding_top"); if (val) m_paddingTop = val; val = xml_data->Attribute("m_padding_right"); if (val) m_paddingRight = val; val = xml_data->Attribute("m_padding_bottom"); if (val) m_paddingBottom = val; val = xml_data->Attribute("m_padding_left"); if (val) m_paddingLeft = val; val = xml_data->Attribute("m_margin_top"); if (val) m_marginTop = val; val = xml_data->Attribute("m_margin_right"); if (val) m_marginRight = val; val = xml_data->Attribute("m_margin_bottom"); if (val) m_marginBottom = val; val = xml_data->Attribute("m_margin_left"); if (val) m_marginLeft = val; // Visibility val = xml_data->Attribute("hidden"); Loading Loading @@ -337,9 +391,25 @@ extern "C" { json_object_object_add(obj, "media_ext", json_object_new_string(mediaExt.c_str())); json_object_object_add(obj, "real_width", json_object_new_int(realWidth)); json_object_object_add(obj, "real_height", json_object_new_int(realHeight)); json_object_object_add(obj, "padding_top", json_object_new_string(paddingTop.c_str())); json_object_object_add(obj, "padding_right", json_object_new_string(paddingRight.c_str())); json_object_object_add(obj, "padding_bottom", json_object_new_string(paddingBottom.c_str())); json_object_object_add(obj, "padding_left", json_object_new_string(paddingLeft.c_str())); json_object_object_add(obj, "margin_top", json_object_new_string(marginTop.c_str())); json_object_object_add(obj, "margin_right", json_object_new_string(marginRight.c_str())); json_object_object_add(obj, "margin_bottom", json_object_new_string(marginBottom.c_str())); json_object_object_add(obj, "margin_left", json_object_new_string(marginLeft.c_str())); json_object_object_add(obj, "m_width", json_object_new_string(m_width.c_str())); json_object_object_add(obj, "m_height", json_object_new_string(m_height.c_str())); json_object_object_add(obj, "m_border_style", json_object_new_string(m_borderStyle.c_str())); json_object_object_add(obj, "m_padding_top", json_object_new_string(m_paddingTop.c_str())); json_object_object_add(obj, "m_padding_right", json_object_new_string(m_paddingRight.c_str())); json_object_object_add(obj, "m_padding_bottom", json_object_new_string(m_paddingBottom.c_str())); json_object_object_add(obj, "m_padding_left", json_object_new_string(m_paddingLeft.c_str())); json_object_object_add(obj, "m_margin_top", json_object_new_string(m_marginTop.c_str())); json_object_object_add(obj, "m_margin_right", json_object_new_string(m_marginRight.c_str())); json_object_object_add(obj, "m_margin_bottom", json_object_new_string(m_marginBottom.c_str())); json_object_object_add(obj, "m_margin_left", json_object_new_string(m_marginLeft.c_str())); json_object_object_add(obj, "hidden", json_object_new_boolean(hidden)); json_object_object_add(obj, "m_hidden", json_object_new_boolean(m_hidden)); json_object_object_add(obj, "fullscreen", json_object_new_boolean(fullscreen)); Loading Loading @@ -392,6 +462,30 @@ extern "C" { if (json_object_object_get_ex(obj, "real_height", &val_obj)) { realHeight = json_object_get_int(val_obj); } if (json_object_object_get_ex(obj, "padding_top", &val_obj)) { val = json_object_get_string(val_obj); if (val) paddingTop = val; } if (json_object_object_get_ex(obj, "padding_right", &val_obj)) { val = json_object_get_string(val_obj); if (val) paddingRight = val; } if (json_object_object_get_ex(obj, "padding_bottom", &val_obj)) { val = json_object_get_string(val_obj); if (val) paddingBottom = val; } if (json_object_object_get_ex(obj, "padding_left", &val_obj)) { val = json_object_get_string(val_obj); if (val) paddingLeft = val; } if (json_object_object_get_ex(obj, "margin_top", &val_obj)) { val = json_object_get_string(val_obj); if (val) marginTop = val; } if (json_object_object_get_ex(obj, "margin_right", &val_obj)) { val = json_object_get_string(val_obj); if (val) marginRight = val; } if (json_object_object_get_ex(obj, "margin_bottom", &val_obj)) { val = json_object_get_string(val_obj); if (val) marginBottom = val; } if (json_object_object_get_ex(obj, "margin_left", &val_obj)) { val = json_object_get_string(val_obj); if (val) marginLeft = val; } if (json_object_object_get_ex(obj, "m_width", &val_obj)) { val = json_object_get_string(val_obj); if (val) m_width = val; } Loading @@ -401,6 +495,30 @@ extern "C" { if (json_object_object_get_ex(obj, "m_border_style", &val_obj)) { val = json_object_get_string(val_obj); if (val) m_borderStyle = val; } if (json_object_object_get_ex(obj, "m_padding_top", &val_obj)) { val = json_object_get_string(val_obj); if (val) m_paddingTop = val; } if (json_object_object_get_ex(obj, "m_padding_right", &val_obj)) { val = json_object_get_string(val_obj); if (val) m_paddingRight = val; } if (json_object_object_get_ex(obj, "m_padding_bottom", &val_obj)) { val = json_object_get_string(val_obj); if (val) m_paddingBottom = val; } if (json_object_object_get_ex(obj, "m_padding_left", &val_obj)) { val = json_object_get_string(val_obj); if (val) m_paddingLeft = val; } if (json_object_object_get_ex(obj, "m_margin_top", &val_obj)) { val = json_object_get_string(val_obj); if (val) m_marginTop = val; } if (json_object_object_get_ex(obj, "m_margin_right", &val_obj)) { val = json_object_get_string(val_obj); if (val) m_marginRight = val; } if (json_object_object_get_ex(obj, "m_margin_bottom", &val_obj)) { val = json_object_get_string(val_obj); if (val) m_marginBottom = val; } if (json_object_object_get_ex(obj, "m_margin_left", &val_obj)) { val = json_object_get_string(val_obj); if (val) m_marginLeft = val; } if (json_object_object_get_ex(obj, "hidden", &val_obj)) { if (json_object_is_type(val_obj, json_type_string)) { const char *s = json_object_get_string(val_obj); Loading Loading @@ -462,6 +580,25 @@ extern "C" { for (auto v : vals) json_object_array_add(a, json_object_new_string(v)); return a; }; // Renders as four linked top/right/bottom/left inputs with a lock // toggle in the properties panel (see properties.js _renderSpacingBox) // instead of a single raw CSS shorthand string. auto addSpacingBox = [&](const char *key, const char *label, const char *target, const char *level = "expert") { json_object *f = json_object_new_object(); json_object_object_add(f, "key", json_object_new_string(key)); json_object_object_add(f, "label", json_object_new_string(label)); json_object_object_add(f, "type", json_object_new_string("spacing_box")); json_object_object_add(f, "placeholder", json_object_new_string("e.g. 10px")); json_object_object_add(f, "target", json_object_new_string(target)); json_object_object_add(f, "level", json_object_new_string(level)); json_object *keys = json_object_new_object(); json_object_object_add(keys, "top", json_object_new_string((std::string(key) + "_top").c_str())); json_object_object_add(keys, "right", json_object_new_string((std::string(key) + "_right").c_str())); json_object_object_add(keys, "bottom", json_object_new_string((std::string(key) + "_bottom").c_str())); json_object_object_add(keys, "left", json_object_new_string((std::string(key) + "_left").c_str())); json_object_object_add(f, "keys", keys); json_object_array_add(arr, f); }; addField("media_id", "Media (from MediaDB)", "media_browse", nullptr, "all", nullptr, -1, nullptr, "simple"); addField("media_ext", "Format", "select", nullptr, "all", mkOpts({"webp","png","jpg","jpeg","gif","avif","svg"})); addField("real_width", "Preview Width (px)", "number", nullptr, "all", nullptr, 0); Loading @@ -474,6 +611,10 @@ extern "C" { addField("border_radius", "Border Radius", "text", "0"); addField("border_style", "Border", "text", "e.g. 1px solid #ccc", "desktop"); addField("m_border_style", "Border (Mobile)", "text", "e.g. 1px solid #ccc", "mobile"); addSpacingBox("padding", "Padding", "desktop"); addSpacingBox("margin", "Margin", "desktop"); addSpacingBox("m_padding", "Mobile Padding", "mobile"); addSpacingBox("m_margin", "Mobile Margin", "mobile"); addField("link_url", "Link URL", "text", "/page or https://...", "all", nullptr, -1, nullptr, "simple"); addField("fullscreen", "Show in Fullscreen", "checkbox", nullptr, "all", nullptr, -1, nullptr, "simple"); addField("hidden", "Hidden", "checkbox", nullptr, "desktop", nullptr, -1, nullptr, "simple"); Loading Loading @@ -604,6 +745,10 @@ extern "C" { if (!borderStyle.empty()) { style += " border: " + borderStyle + ";"; } std::string paddingShorthand = joinSpacingShorthand(paddingTop, paddingRight, paddingBottom, paddingLeft); if (!paddingShorthand.empty()) style += " padding: " + paddingShorthand + ";"; std::string marginShorthand = joinSpacingShorthand(marginTop, marginRight, marginBottom, marginLeft); if (!marginShorthand.empty()) style += " margin: " + marginShorthand + ";"; style += " display: block;"; if (hidden) style += " display: none;"; img.setAttribute("style", style.c_str()); Loading @@ -613,6 +758,14 @@ extern "C" { if (!m_width.empty()) mobileCSS += " width: " + m_width + " !important;"; if (!m_height.empty()) mobileCSS += " height: " + m_height + " !important;"; if (!m_borderStyle.empty()) mobileCSS += " border: " + m_borderStyle + " !important;"; std::string m_paddingShorthand = joinSpacingShorthandOverride( m_paddingTop, m_paddingRight, m_paddingBottom, m_paddingLeft, paddingTop, paddingRight, paddingBottom, paddingLeft); if (!m_paddingShorthand.empty()) mobileCSS += " padding: " + m_paddingShorthand + " !important;"; std::string m_marginShorthand = joinSpacingShorthandOverride( m_marginTop, m_marginRight, m_marginBottom, m_marginLeft, marginTop, marginRight, marginBottom, marginLeft); if (!m_marginShorthand.empty()) mobileCSS += " margin: " + m_marginShorthand + " !important;"; if (m_hidden) mobileCSS += " display: none !important;"; else if (hidden) mobileCSS += " display: block !important;"; Loading
editor/widgets/image/translations.h +4 −0 Changes for editor/widgets/image/translations.h: 4 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -47,8 +47,12 @@ namespace blogi { namespace webedit { namespace image_i18n { {"Hidden (Mobile)", "Ausgeblendet (Mobil)"}, {"Image Path (manual)", "Bildpfad (manuell)"}, {"Link URL", "Link-URL"}, {"Margin", "Außenabstand"}, {"Media (from MediaDB)", "Medium (aus MediaDB)"}, {"Mobile Margin", "Außenabstand (Mobil)"}, {"Mobile Padding", "Innenabstand (Mobil)"}, {"Object Fit", "Bildanpassung"}, {"Padding", "Innenabstand"}, {"Preview Height (px)", "Vorschauhöhe (px)"}, {"Preview Width (px)", "Vorschaubreite (px)"}, {"Show in Fullscreen", "Im Vollbild anzeigen"}, Loading