Commit 299431d2 authored by Jan Köster's avatar Jan Köster Committed by Jan Koester
Browse files

margin

parent 43fcc83d
Loading
Loading
Loading
Loading
+153 −0
Changes for editor/widgets/image/image.cpp: 153 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -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;
@@ -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");
@@ -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");
@@ -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));
@@ -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;
                }
@@ -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);
@@ -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);
@@ -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");
@@ -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());
@@ -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;";

+4 −0
Changes for editor/widgets/image/translations.h: 4 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -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"},