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();
}
Beispiel #2
0
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 "";
}