Rename home to landing page
This commit is contained in:
14
app.py
14
app.py
@@ -115,21 +115,13 @@ def map_isolator_response_to_flask_response(response):
|
|||||||
|
|
||||||
|
|
||||||
@ app.route("/", methods=["GET"])
|
@ app.route("/", methods=["GET"])
|
||||||
def home():
|
def landing_page():
|
||||||
return render_template("home.html", name='Try me', script=DEFAULT_SCRIPT, environment_info=DEFAULT_ENVIRONMENT)
|
return render_template("landing_page.html", name='Try me', script=DEFAULT_SCRIPT, environment_info=DEFAULT_ENVIRONMENT)
|
||||||
|
|
||||||
@app.route("/documentation", methods=["GET"])
|
@app.route("/documentation", methods=["GET"])
|
||||||
def documentation():
|
def documentation():
|
||||||
return render_template("documentation.html")
|
return render_template("documentation.html")
|
||||||
|
|
||||||
@ app.route("/dashboard", methods=["GET"])
|
|
||||||
@login_required
|
|
||||||
def dashboard():
|
|
||||||
user_id = current_user.id
|
|
||||||
http_functions = db.get_http_functions_for_user(user_id)
|
|
||||||
http_functions = create_http_functions_view_model(http_functions)
|
|
||||||
return render_template("dashboard/http_functions/overview.html", http_functions=http_functions)
|
|
||||||
|
|
||||||
@app.route('/execute', methods=['POST'])
|
@app.route('/execute', methods=['POST'])
|
||||||
def execute_code():
|
def execute_code():
|
||||||
try:
|
try:
|
||||||
@@ -307,7 +299,7 @@ def signup():
|
|||||||
@login_required
|
@login_required
|
||||||
def logout():
|
def logout():
|
||||||
logout_user()
|
logout_user()
|
||||||
return redirect(url_for('home'))
|
return redirect(url_for('landing_page'))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,196 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
|
||||||
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
||||||
|
|
||||||
<title>Function</title>
|
|
||||||
<link rel="icon" type="image/svg+xml"
|
|
||||||
href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke-width='1.5' stroke='currentColor' class='w-6 h-6'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='m6.75 7.5 3 2.25-3 2.25m4.5 0h3m-9 8.25h13.5A2.25 2.25 0 0 0 21 18V6a2.25 2.25 0 0 0-2.25-2.25H5.25A2.25 2.25 0 0 0 3 6v12a2.25 2.25 0 0 0 2.25 2.25Z' /%3E%3C/svg%3E%0A" />
|
|
||||||
<link href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700,900&display=swap" rel="stylesheet" />
|
|
||||||
<script src="/static/js/tailwindcss@3.2.4.js"></script>
|
|
||||||
<script src="/static/js/htmx.min.js"></script>
|
|
||||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.32.1/ace.min.js"
|
|
||||||
integrity="sha512-7QPOFYWq4euLbAVbG/o5YVgkotUdMiwFuFrVQc6lbqZuAcWnLp0sQ6JX2AIWqbm3wWrPuEfu9FqckItCgQzBWw=="
|
|
||||||
crossorigin="anonymous" referrerpolicy="no-referrer"></script>
|
|
||||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.32.1/mode-javascript.min.js"
|
|
||||||
integrity="sha512-1OTGICMOnGWxRYfDZRUdv7qut0O8+9s7JPi6JNxlz1pdpHgDwPo1L0dzYKwftuIb0ossdBzWtkAlnyyYpIEp2A=="
|
|
||||||
crossorigin="anonymous" referrerpolicy="no-referrer"></script>
|
|
||||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.32.1/theme-monokai.min.js"
|
|
||||||
integrity="sha512-g9yptARGYXbHR9r3kTKIAzF+vvmgEieTxuuUUcHC5tKYFpLR3DR+lsisH2KZJG2Nwaou8jjYVRdbbbBQI3Bo5w=="
|
|
||||||
crossorigin="anonymous" referrerpolicy="no-referrer"></script>
|
|
||||||
|
|
||||||
<script src="https://unpkg.com/mithril/mithril.js"></script>
|
|
||||||
<script src="/static/js/mithril/editor.js"></script>
|
|
||||||
<script src="/static/js/mithril/responseView.js"></script>
|
|
||||||
<script src="/static/js/mithril/alert.js"></script>
|
|
||||||
<script src="https://unpkg.com/ace-diff@^2"></script>
|
|
||||||
<link href="https://unpkg.com/ace-diff@^2/dist/ace-diff.min.css" rel="stylesheet">
|
|
||||||
|
|
||||||
<style>
|
|
||||||
@import url("https://rsms.me/inter/inter.css");
|
|
||||||
|
|
||||||
html {
|
|
||||||
font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI",
|
|
||||||
Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif,
|
|
||||||
"Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol",
|
|
||||||
"Noto Color Emoji";
|
|
||||||
}
|
|
||||||
|
|
||||||
.gradient {
|
|
||||||
background-image: linear-gradient(-225deg, #cbbacc 0%, #2580b3 100%);
|
|
||||||
}
|
|
||||||
|
|
||||||
button,
|
|
||||||
.gradient2 {
|
|
||||||
background-color: #f39f86;
|
|
||||||
background-image: linear-gradient(315deg, #f39f86 0%, #f9d976 74%);
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body class="gradient leading-relaxed tracking-wide flex flex-col">
|
|
||||||
<div class="container mx-auto p-4 lg:p-1 min-h-screen h-full">
|
|
||||||
|
|
||||||
<nav id="header" class="w-full z-30 top-0 text-white py-1 lg:py-1">
|
|
||||||
<div class="w-full container mx-auto flex flex-wrap items-center justify-between mt-0 px-2 py-2 lg:py-6">
|
|
||||||
<div class="pl-4 flex items-center">
|
|
||||||
<a class="text-white no-underline hover:no-underline font-bold text-2xl lg:text-4xl" href="#">
|
|
||||||
<svg class="h-10 w-10 inline-block fill-current text-yellow-700"
|
|
||||||
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20">
|
|
||||||
<path d="M13 8V0L8.11 5.87 3 12h4v8L17 8h-4z"></path>
|
|
||||||
</svg></a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="block lg:hidden pr-4">
|
|
||||||
<button id="nav-toggle"
|
|
||||||
class="flex items-center px-3 py-2 border rounded text-gray-500 border-gray-600 hover:text-gray-800 hover:border-green-500 appearance-none focus:outline-none">
|
|
||||||
<svg class="fill-current h-3 w-3" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<title>Menu</title>
|
|
||||||
<path d="M0 3h20v2H0V3zm0 6h20v2H0V9zm0 6h20v2H0v-2z"></path>
|
|
||||||
</svg>
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="w-full flex-grow lg:flex lg:items-center lg:w-auto hidden lg:block mt-2 lg:mt-0 text-black p-4 lg:p-0 z-20"
|
|
||||||
id="nav-content">
|
|
||||||
<ul class="list-reset lg:flex justify-end flex-1 items-center">
|
|
||||||
<li class="mr-3">
|
|
||||||
<a class="inline-block py-2 px-4 text-black font-bold no-underline" href="#">Home</a>
|
|
||||||
</li>
|
|
||||||
<li class="mr-3">
|
|
||||||
<a class="inline-block text-black no-underline hover:text-gray-800 hover:text-underline py-2 px-4"
|
|
||||||
href="{{ url_for('documentation') }}">Documentation</a>
|
|
||||||
</li>
|
|
||||||
<li class="mr-3">
|
|
||||||
<a class="inline-block text-black no-underline hover:text-gray-800 hover:text-underline py-2 px-4"
|
|
||||||
href="#">About</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
<a href="{{ url_for('home.index') }}"
|
|
||||||
class="mx-auto lg:mx-0 hover:underline gradient2 text-gray-800 font-extrabold rounded my-6 py-4 px-8 shadow-lg cursor-pointer">Login</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
<div class="text-center px-3 lg:px-0">
|
|
||||||
<h1 class="my-4 text-2xl md:text-3xl lg:text-5xl font-black leading-tight">Build HTTP and Timer Functions
|
|
||||||
with Ease
|
|
||||||
|
|
||||||
</h1>
|
|
||||||
<p class="leading-normal text-gray-800 text-base md:text-xl lg:text-2xl">No DevOps, Git, or command-line -
|
|
||||||
just your
|
|
||||||
browser.
|
|
||||||
</p>
|
|
||||||
<p class="leading-normal text-gray-800 text-base md:text-xl lg:text-2xl mb-8">
|
|
||||||
Focus on coding; we handle the deployment seamlessly.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<a class="mx-auto lg:mx-0 hover:underline gradient2 text-gray-800 font-extrabold rounded my-6 py-4 px-8 shadow-lg cursor-pointer"
|
|
||||||
href="/signup">
|
|
||||||
Sign Up
|
|
||||||
</a>
|
|
||||||
<a href="{{ url_for('documentation') }}"
|
|
||||||
class="inline-block mx-auto lg:mx-0 hover:underline bg-transparent text-gray-600 font-extrabold my-2 md:my-6 py-2 lg:py-4 px-8">
|
|
||||||
View documentation</a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div id="app" class="p-1">
|
|
||||||
<!-- The Editor component will be mounted here -->
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
// Mount the component
|
|
||||||
m.mount(document.getElementById("app"), {
|
|
||||||
view: () => m(Editor, {
|
|
||||||
name: '{{ name }}',
|
|
||||||
jsValue: {{ script | tojson | safe }},
|
|
||||||
jsonValue: {{ environment_info | tojson | safe }},
|
|
||||||
isEdit: true,
|
|
||||||
showHeader: false,
|
|
||||||
showFunctionSettings: false,
|
|
||||||
executeUrl: "{{ url_for('execute_code', playground='true') }}",
|
|
||||||
generateUrl: "{{ url_for('llm.generate_script') }}"
|
|
||||||
})
|
|
||||||
})
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<section class="py-8">
|
|
||||||
<div class="container mx-auto flex flex-wrap pt-4 pb-12">
|
|
||||||
<h2 class="w-full my-2 text-5xl font-black leading-tight text-center text-gray-800">Features</h2>
|
|
||||||
<div class="w-full mb-4">
|
|
||||||
<div class="h-1 mx-auto gradient w-64 opacity-25 my-0 py-0 rounded-t"></div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="w-full md:w-1/3 p-6 flex flex-col flex-grow flex-shrink">
|
|
||||||
<div class="flex-1 bg-white rounded-t rounded-b-none overflow-hidden shadow">
|
|
||||||
<a href="#" class="flex flex-wrap no-underline hover:no-underline">
|
|
||||||
|
|
||||||
<div class="w-full font-bold text-xl text-gray-800 px-6 mt-6">HTTP Functions</div>
|
|
||||||
<p class="text-gray-600 text-base px-6 mb-5">Seamlessly create and deploy HTTP functions
|
|
||||||
that can
|
|
||||||
serve as robust API endpoints. Access request methods, headers, form data, and JSON,
|
|
||||||
while
|
|
||||||
easily returning responses in various formats
|
|
||||||
</p>
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="w-full md:w-1/3 p-6 flex flex-col flex-grow flex-shrink">
|
|
||||||
<div class="flex-1 bg-white rounded-t rounded-b-none overflow-hidden shadow">
|
|
||||||
<a href="#" class="flex flex-wrap no-underline hover:no-underline">
|
|
||||||
|
|
||||||
<div class="w-full font-bold text-xl text-gray-800 px-6 mt-6">Timer Functions</div>
|
|
||||||
<p class="text-gray-600 text-base px-6 mb-5">Automate tasks with precision using timer
|
|
||||||
functions.
|
|
||||||
Schedule recurring jobs or one-time events without the need for external cron services.
|
|
||||||
Manage
|
|
||||||
timing with ease, whether for regular data processing, periodic updates, or timed
|
|
||||||
notifications
|
|
||||||
</p>
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="w-full md:w-1/3 p-6 flex flex-col flex-grow flex-shrink">
|
|
||||||
<div class="flex-1 bg-white rounded-t rounded-b-none overflow-hidden shadow">
|
|
||||||
<a href="#" class="flex flex-wrap no-underline hover:no-underline">
|
|
||||||
|
|
||||||
<div class="w-full font-bold text-xl text-gray-800 px-6 mt-6">Persistent JSON Storage</div>
|
|
||||||
<p class=" text-gray-600 text-base px-6 mb-5">Leverage built-in mutable JSON storage,
|
|
||||||
ensuring your
|
|
||||||
data persists seamlessly within the environment. Store and modify your data in
|
|
||||||
real-time, with
|
|
||||||
the flexibility to access and update your stored information effortlessly</p>
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
@@ -3,9 +3,47 @@
|
|||||||
{% block content %}
|
{% block content %}
|
||||||
|
|
||||||
<div id="mithril-loader"></div>
|
<div id="mithril-loader"></div>
|
||||||
|
|
||||||
|
<script id="mithril-data" type="application/json">
|
||||||
|
{
|
||||||
|
"component": {{ component | tojson | safe }},
|
||||||
|
"props": {{ props | tojson | safe }},
|
||||||
|
"shared": {{ shared | tojson | safe }},
|
||||||
|
"errors": {{ errors | tojson | safe }},
|
||||||
|
"flash": {{ flash | tojson | safe }}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
m.mount(document.getElementById('mithril-loader'), {
|
const componentMap = {
|
||||||
view: () => m(DiffView, {{ props | tojson | safe }})
|
Alert,
|
||||||
});
|
DiffView,
|
||||||
|
Editor,
|
||||||
|
ResponseView
|
||||||
|
};
|
||||||
|
|
||||||
|
const dataElement = document.getElementById('mithril-data');
|
||||||
|
const data = JSON.parse(dataElement.textContent);
|
||||||
|
|
||||||
|
const componentName = data.component;
|
||||||
|
const props = data.props;
|
||||||
|
const shared = data.shared;
|
||||||
|
const errors = data.errors;
|
||||||
|
const flash = data.flash;
|
||||||
|
|
||||||
|
const component = componentMap[componentName];
|
||||||
|
|
||||||
|
if (component) {
|
||||||
|
m.mount(document.getElementById('mithril-loader'), {
|
||||||
|
view: () => m(component, { ...props, ...shared, errors, flash })
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
console.error(`Component "${componentName}" not found.`);
|
||||||
|
document.getElementById('mithril-loader').innerHTML = `
|
||||||
|
<div class="p-4 bg-red-100 text-red-800 rounded">
|
||||||
|
<strong>Error:</strong> Mithril component "<strong>${componentName}</strong>" not found.
|
||||||
|
</div>
|
||||||
|
`;
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
Reference in New Issue
Block a user