From 2b002e83c10bbe442bb540d9664896060ebd0dda Mon Sep 17 00:00:00 2001 From: Mike Shoup Date: Sat, 22 Jun 2019 16:50:57 -0600 Subject: [PATCH] Split javascript from template --- src/humulus/recipes.py | 8 +- src/humulus/static/recipes.js | 173 +++++++++++++++++++++ src/humulus/templates/recipes/create.html | 177 +--------------------- 3 files changed, 179 insertions(+), 179 deletions(-) create mode 100644 src/humulus/static/recipes.js diff --git a/src/humulus/recipes.py b/src/humulus/recipes.py index dfb60a3..2ca92f1 100644 --- a/src/humulus/recipes.py +++ b/src/humulus/recipes.py @@ -35,8 +35,9 @@ class FermentableForm(Form): """ name = StringField('Name', validators=[DataRequired()]) type = SelectField('Type', validators=[DataRequired()], - choices=[(c, c) for c in ['Grain', 'LME', 'DME', 'Sugar', - 'Non-fermentable', 'Other']]) + choices=[(c, c) for c in ['Grain', 'LME', 'DME', + 'Sugar', 'Non-fermentable', + 'Other']]) amount = DecimalField('Amount (lb)', validators=[DataRequired()]) ppg = DecimalField('PPG', validators=[DataRequired()]) color = DecimalField('Color (°L)', validators=[DataRequired()]) @@ -87,7 +88,8 @@ class HopForm(Form): class RecipeForm(FlaskForm): """Form for recipes.""" name = StringField('Name', validators=[DataRequired()]) - efficiency = DecimalField('Batch Efficiency (%)', validators=[DataRequired()]) + efficiency = DecimalField('Batch Efficiency (%)', + validators=[DataRequired()]) volume = DecimalField('Batch Volume (gal)', validators=[DataRequired()]) notes = TextAreaField('Notes') fermentables = FieldList( diff --git a/src/humulus/static/recipes.js b/src/humulus/static/recipes.js new file mode 100644 index 0000000..300072a --- /dev/null +++ b/src/humulus/static/recipes.js @@ -0,0 +1,173 @@ +// Correct all the indices for forms matching item. +function adjustIndices(removedIndex, item) { + var $forms = $(item); + $forms.each(function(i) { + var $form = $(this); + var index = parseInt($form.data('index')); + var newIndex = index - 1; + if (index <= removedIndex) { + // Skip this one + return true; + } + + // Change form index + $form.data('index', newIndex); + + // Change ID in form input, select, and labels + $form.find('input').each(function(j) { + var $item = $(this) + $item.attr('id', $item.attr('id').replace(index, newIndex)); + $item.attr('name', $item.attr('name').replace(index, newIndex)); + }); + $form.find('select').each(function(j) { + var $item = $(this) + $item.attr('id', $item.attr('id').replace(index, newIndex)); + $item.attr('name', $item.attr('name').replace(index, newIndex)); + }); + }); +} + +// Remove a subform from a form matching `formClass` closest to `$remButton`. +// Adjust length on element matching `formsId`. Also adjust indices. +function removeForm($remButton, formClass, formsId) { + var $removedForm = $remButton.closest(formClass); + var removedIndex = parseInt($removedForm.data('index')); + $removedForm.remove(); + var $fermsDiv = $(formsId); + $fermsDiv.data('length', $fermsDiv.data('length') - 1); + adjustIndices(removedIndex, formClass); +} + +// Remove a fermentable +function removeFerm() { + removeForm($(this), '.ferm-form', '#ferms'); +} + +// Remove a hop +function removeHop() { + removeForm($(this), '.hop-form', '#hops'); +} + +// Add a fermentable +function addFerm() { + var $fermsDiv = $('#ferms'); + var fermsLength = $fermsDiv.data('length'); + if (fermsLength == 20) { + window.alert("Can't have more than 20 fermentables."); + return; + } + var newFerm = `
` + + // Name field + '
' + + `` + + `` + + '
' + // End name field + '
' + + // Type field + '
' + + `` + + `' + + '
' + // End type field + // Amount field + '
' + + `` + + `` + + '
' + // End amount field + // PPG field + '
' + + `` + + `` + + '
' + // End PPG field + // Color field + '
' + + `` + + `` + + '
' + // End PPG field + '
' + + // Remove button + '
' + + '' + + '
' + // End remove button + '
'; + $fermsDiv.append(newFerm); + $fermsDiv.data('length', fermsLength + 1); + $('.rem-ferm').unbind('click'); + $('.rem-ferm').click(removeFerm); +} + +function addHop() { + var $hopsDiv = $('#hops'); + var hopsLength = $hopsDiv.data('length'); + if (hopsLength == 20) { + window.alert("Can't have more than 20 hops."); + return; + } + + var newHop = `
` + + // Name field + '
' + + `` + + `` + + '
' + // End name field + '
' + + // Usage field + '
' + + `` + + `' + + '
' + // End usage field + // Alpha acid % field + '
' + + `` + + `` + + '
' + // End alpha acid % field + // Duration field + '
' + + `` + + `` + + '
' + // End duration field + // Amount field + '
' + + `` + + `` + + '
' + // End amount field + '
' + + // Remove button + '
' + + '' + + '
' + // End remove button + '
'; + + $hopsDiv.append(newHop); + $hopsDiv.data('length', hopsLength + 1); + $('.rem-hop').unbind('click'); + $('.rem-hop').click(removeHop); +} + +$(document).ready(function() { + $('#add-ferm').click(addFerm); + $('.rem-ferm').click(removeFerm); + $('#add-hop').click(addHop); + $('.rem-hop').click(removeHop); +}); diff --git a/src/humulus/templates/recipes/create.html b/src/humulus/templates/recipes/create.html index 6be0079..cb924da 100644 --- a/src/humulus/templates/recipes/create.html +++ b/src/humulus/templates/recipes/create.html @@ -105,180 +105,5 @@ limitations under the License.
- - + {% endblock %}