std::string Stencil::request(const std::string& verb,const std::string& method,const std::string& body){ Json::Document request; if(verb=="GET"){ // FIXME // Need to parse out request queries } else if(body.length()){ request.load(body); } Json::Document response = Json::Object(); std::string signature = verb + " " + method; // FIXME // This is currently a POST but should be changed to a GET // after fix above is done if(signature=="POST content"){ auto format = request["format"].as<std::string>(); auto pretty = request["pretty"].as<bool>(); std::string content; if(format=="html" or format=="") content = html(false,pretty); else if(format=="cila") content = cila(); else { response.append("error","format is not 'cila' or 'html'"); } response.append("format",format); response.append("content",content); } else if(signature=="PUT content"){ auto format = request["format"].as<std::string>(); auto content = request["content"].as<std::string>(); html(content).write(); } else if(signature=="PUT render"){ auto format = request["format"].as<std::string>(); auto content = request["content"].as<std::string>(); if(content.length()){ if(format=="html") html(content); else if(format=="cila") cila(content); else { response.append("error","format is not 'cila' or 'html'"); } } render(); response.append("format","html"); response.append("content",html(false,false)); } else { throw RequestInvalidException(); } return response.dump(); }
Json::Document Stencil::call(const std::string& name, const Json::Document& args) { // TODO Apply new API here #if 0 auto what = call.what(); // Getting content if(what=="html():string"){ return html(); } else if(what=="cila():string"){ return cila(); } // Setting content else if(what=="html(string)"){ std::string string = call.arg(0); html(string); } else if(what=="cila(string)"){ std::string string = call.arg(0); cila(string); } // Patching content else if(what=="patch(string)"){ std::string string = call.arg(0); patch(string); } // Saving else if(what=="html(string).write()"){ std::string string = call.arg(0); html(string).write(); } else if(what=="cila(string).write()"){ std::string string = call.arg(0); cila(string).write(); } // Conversion of content... // ... HTML to Cila else if(what=="html(string).cila():string"){ std::string string = call.arg(0); return html(string).cila(); } // ... Cila to HTML else if(what=="cila(string).html():string"){ std::string string = call.arg(0); return cila(string).html(); } // Rendering HTML else if(what=="html(string).render().html():string"){ std::string string = call.arg(0); return html(string).render().html(); } else if(what=="html(string).refresh().html():string"){ std::string string = call.arg(0); return html(string).refresh().html(); } // Rendering Cila else if(what=="cila(string).render().cila():string"){ std::string string = call.arg(0); return cila(string).render().cila(); } // Update <input>s else if(what=="inputs({string,string}).render().html():string"){ auto values = call.arg<std::map<std::string,std::string>>(0); return inputs( values ).render().html(); } // Restart else if(what=="restart().html():string"){ return restart().html(); } // Access to context else if(what=="interact(string):string"){ std::string string = call.arg(0); return interact(string); } else return Component::call(call); #endif return ""; }