songs2slides

A tool that automatically finds song lyrics and creates lyric slideshows
git clone https://git.ashermorgan.net/songs2slides/
Log | Files | Refs | README

commit 2fb49c0849af22e7491b6eb0f5c825e0d656795d
parent 57a7d4af0d88dff2f173fd109fe1be48700ae133
Author: AsherMorgan <59518073+AsherMorgan@users.noreply.github.com>
Date:   Tue,  7 Jul 2020 08:48:48 -0700

Add layout.html.

Diffstat:
MSongs2Slides/routes.py | 2+-
MSongs2Slides/templates/home.html | 106++++++++++++++++++++++++++++++++++++-------------------------------------------
ASongs2Slides/templates/layout.html | 24++++++++++++++++++++++++
MSongs2Slides/templates/settings.html | 231++++++++++++++++++++++++++++++++++++++-----------------------------------------
4 files changed, 184 insertions(+), 179 deletions(-)

diff --git a/Songs2Slides/routes.py b/Songs2Slides/routes.py @@ -19,7 +19,7 @@ def home(): # Settings page @app.route("/settings/", methods=["GET"]) def settings(): - return render_template("settings.html") + return render_template("settings.html", title = "Settings") diff --git a/Songs2Slides/templates/home.html b/Songs2Slides/templates/home.html @@ -1,68 +1,59 @@ -<!DOCTYPE html> -<html> - <head> - <title>Songs2Slides</title> - <meta name="description" content="Quickly and easily create lyric powerpoints from a list of songs."> - <meta name="viewport" content="width=device-width, user-scalable=no"/> - <link rel="icon" type="image/png" href="{{ url_for('static', filename='favicon-32.png') }}"> - <link rel="stylesheet" href="{{ url_for('static', filename='global.css') }}"></link> - <link rel="stylesheet" href="{{ url_for('static', filename='home.css') }}"></link> - <script src="{{ url_for('static', filename='home.js') }}"></script> - </head> - <body onload="onLoad();"> - <div id="header"> - <h1>Songs2Slides</h1> - </div> - - <div id="songsContainer" class="container"> - <h3>Choose your songs</h3> - - <template id="songTemplate"> - <div class="song"> - <input type="text" class="title" placeholder="Song Title"/> - <input type="text" class="artist" placeholder="Song Artist"/> - <a id="remove" class="songRemove">╳</a> - </div> - </template> - <div id="songs"></div> - - <div> - <span id="addSong" onclick="AddSong();">+</span> +{% extends "layout.html" %} + +{% block header %} + <link rel="stylesheet" href="{{ url_for('static', filename='home.css') }}"></link> + <script src="{{ url_for('static', filename='home.js') }}"></script> +{% endblock header %} + +{% block content %} + <div id="songsContainer" class="container"> + <h3>Choose your songs</h3> + + <template id="songTemplate"> + <div class="song"> + <input type="text" class="title" placeholder="Song Title"/> + <input type="text" class="artist" placeholder="Song Artist"/> + <a id="remove" class="songRemove">╳</a> </div> + </template> + <div id="songs"></div> - <div id="songsButtons"> - <a href="/settings/">Settings</a> - <button id="reviewButton" onclick="ReviewLyrics();">Next</button> - </div> + <div> + <span id="addSong" onclick="AddSong();">+</span> </div> - <form id="lyricsContainer" class="container" hidden action="/pptx" method="POST" enctype="multipart/form-data"> - <h3>Review your PowerPoint</h3> + <div id="songsButtons"> + <a href="/settings/">Settings</a> + <button id="reviewButton" onclick="ReviewLyrics();">Next</button> + </div> + </div> - <p>Review and edit the parsed lyrics below and then click the create PowerPoint button.</p> - <p>One blank line represents the start of a new slide and three blank lines represent a blank slide.</p> - - <input type="text" id="pptxSettingsField" name="settings" hidden> - <input type="text" id="lyricsField" name="lyrics" hidden> + <form id="lyricsContainer" class="container" hidden action="/pptx" method="POST" enctype="multipart/form-data"> + <h3>Review your PowerPoint</h3> - <textarea rows="15" id="rawLyrics"></textarea> + <p>Review and edit the parsed lyrics below and then click the create PowerPoint button.</p> + <p>One blank line represents the start of a new slide and three blank lines represent a blank slide.</p> + + <input type="text" id="pptxSettingsField" name="settings" hidden> + <input type="text" id="lyricsField" name="lyrics" hidden> - <div id="fileUpload"> - <label>Starting PowerPoint (optional): </label> - <input type="file" name="pptxFile" accept="application/vnd.openxmlformats-officedocument.presentationml.presentation, application/vnd.ms-powerpoint"> - </div> + <textarea rows="15" id="rawLyrics"></textarea> - <p id="errors"></p> + <div id="fileUpload"> + <label>Starting PowerPoint (optional): </label> + <input type="file" name="pptxFile" accept="application/vnd.openxmlformats-officedocument.presentationml.presentation, application/vnd.ms-powerpoint"> + </div> - <div id="lyricsButtons"> - <a id="lyricsBack" href="javascript:Back()">Back</a> - <button id="submitLyricsButton" onclick="SubmitLyrics()">Create Powerpoint</button> - </div> - </form> + <p id="errors"></p> - <div id="thankyou" hidden> - <p>Thankyou for using Songs2Slides</p> - <p>Click <a href="javascript:Reset()">here</a> to create another PowerPoint.</p> + <div id="lyricsButtons"> + <a id="lyricsBack" href="javascript:Back()">Back</a> + <button id="submitLyricsButton" onclick="SubmitLyrics()">Create Powerpoint</button> </div> - </body> -</html> -\ No newline at end of file + </form> + + <div id="thankyou" hidden> + <p>Thankyou for using Songs2Slides</p> + <p>Click <a href="javascript:Reset()">here</a> to create another PowerPoint.</p> + </div> +{% endblock content %} diff --git a/Songs2Slides/templates/layout.html b/Songs2Slides/templates/layout.html @@ -0,0 +1,24 @@ +<!DOCTYPE html> +<html> + <head> + {% if title %} + <title>{{ title }}</title> + {% else %} + <title>SongsSlides</title> + {% endif %} + + <meta name="description" content="Quickly and easily create lyric powerpoints from a list of songs."> + <meta name="viewport" content="width=device-width, user-scalable=no"/> + <link rel="icon" type="image/png" href="{{ url_for('static', filename='favicon-32.png') }}"> + <link rel="stylesheet" href="{{ url_for('static', filename='global.css') }}"></link> + + {% block header %}{% endblock %} + </head> + <body onload="onLoad();"> + <div id="header"> + <h1>Songs2Slides</h1> + </div> + + {% block content %}{% endblock %} + </body> +</html> diff --git a/Songs2Slides/templates/settings.html b/Songs2Slides/templates/settings.html @@ -1,126 +1,118 @@ -<!DOCTYPE html> -<html> - <head> - <title>Songs2Slides</title> - <meta name="description" content="Quickly and easily create lyric powerpoints from a list of songs."> - <meta name="viewport" content="width=device-width, user-scalable=no"/> - <link rel="stylesheet" href="{{ url_for('static', filename='global.css') }}"></link> - <link rel="stylesheet" href="{{ url_for('static', filename='settings.css') }}"></link> - <script src="{{ url_for('static', filename='settings.js') }}"></script> - </head> - <body onload="onLoad();"> - <div id="header"> - <h1>Songs2Slides</h1> - </div> +{% extends "layout.html" %} + +{% block header %} + <link rel="stylesheet" href="{{ url_for('static', filename='settings.css') }}"></link> + <script src="{{ url_for('static', filename='settings.js') }}"></script> +{% endblock header %} - <div id="settings" class="container"> - <h2>Settings</h2> - <h4>Parsing</h4> - <div> - Add title slides: - <input type="checkbox" id="title-slides" onchange="saveSettings();"/> - </div> - <div> - Default lines per slide: - <input type="number" min="1" step="1" id="lines-per-slide" onchange="saveSettings();"/> - </div> - <div> - Remove content in parentheses: - <input type="checkbox" id="remove-parentheses" onchange="saveSettings();"/> - </div> +{% block content %} + <div id="settings" class="container"> + <h2>Settings</h2> + <h4>Parsing</h4> + <div> + Add title slides: + <input type="checkbox" id="title-slides" onchange="saveSettings();"/> + </div> + <div> + Default lines per slide: + <input type="number" min="1" step="1" id="lines-per-slide" onchange="saveSettings();"/> + </div> + <div> + Remove content in parentheses: + <input type="checkbox" id="remove-parentheses" onchange="saveSettings();"/> + </div> - <h4>Slide settings</h4> - <div> - Width (Inches): - <input type="number" min="0" step="any" id="slide-width" onchange="saveSettings();"/> - </div> - <div> - Height (Inches): - <input type="number" min="0" step="any" id="slide-height" onchange="saveSettings();"/> - </div> - <div> - Background color: - <input type="color" id="slide-color" onchange="saveSettings();"/> - </div> + <h4>Slide settings</h4> + <div> + Width (Inches): + <input type="number" min="0" step="any" id="slide-width" onchange="saveSettings();"/> + </div> + <div> + Height (Inches): + <input type="number" min="0" step="any" id="slide-height" onchange="saveSettings();"/> + </div> + <div> + Background color: + <input type="color" id="slide-color" onchange="saveSettings();"/> + </div> - <h4>Margin settings</h4> - <div> - Left (Inches): - <input type="number" min="0" step="any" id="margin-left" onchange="saveSettings();"/> - </div> - <div> - Right (Inches): - <input type="number" min="0" step="any" id="margin-right" onchange="saveSettings();"/> - </div> - <div> - Top (Inches): - <input type="number" min="0" step="any" id="margin-top" onchange="saveSettings();"/> - </div> - <div> - Bottom (Inches): - <input type="number" min="0" step="any" id="margin-bottom" onchange="saveSettings();"/> - </div> + <h4>Margin settings</h4> + <div> + Left (Inches): + <input type="number" min="0" step="any" id="margin-left" onchange="saveSettings();"/> + </div> + <div> + Right (Inches): + <input type="number" min="0" step="any" id="margin-right" onchange="saveSettings();"/> + </div> + <div> + Top (Inches): + <input type="number" min="0" step="any" id="margin-top" onchange="saveSettings();"/> + </div> + <div> + Bottom (Inches): + <input type="number" min="0" step="any" id="margin-bottom" onchange="saveSettings();"/> + </div> - <h4>Font settings</h4> - <div> - Family: - <input id="font-family" list="fonts" onchange="saveSettings();"> - <datalist id="fonts"> - <option>Arial</option> - <option>Century</option> - <option>Century Gothic</option> - <option>Calibri</option> - <option>Comic Sans MS</option> - <option>Courier New</option> - <option>Georgia</option> - <option>Impact</option> - <option>Rockwell</option> - <option>Segoe UI</option> - <option>Tahoma</option> - <option>Times New Roman</option> - <option>Trebuchet MS</option> - <option>Verdana</option> - </datalist> - </div> - <div> - Size: - <input type="number" min="0" step="1" id="font-size" onchange="saveSettings();"/> - </div> - <div> - Bold: - <input type="checkbox" id = "font-bold" onchange="saveSettings();"/> - </div> - <div> - Italic: - <input type="checkbox" id="font-italic" onchange="saveSettings();"/> - </div> - <div> - Color: - <input type="color" id="font-color" onchange="saveSettings();"/> - </div> + <h4>Font settings</h4> + <div> + Family: + <input id="font-family" list="fonts" onchange="saveSettings();"> + <datalist id="fonts"> + <option>Arial</option> + <option>Century</option> + <option>Century Gothic</option> + <option>Calibri</option> + <option>Comic Sans MS</option> + <option>Courier New</option> + <option>Georgia</option> + <option>Impact</option> + <option>Rockwell</option> + <option>Segoe UI</option> + <option>Tahoma</option> + <option>Times New Roman</option> + <option>Trebuchet MS</option> + <option>Verdana</option> + </datalist> + </div> + <div> + Size: + <input type="number" min="0" step="1" id="font-size" onchange="saveSettings();"/> + </div> + <div> + Bold: + <input type="checkbox" id = "font-bold" onchange="saveSettings();"/> + </div> + <div> + Italic: + <input type="checkbox" id="font-italic" onchange="saveSettings();"/> + </div> + <div> + Color: + <input type="color" id="font-color" onchange="saveSettings();"/> + </div> - <h4>Pharagraph settings</h4> - <div> - Vertical Alignment: - <select id="vertical-alignment" onchange="saveSettings();"> - <option>Top</option> - <option>Middle</option> - <option>Bottom</option> - </select> - </div> - <div> - Line spacing: - <input type="number" min="0" step="any" id="line-spacing" onchange="saveSettings();"/> - </div> - <div> - Word wrap: - <input type="checkbox" id="word-wrap" onchange="saveSettings();"/> - </div> + <h4>Pharagraph settings</h4> + <div> + Vertical Alignment: + <select id="vertical-alignment" onchange="saveSettings();"> + <option>Top</option> + <option>Middle</option> + <option>Bottom</option> + </select> + </div> + <div> + Line spacing: + <input type="number" min="0" step="any" id="line-spacing" onchange="saveSettings();"/> + </div> + <div> + Word wrap: + <input type="checkbox" id="word-wrap" onchange="saveSettings();"/> + </div> - <div id="settingsFooter"> - <a href="../">Back</a> - <button id="resetButton" onclick="resetSettings();">Reset</button> - </div> + <div id="settingsFooter"> + <a href="../">Back</a> + <button id="resetButton" onclick="resetSettings();">Reset</button> </div> - </body> -</html> -\ No newline at end of file + </div> +{% endblock content %}