Loading src/theme.cpp +21 −12 Changes for src/theme.cpp: 21 added lines, 12 removed lines. Original line number Diff line number Diff line Loading @@ -208,7 +208,13 @@ blogi::Theme::~Theme(){ } void blogi::Theme::registerCss(const std::string &publicPath, const std::string &variableName){ _pluginCssMap[publicPath] = variableName; for(const auto& file : _PublicFiles){ if(file.Path == publicPath){ _pluginCssMap[variableName] = file.Content; return; } } std::cerr << "[WARNING] theme::registerCss: '" << publicPath << "' not found in public files" << std::endl; } std::string blogi::Theme::getLogoUrl(const int tid) const { Loading Loading @@ -280,26 +286,29 @@ void blogi::Theme::renderPage(const int tid,const char *name,libhtmlpp::HtmlPage }; for(const auto& file : _PublicFiles){ std::string css_key; auto it = builtinCssMap.find(file.Path); if(it != builtinCssMap.end()) css_key = it->second; else { auto pit = _pluginCssMap.find(file.Path); if(pit != _pluginCssMap.end()) css_key = pit->second; } if(it == builtinCssMap.end()) continue; if(!css_key.empty()){ std::string css = file.Content; size_t p = 0; while((p = css.find(prefix_placeholder, p)) != std::string::npos){ css.replace(p, prefix_placeholder.size(), prefix_value); p += prefix_value.size(); } variable_map[css_key] = std::move(css); variable_map[it->second] = std::move(css); } // Plugin-registered CSS: content already resolved in registerCss() for(const auto& [varName, cssContent] : _pluginCssMap){ if(variable_map.count(varName)) continue; // builtin takes precedence std::string css = cssContent; size_t p = 0; while((p = css.find(prefix_placeholder, p)) != std::string::npos){ css.replace(p, prefix_placeholder.size(), prefix_value); p += prefix_value.size(); } variable_map[varName] = std::move(css); } // Template variable replacement loop (e.g., replacing ${VARIABLE} placeholders) Loading src/theme.h +1 −1 Changes for src/theme.h: 1 added line, 1 removed line. Original line number Diff line number Diff line Loading @@ -107,6 +107,6 @@ namespace blogi { std::unordered_map<std::string, size_t> _PublicFileIndex; // lowercase path -> index std::string _PrefixLower; // pre-computed lowercase prefix bool _Formated; std::map<std::string, std::string> _pluginCssMap; // publicPath -> variable name std::map<std::string, std::string> _pluginCssMap; // variableName -> css content (resolved at registerCss time) }; }; Loading
src/theme.cpp +21 −12 Changes for src/theme.cpp: 21 added lines, 12 removed lines. Original line number Diff line number Diff line Loading @@ -208,7 +208,13 @@ blogi::Theme::~Theme(){ } void blogi::Theme::registerCss(const std::string &publicPath, const std::string &variableName){ _pluginCssMap[publicPath] = variableName; for(const auto& file : _PublicFiles){ if(file.Path == publicPath){ _pluginCssMap[variableName] = file.Content; return; } } std::cerr << "[WARNING] theme::registerCss: '" << publicPath << "' not found in public files" << std::endl; } std::string blogi::Theme::getLogoUrl(const int tid) const { Loading Loading @@ -280,26 +286,29 @@ void blogi::Theme::renderPage(const int tid,const char *name,libhtmlpp::HtmlPage }; for(const auto& file : _PublicFiles){ std::string css_key; auto it = builtinCssMap.find(file.Path); if(it != builtinCssMap.end()) css_key = it->second; else { auto pit = _pluginCssMap.find(file.Path); if(pit != _pluginCssMap.end()) css_key = pit->second; } if(it == builtinCssMap.end()) continue; if(!css_key.empty()){ std::string css = file.Content; size_t p = 0; while((p = css.find(prefix_placeholder, p)) != std::string::npos){ css.replace(p, prefix_placeholder.size(), prefix_value); p += prefix_value.size(); } variable_map[css_key] = std::move(css); variable_map[it->second] = std::move(css); } // Plugin-registered CSS: content already resolved in registerCss() for(const auto& [varName, cssContent] : _pluginCssMap){ if(variable_map.count(varName)) continue; // builtin takes precedence std::string css = cssContent; size_t p = 0; while((p = css.find(prefix_placeholder, p)) != std::string::npos){ css.replace(p, prefix_placeholder.size(), prefix_value); p += prefix_value.size(); } variable_map[varName] = std::move(css); } // Template variable replacement loop (e.g., replacing ${VARIABLE} placeholders) Loading
src/theme.h +1 −1 Changes for src/theme.h: 1 added line, 1 removed line. Original line number Diff line number Diff line Loading @@ -107,6 +107,6 @@ namespace blogi { std::unordered_map<std::string, size_t> _PublicFileIndex; // lowercase path -> index std::string _PrefixLower; // pre-computed lowercase prefix bool _Formated; std::map<std::string, std::string> _pluginCssMap; // publicPath -> variable name std::map<std::string, std::string> _pluginCssMap; // variableName -> css content (resolved at registerCss time) }; };