Commit aab892fb authored by jan.koester's avatar jan.koester
Browse files

added icon support to editor

parent 3cf21bef
Loading
Loading
Loading
Loading
+1 −3
Original line number Diff line number Diff line
@@ -26,7 +26,6 @@
 *******************************************************************************/

#include <plugin.h>
#include <editor.h>

#include "icon.webp.h"

@@ -48,8 +47,7 @@ namespace blogi {
        }

        void initPlugin(){
            Editor editor;
            editor.addIcon(icondata,icondatalen,"webp","/editor/image","Insert Image from media albums");
            Args->edit->addIcon(icondata,icondatalen,"selimage","webp","Insert Image from media albums");
        }

        bool Controller(netplus::con *curcon,libhttppp::HttpRequest *req){
+2 −4
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@

#include "static.h"
#include "conf.h"
#include "editor.h"

blogi::StaticPage::StaticPage(){
}
@@ -160,10 +161,7 @@ void blogi::StaticPage::newPage(libhttppp::HttpRequest* req, libhtmlpp::HtmlStri
        setdiv << "<span>Meta:</span><br>"
        << "<textarea name=\"meta\" style=\"width:95%; height:200px;\"> Schlagwörter für Google </textarea><br>"
        << "<span>Content:</span><br>";
        if(text.empty())
            setdiv<< "<textarea name=\"text\" style=\"width:95%; min-height:800px; color:red;\"> <span>Mein HtmlText</span> </textarea><br>";
        else
            setdiv<< "<textarea name=\"text\" style=\"width:95%; min-height:800px;\">" << text <<"</textarea><br>";
        Args->edit->displayEditor("text",text.c_str(),setdiv);
        setdiv<< "<button type=\"submit\" formaction=\"" << Args->config->buildurl("settings/staticpage",url,512) << "\">Back</button>"
        << "<input type=\"submit\" value=\"Save\">"
        << "</form></div>";
+5 −1
Original line number Diff line number Diff line
@@ -61,7 +61,7 @@ blogi::Blogi::Blogi(netplus::socket *serversocket) : event(serversocket){
    PlgArgs->database= new Postgresql(PlgArgs->config->getdbopts());
    PlgArgs->session= new Session();
    PlgArgs->auth=new Auth(PlgArgs->database,PlgArgs->session);

    PlgArgs->edit=new Editor();

    TemplateConfig tplcfg;
    tplcfg.config=Config::getInstance();
@@ -78,6 +78,7 @@ blogi::Blogi::Blogi(netplus::socket *serversocket) : event(serversocket){
}

blogi::Blogi::~Blogi(){
    delete PlgArgs->edit;
    delete PlgArgs->auth;
    delete PlgArgs->session;
    delete PlgArgs->database;
@@ -263,6 +264,9 @@ void blogi::Blogi::RequestEvent(netplus::con *curcon){
        }else if(strncmp(req.getRequestURL(),PlgArgs->config->buildurl("settings",url,512),strlen(PlgArgs->config->buildurl("settings",url,512)))==0){
            settingsPage(curcon,&req);
            return;
        }else if(strncmp(req.getRequestURL(),PlgArgs->config->buildurl("editor",url,512),strlen(PlgArgs->config->buildurl("editor",url,512)))==0){
            PlgArgs->edit->Controller(curcon,&req);
            return;
        }

        libhtmlpp::HtmlElement index=Page;
+49 −51
Original line number Diff line number Diff line
@@ -28,35 +28,20 @@
#include <algorithm>

#include "editor.h"
#include "conf.h"

namespace blogi {
    class EditorIcons {
    public:
        EditorIcons(){

        };
        ~EditorIcons(){

        }
    private:
        class Icons {
            Icons(){
                _nextIcon=nullptr;
blogi::Editor::Editor()
{
    _firstIcon=nullptr;
    _lastIcon=nullptr;
}

            ~Icons(){
                delete _nextIcon;
blogi::Editor::~Editor(){
    delete _firstIcon;
    delete _lastIcon;
}

            std::string  _Icon;
            std::string  _Type;
            std::string  _Url;
            std::string  _Description;
            Icons       *_nextIcon;
            friend class EditorIcons;
        };

        void addIcon(const unsigned char* icon, size_t iconsize,const char *type,const char *url, const char* description){
void blogi::Editor::addIcon(const unsigned char* icon, size_t iconsize,const char *name,const char *type, const char* description){
    if(_firstIcon){
        _lastIcon->_nextIcon=new Icons;
        _lastIcon=_lastIcon->_nextIcon;
@@ -66,27 +51,40 @@ namespace blogi {
    }
    _lastIcon->_Icon.resize(iconsize);
    std::copy(icon,icon+iconsize,_lastIcon->_Icon.begin());
    _lastIcon->_Name=name;
    _lastIcon->_Type=type;
    _lastIcon->_Description=description;
}

        Icons *_firstIcon;
        Icons *_lastIcon;

        friend class Editor;
    } _EditorIcons;
};

blogi::Editor::Editor()
{
void blogi::Editor::displayEditor(const char* inputname,const char *value, libhtmlpp::HtmlString& target){
    char url[512];
    target << "<div id=\"editor\"><ul> ";
    for(Icons *curicon=_firstIcon; curicon; curicon=curicon->_nextIcon){
        target << "<li><img src=\"" << Config::getInstance()->buildurl("editor/icon/",url,512) << curicon->_Name
               << "." << curicon->_Type << "\" alt=\"" << curicon->_Description << "\" /></li>";
    }

blogi::Editor::~Editor(){
    target << "</ul><textarea name=\"" << inputname << "\">";
    if(value)
        target << value;
    target <<"</textarea></div>";
}

void blogi::Editor::addIcon(const unsigned char* icon, size_t iconsize,const char *type,const char *url, const char* description){
    _EditorIcons.addIcon(icon,iconsize,type,url,description);
void blogi::Editor::Controller(netplus::con* curcon, libhttppp::HttpRequest* req){
    char url[512];
    if(strncmp(req->getRequestURL(),Config::getInstance()->buildurl("editor/icon/",url,512),
       strlen(Config::getInstance()->buildurl("editor/icon/",url,512) ))==0){
        std::string reqfile;
        std::copy(req->getRequestURL()+strlen(Config::getInstance()->buildurl("editor/icon/",url,512)),
                  req->getRequestURL()+strlen(req->getRequestURL()),std::inserter<std::string>(reqfile,reqfile.begin()));
        for(Icons *curicon=_firstIcon; curicon; curicon=curicon->_nextIcon){
            if(reqfile.substr(0,reqfile.find("."))==curicon->_Name){
                libhttppp::HttpResponse resp;
                resp.setVersion(HTTPVERSION(1.1));
                resp.setState(HTTP200);
                resp.setContentType(std::string("image/").append(curicon->_Type).c_str());
                resp.send(curcon,curicon->_Icon.c_str(),curicon->_Icon.length());
                return;
            }
        }
    }

void blogi::Editor::displayEditor(const char* inputname, libhtmlpp::HtmlElement* target){
}
+24 −2
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *******************************************************************************/

#include <httppp/http.h>
#include <htmlpp/html.h>

#include <string>
@@ -37,11 +38,32 @@ namespace blogi {
        Editor();
        ~Editor();

        void addIcon(const unsigned char *icon,size_t iconsize,const char *type,const char *url,const char *description);
        void addIcon(const unsigned char *icon,size_t iconsize,const char *name,const char *type,const char *description);

        void displayEditor(const char *inputname,libhtmlpp::HtmlElement *target);
        void displayEditor(const char *inputname,const char *value,libhtmlpp::HtmlString &target);

        void Controller(netplus::con *curcon,libhttppp::HttpRequest *req);

    private:
        class Icons {
        public:
            Icons(){
                _nextIcon=nullptr;
            }

            ~Icons(){
                delete _nextIcon;
            }

            std::string  _Icon;
            std::string  _Name;
            std::string  _Type;
            std::string  _Description;
            Icons       *_nextIcon;
            friend class Editor;
        };

        Icons           *_firstIcon;
        Icons           *_lastIcon;
    };
};
Loading