Base creation page
This commit is contained in:
parent
1f4985c7dd
commit
23503dc439
@ -9,15 +9,17 @@ edition = "2018"
|
||||
[dependencies]
|
||||
actix-web = "2.0"
|
||||
actix-rt = "1.1.1"
|
||||
actix-files = "0.2.1"
|
||||
handlebars = { version = "3.0.0", features = ["dir_source"] }
|
||||
serde_json = "1.0"
|
||||
serde = {version="1.0", features=["derive"]}
|
||||
meilisearch-sdk = "0.1.3"
|
||||
actix-files = "0.2.1"
|
||||
human_format = "1.0.3"
|
||||
reqwest = "0.10.4"
|
||||
log = "0.4.8"
|
||||
env_logger = "0.7.1"
|
||||
mongodb = "1.0.0"
|
||||
bson = "1.0.0"
|
||||
futures = "0.3.5"
|
||||
futures = "0.3.5"
|
||||
dotenv = "0.15"
|
||||
pulldown-cmark = "0.7.1"
|
||||
@ -1,5 +1,8 @@
|
||||
mod contains;
|
||||
mod format_human;
|
||||
use handlebars::*;
|
||||
|
||||
pub use contains::ContainsHelper;
|
||||
pub use format_human::HumanFormatHelper;
|
||||
pub fn register_helpers(handlebars: &mut Handlebars) {
|
||||
handlebars.register_helper("contains", Box::new(contains::ContainsHelper));
|
||||
handlebars.register_helper("format", Box::new(format_human::HumanFormatHelper));
|
||||
}
|
||||
|
||||
@ -12,6 +12,7 @@ use actix_web::{web, App, HttpServer};
|
||||
use handlebars::*;
|
||||
use actix_web::middleware::Logger;
|
||||
use env_logger::Env;
|
||||
use std::env;
|
||||
|
||||
mod database;
|
||||
mod helpers;
|
||||
@ -20,12 +21,12 @@ mod routes;
|
||||
#[actix_rt::main]
|
||||
async fn main() -> std::io::Result<()> {
|
||||
env_logger::from_env(Env::default().default_filter_or("info")).init();
|
||||
dotenv::dotenv().ok();
|
||||
|
||||
//Handlebars
|
||||
let mut handlebars = Handlebars::new();
|
||||
|
||||
handlebars.register_helper("contains", Box::new(helpers::ContainsHelper));
|
||||
handlebars.register_helper("format", Box::new(helpers::HumanFormatHelper));
|
||||
helpers::register_helpers(&mut handlebars);
|
||||
handlebars
|
||||
.register_templates_directory(".hbs", "./templates")
|
||||
.unwrap();
|
||||
@ -36,6 +37,7 @@ async fn main() -> std::io::Result<()> {
|
||||
routes::index_mods(client).await.unwrap();
|
||||
|
||||
info!("Starting Actix HTTP server!");
|
||||
|
||||
//Init App
|
||||
HttpServer::new(move || {
|
||||
App::new()
|
||||
|
||||
@ -174,8 +174,8 @@ TODO This method needs a lot of refactoring. Here's a list of changes that need
|
||||
pub async fn index_mods(client: mongodb::Client) -> Result<(), Box<dyn Error>>{
|
||||
let mut docs_to_add: Vec<SearchMod> = vec![];
|
||||
|
||||
/*docs_to_add.append(&mut index_database(client).await?);
|
||||
docs_to_add.append(&mut index_curseforge().await?);*/
|
||||
docs_to_add.append(&mut index_database(client).await?);
|
||||
//docs_to_add.append(&mut index_curseforge(1, 400000).await?);
|
||||
|
||||
//Write Indexes
|
||||
//Relevance Index
|
||||
@ -266,20 +266,23 @@ async fn index_database(client: mongodb::Client) -> Result<Vec<SearchMod>, Box<
|
||||
Ok(docs_to_add)
|
||||
}
|
||||
|
||||
async fn index_curseforge() -> Result<Vec<SearchMod>, Box<dyn Error>>{
|
||||
async fn index_curseforge(start_index: i32, end_index: i32) -> Result<Vec<SearchMod>, Box<dyn Error>>{
|
||||
info!("Indexing curseforge mods!");
|
||||
|
||||
let mut docs_to_add: Vec<SearchMod> = vec![];
|
||||
|
||||
let res = reqwest::Client::new().post("https://addons-ecs.forgesvc.net/api/v2/addon")
|
||||
.header(reqwest::header::CONTENT_TYPE, "application/json")
|
||||
.body(format!("{:?}", (1..400000).collect::<Vec<_>>()))
|
||||
.body(format!("{:?}", (start_index..end_index).collect::<Vec<_>>()))
|
||||
.send().await?;
|
||||
|
||||
let text = &res.text().await?;
|
||||
let curseforge_mods : Vec<CurseForgeMod> = serde_json::from_str(text)?;
|
||||
|
||||
let mut max_index = 0;
|
||||
|
||||
for curseforge_mod in curseforge_mods {
|
||||
max_index = curseforge_mod.id;
|
||||
if curseforge_mod.game_slug != "minecraft" || !curseforge_mod.website_url.contains("/mc-mods/") { continue; }
|
||||
|
||||
let mut mod_game_versions = vec![];
|
||||
@ -397,6 +400,7 @@ async fn index_curseforge() -> Result<Vec<SearchMod>, Box<dyn Error>>{
|
||||
})
|
||||
}
|
||||
|
||||
//TODO Reindex every hour for new mods.
|
||||
Ok(docs_to_add)
|
||||
}
|
||||
|
||||
|
||||
@ -16,7 +16,7 @@ progress::-moz-progress-bar { background: #0b75d8; }
|
||||
border: none;
|
||||
|
||||
height: 20px;
|
||||
background: #999;
|
||||
background: white;
|
||||
color: #0b75d8;
|
||||
|
||||
margin: 10px 0 0 0;
|
||||
@ -40,9 +40,69 @@ progress::-moz-progress-bar { background: #0b75d8; }
|
||||
|
||||
.creation-parts {
|
||||
margin-top: 30px;
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
.creation-part {
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
.base-info label {
|
||||
margin-top: 10px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.info-display {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
}
|
||||
|
||||
.info-display-inputs {
|
||||
margin: 10px 20px;
|
||||
width: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.info-body {
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
.info-body textarea {
|
||||
width: 100%;
|
||||
height: 500px;
|
||||
resize: vertical;
|
||||
}
|
||||
|
||||
.button-container {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: flex-end;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.next-button {
|
||||
font-weight: bold;
|
||||
color: white;
|
||||
background-color: #69E781;
|
||||
border-radius: 5px;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.draft-button {
|
||||
margin-right: 10px;
|
||||
font-weight: bold;
|
||||
color: wheat;
|
||||
background-color: #e1a15a;
|
||||
border-radius: 5px;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.discard-button {
|
||||
margin-right: 10px;
|
||||
font-weight: bold;
|
||||
color: white;
|
||||
background-color: red;
|
||||
border-radius: 5px;
|
||||
padding: 10px;
|
||||
}
|
||||
@ -1,3 +1,5 @@
|
||||
if (localStorage.getItem("theme")) {
|
||||
document.documentElement.setAttribute("data-theme", localStorage.getItem("theme"));
|
||||
window.onload = function () {
|
||||
if (localStorage.getItem("theme")) {
|
||||
document.documentElement.setAttribute("theme", localStorage.getItem("theme"));
|
||||
}
|
||||
}
|
||||
@ -5,8 +5,6 @@
|
||||
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
|
||||
<script src="/static/js/main.js"></script>
|
||||
|
||||
<link href="/static/css/normalize.css" rel="stylesheet" type="text/css">
|
||||
<link href="/static/css/main.css" rel="stylesheet" type="text/css">
|
||||
<link href="/static/css/create-mod.css" rel="stylesheet" type="text/css">
|
||||
@ -17,7 +15,7 @@
|
||||
<body>
|
||||
<header class="site-header">
|
||||
<div class="temp-circle-logo"></div>
|
||||
<h2>Site Name</h2>
|
||||
<h2>Staging</h2>
|
||||
|
||||
<div class="links-container">
|
||||
<a href="home">home</a>
|
||||
@ -39,7 +37,36 @@
|
||||
</div>
|
||||
<div class="creation-parts">
|
||||
<div class="creation-part base-info" id="info">
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed dignissim, lorem eget maximus cursus, quam est pellentesque leo, quis vulputate ante tellus et lacus. Vestibulum hendrerit finibus gravida. Nulla vitae faucibus massa. Nunc posuere ornare urna ut ultricies. Morbi a velit vestibulum, pulvinar massa nec, rhoncus tellus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec eu ante augue. Morbi nunc libero, ultrices vitae est nec, elementum blandit mauris. Aliquam venenatis faucibus massa in lobortis. Nunc tincidunt lectus in ultrices ultricies. Ut consectetur orci at ligula fringilla dapibus. Praesent porta, neque ut bibendum luctus, diam nibh auctor diam, eu condimentum enim nisi id erat. Nullam fringilla aliquam nulla sed lobortis. Sed ex neque, ultricies nec suscipit nec, aliquet ac mi. Aenean ut ultrices augue. Mauris ut sapien non arcu congue dapibus. Ut ornare ante odio, a rhoncus enim dignissim in. Vestibulum aliquet maximus nisi. Etiam fermentum velit quam, vitae molestie leo consequat malesuada. Vivamus felis nulla, egestas vitae efficitur in, vehicula eu ante. Nunc semper eu nibh sit amet iaculis. Proin eu finibus sapien, a luctus ante. Ut in congue massa. Cras malesuada magna est, id fringilla arcu tempor et. Proin fringilla orci ut tincidunt dictum. Nunc sodales ac urna sit amet fringilla. Donec eget dictum neque. Maecenas maximus libero sem, et lobortis diam imperdiet a. In ultrices quis massa id rutrum. Proin sit amet ex quis diam dapibus interdum vel a turpis. Cras elit ligula, bibendum id lacus id, feugiat mattis arcu. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Cras elit libero, porttitor eu blandit quis, elementum eget massa. Duis ac quam in neque feugiat egestas. Quisque blandit libero nisl, non convallis neque vestibulum quis. Donec vitae malesuada erat, sed faucibus diam. Duis fringilla eros elit, a pulvinar lacus malesuada feugiat. Integer ac hendrerit arcu. Phasellus quis eros faucibus metus blandit volutpat. Curabitur auctor iaculis leo sit amet tincidunt. Nam odio urna, rutrum non sodales sit amet, euismod at justo. Quisque pharetra ipsum sed sollicitudin pulvinar. Aenean eget cursus tellus, et convallis nisi. Maecenas malesuada lobortis condimentum. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Nulla convallis orci magna, quis gravida purus aliquet sit amet. Pellentesque fringilla at nulla sit amet mollis. Cras euismod lorem non justo rhoncus, ut euismod urna egestas. Etiam luctus id lacus ut eleifend. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Cras eget lectus at lacus hendrerit gravida non vitae ipsum. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed finibus tincidunt porta. Phasellus fringilla pulvinar pharetra. Praesent tristique mauris metus, vitae pellentesque est vestibulum id. Phasellus vitae nisi in nibh vehicula varius id hendrerit erat. Mauris tempus lorem eu nulla viverra facilisis. Phasellus posuere dui nunc, sit amet consectetur lacus scelerisque maximus.
|
||||
<div class="info-display">
|
||||
<img src="..." class="mod-icon" width="250" height="250">
|
||||
<div class="info-display-inputs">
|
||||
<label>
|
||||
Name:
|
||||
<input type="text">
|
||||
</label>
|
||||
<label>
|
||||
Description:
|
||||
<input type="text">
|
||||
</label>
|
||||
<label>
|
||||
Icon:
|
||||
<input type="file">
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="info-body">
|
||||
<label>
|
||||
Body:
|
||||
<textarea></textarea>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div class="button-container">
|
||||
<a class="discard-button">Discard</a>
|
||||
<a class="draft-button">Save as Draft</a>
|
||||
<a class="next-button">Next</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="creation-part base-files" id="files">
|
||||
|
||||
|
||||
@ -5,8 +5,6 @@
|
||||
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
|
||||
<script src="/static/js/main.js"></script>
|
||||
|
||||
<link href="/static/css/normalize.css" rel="stylesheet" type="text/css">
|
||||
<link href="/static/css/main.css" rel="stylesheet" type="text/css">
|
||||
<link href="/static/css/mod.css" rel="stylesheet" type="text/css">
|
||||
@ -234,6 +232,8 @@ httpClient.request('http://api.sitename.com/mod/testmod');
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="/static/js/main.js"></script>
|
||||
<script src="/static/js/highlight.pack.js"></script>
|
||||
<script src="/static/js/mod.js"></script>
|
||||
</body>
|
||||
|
||||
@ -5,8 +5,6 @@
|
||||
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
|
||||
<script src="/static/js/main.js"></script>
|
||||
|
||||
<link href="/static/css/main.css" rel="stylesheet" type="text/css">
|
||||
<link href="/static/css/search.css" rel="stylesheet" type="text/css">
|
||||
<link href="/static/css/normalize.css" rel="stylesheet" type="text/css">
|
||||
@ -148,6 +146,7 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="/static/js/main.js"></script>
|
||||
<script src="/static/js/search.js"></script>
|
||||
|
||||
</body>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user