Skip to content
Snippets Groups Projects
Commit 7bbabc00 authored by Wade Fagen-Ulmschneider (waf)'s avatar Wade Fagen-Ulmschneider (waf)
Browse files

Add "New Discovery" feature

parent dda20d3c
No related branches found
No related tags found
No related merge requests found
{% extends "static/templates/base.html" %}
{% block content %}
<script>
var updateNewProjectForm = function() {
// Read project name, return if empty
var projectName = $("#inputProjectName").val();
if (projectName == "") {
$("#dirName").html("&mdash;");
$("#hiddenDirName").val("");
return;
}
// Read project type, fix it for directory type
var projectType = $("#selectProjectType option:selected").val();
if (projectType == "Personal") { projectType = "per"; }
else if (projectType == "Demo") { projectType = "demo"; }
else if (projectType == "Experience") { projectType = "exp"; }
else if (projectType == "Project") { projectType = "proj"; }
// Create the directory name
var dirName = projectType + "_" + projectName;
// Remove spaces
dirName = dirName.replace(/\s+/g, '');
// Remove any non-words
dirName = dirName.replace(/[^\w]/gi, '')
// Update HTML
$("#dirName").html(dirName);
$("#hiddenDirName").val(dirName);
};
</script>
<div class="row">
<div class="col-sm-4">
<h3>Add New Project</h3>
<form class="form-horizontal">
<h3>Add New Discovery</h3>
<p>
<i>
This form simply populates a new directory with a base set of files for
a CS 205 &quot;Discovery&quot;. You can use it to quickly set up a
new directory for working on a new discovery.
</i>
</p>
<hr>
<form class="form-horizontal" action="/" method="post">
{% if error %}
<div class="alert alert-danger" role="alert">
{{error | safe}}
</div>
{% endif %}
{% if success %}
<div class="alert alert-success" role="alert">
{{success | safe}}
</div>
{% endif %}
<div class="form-group">
<label for="inputProjectName" class="col-sm-2 control-label">Name:</label>
<div class="col-sm-10">
<input type="text" class="form-control" id="inputProjectName" placeholder="Project Name">
<input oninput="updateNewProjectForm()" type="text" class="form-control" name="projectName" id="inputProjectName" placeholder="Project Name">
</div>
</div>
<div class="form-group">
<label for="inputProjectName" class="col-sm-2 control-label">Type:</label>
<label for="selectProjectType" class="col-sm-2 control-label">Type:</label>
<div class="col-sm-10">
<select class="form-control">
<option>Personal</option>
<option>Demo</option>
<option>Experience</option>
<option>Project</option>
<select class="form-control" id="selectProjectType" name="projectType" onchange="updateNewProjectForm()">
<option value="Personal">Personal</option>
<option value="Demo">Demo</option>
<option value="Experience">Experience</option>
<option value="Project">Project</option>
</select>
</div>
</div>
......@@ -27,24 +79,28 @@
<b>Dir.:</b>
</div>
<div class="col-sm-10">
<tt class="dirName">
#dirName
</tt>
<tt id="dirName">&mdash;</tt>
<input type="hidden" id="hiddenDirName" name="dirName" value="">
</div>
</div>
<div class="form-group">
<div class="col-sm-6 col-sm-push-6">
<button type="submit" class="btn btn-primary form-control">
<button type="submit" class="btn btn-primary form-control" id="buttonSubmit">
<span class="glyphicon glyphicon-plus-sign"></span>&nbsp;
Create Project
</button>
</div>
</div>
</form>
<hr />
This form does the same thing as creating a directory and creating <tt>project.json</tt>,
<tt>web</tt>, <tt>py</tt>, and <tt>res</tt> directories.
</div>
<div class="col-sm-4">
<h3>Personal</h3>
<ul>
{% for item in navigation.personal|sort(attribute="index") %}
<li><a href="/{{item.dir}}/">{{item.title}}</a></li>
{% endfor %}
</ul>
<hr>
<h3>Demos</h3>
<ul>
{% for item in navigation.demos|sort(attribute="index") %}
......@@ -59,8 +115,7 @@
<li><a href="/{{item.dir}}/">{{item.title}}</a></li>
{% endfor %}
</ul>
</div>
<div class="col-sm-4">
<hr>
<h3>Projects</h3>
<ul>
{% for item in navigation.projects|sort(attribute="index") %}
......
......@@ -4,7 +4,7 @@ import logging
logger = logging.getLogger("workbook")
# helper functions
from workbook_utilities import run_compute_py, read_project_json, construct_navigation, read_metadata_json
from workbook_utilities import run_compute_py, read_project_json, construct_navigation, read_metadata_json, create_new_dir
# flask
from flask import Flask, render_template, jsonify, send_file, send_from_directory, request
......@@ -30,6 +30,22 @@ app.logger.setLevel(logging.ERROR)
#
# Route the base URL to the main page
#
@app.route('/', methods=["POST"])
def home_createDir():
logger.info("Processing index POST...")
error = None
success = None
newDirName = request.form["dirName"]
if os.path.isdir(newDirName):
error = "Directory <b>" + newDirName + "</b> already exists!"
else:
create_new_dir(newDirName, request.form["projectName"], request.form["projectType"])
success = "New directory <b>" + newDirName + "</b> created!"
navigation = construct_navigation()
return render_template('static/templates/mainPage.html', navigation=navigation, error=error, success=success)
@app.route('/')
def home():
navigation = construct_navigation()
......@@ -81,6 +97,8 @@ def fetchExercise(projectDir):
# Get the project info
projectInfo = read_project_json(projectDir)
if projectInfo == None:
return "No project.json found."
metadata = read_metadata_json(projectDir)
# Figure out what to do based on the value of `show`
......
......@@ -7,6 +7,29 @@ logger = logging.getLogger("workbook")
# save the starting cwd
basecwd = os.getcwd()
def create_new_dir(newDirName, projectName, projectType):
import datetime
import shutil
# copy files
os.chdir(basecwd)
shutil.copytree("static/newDirFiles", newDirName)
# replace project.json with accurate info
with open( os.path.join(basecwd, newDirName, "project.json") ) as f:
file_str = f.read()
file_str = file_str.replace("{{TITLE}}", projectName)
file_str = file_str.replace("{{TYPE}}", projectType)
d = datetime.date.today()
file_str = file_str.replace("{{INDEX}}", d.strftime("%Y%m%d"))
with open(os.path.join(basecwd, newDirName, "project.json"), "w") as f:
f.write(file_str)
def load_src(name, fpath):
logger.info("-:Loading Python script:%s", fpath)
......@@ -33,6 +56,10 @@ def read_project_json(dir, project_data = {}):
project_data["dir"] = dir
fileName = os.path.join(basecwd, dir, "project.json")
if not os.path.isfile(fileName):
logger.debug("%s:No project.json", dir)
return None
logger.debug("%s:Reading project.json", dir)
with open(fileName) as json_file:
json_data = json.load(json_file)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment