<commit_before><form name="recipeForm" class="recipeForm" novalidate>
	<p class="req"><strong>*</strong> <small><em>required</em></small></p>

	<div class="form-group recipeForm-name">
		<label for="recipeName">Recipe Name<span class="req">*</span></label>
		<input id="recipeName"
			   name="name"
			   type="text"
			   ng-model="rf.recipeData.name"
			   class="form-control"
			   ng-focus="rf.clearChar()"
			   required>
	</div>

	<div class="form-group recipeForm-description">
		<label for="recipeDescription">Description<span class="req">*</span></label>
		<textarea id="recipeDescription"
				  name="recipeDescription"
				  class="form-control"
				  rows="3"
				  ng-model="rf.recipeData.description"
				  ng-focus="rf.clearChar()"
				  required></textarea>
	</div>

	<div class="form-group recipeForm-uploadImage">
		<label for="recipePhoto">Recipe Photo</label>
		<p>
			<small>You may upload a photograph of your dish in <strong>png</strong> or <strong>jpg</strong> format.
				File must be <strong>under 300kb</strong>.</small>
		</p>

		<img ng-if="rf.recipeData.photo || rf.uploadedFile"
			 class="recipeForm-uploadImage-img"
			 ngf-accept="'.png,.jpg'"
			 ngf-max-size="300000"
			 ngf-src="rf.uploadedFile"
			 ngf-default-src="{{'/uploads/images/' + rf.recipeData.photo}}">

		<button ng-if="rf.recipeData.photo || rf.uploadedFile"
				class="btn btn-danger"
				ng-click="rf.removePhoto()"><i class="fa fa-times"></i> Remove Photo</button>

		<input id="recipePhoto"
			   ng-show="!rf.recipeData.photo && !rf.uploadedFile"
			   name="recipePhoto"
			   type="file"
			   class="recipeForm-uploadImage-input form-control"
			   ngf-select
			   ngf-change="rf.updateFile($files)"
			   accept="image/png, image/jpeg">

		<div ng-if="rf.uploadError" class="text-danger ng-messages">
			<span>{{rf.uploadError}}</span>
		</div>
	</div>

	<div class="form-group recipeForm-ingredients">
		<label>Ingredients<span class="req">*</span></label>

		<div class="recipeForm-specialChars form-group form-inline">
			<p>
				<small>Measurement characters: click to insert at cursor in <strong>Amount</strong> field.</small>
			</p>
			<button class="btn btn-default btn-sm"
					blur-on-end
					ng-repeat="char in rf.chars"
					ng-click="rf.insertChar(char)">{{char}}</button>
		</div>

		<ul class="recipeForm-ingredients-list">

			<li class="form-inline recipeForm-ingredients-item"
				ng-repeat="ing in rf.recipeData.ingredients"
				id="ingredient-{{ing.id}}"
				ng-class="{'last': $last, 'selected': rf.selected.ing === ing}">

				<!-- MOVE -->
				<span class="btn-group move-item"
					  ng-class="{'showMove': rfl.moveIngredients}">
					<a class="btn btn-info"
					   ng-click="rfl.moveItem($event, rf.recipeData.ingredients, $index, $index - 1)"
					   ng-disabled="$first">
						<i class="fa fa-arrow-up"></i>
					</a>
					<a class="btn btn-info"
					   ng-click="rfl.moveItem($event, rf.recipeData.ingredients, $index, $index + 1)"
					   ng-disabled="$last">
						<i class="fa fa-arrow-down"></i>
					</a>
				</span>

				<!-- INPUTS -->
				<div class="input-wrapper">
					<div class="input-group recipeForm-ingredients-item-amt">
						<label for="ingredientAmt-{{ing.id}}" class="input-group-addon">Amount</label>
						<input id="ingredientAmt-{{ing.id}}"
							   name="ingredientAmt-{{ing.id}}"
							   type="text"
							   placeholder="1 c, ¼ tsp, pinch"
							   ng-model="ing.amt"
							   class="form-control recipeForm-ingredients-item-amt-input"
							   ng-focus="rf.insertCharInput($event, $index)"
							   ng-keyup="rf.insertCharInput($event, $index)"
							   ng-click="rf.insertCharInput($event, $index)">
					</div>

					<div class="input-group recipeForm-ingredients-item-ingredient">
						<label for="ingredient-{{ing.id}}" class="input-group-addon">Ingredient</label>
						<input id="ingredient-{{ing.id}}"
							   name="ingredient-{{ing.id}}"
							   type="text"
							   placeholder="ingredient {{$index + 1}}"
							   ng-model="ing.ingredient"
							   class="form-control"
							   ng-focus="rf.clearChar()">
						<div class="input-group-btn">
							<button class="btn btn-danger"
									ng-click="rfl.removeItem(rf.recipeData.ingredients, $index)"
									ng-disabled="rf.recipeData.ingredients.length === 1">
								<i class="fa fa-times"></i>
							</button>
						</div>
					</div>
				</div>

			</li>
		</ul>

		<p class="rearrange-items-toggle">
			<button class="btn btn-default"
					blur-on-end
					ng-click="rfl.moveIngredients = !rfl.moveIngredients">
				<i class="fa"
				   ng-class="{'fa-eye': !rfl.moveIngredients, 'fa-eye-slash': rfl.moveIngredients}"></i>
				{{!rfl.moveIngredients ? 'Show' : 'Hide'}} Move Controls
			</button>
		</p>

		<p>
			<button class="btn btn-info"
					blur-on-end
					ng-click="rfl.addItem($event, rf.recipeData.ingredients, 'ing')">
				<i class="fa fa-plus"></i> Add Another Ingredient
			</button>
		</p>
	</div>

	<div class="form-group recipeForm-directions">
		<label>Directions<span class="req">*</span></label>

		<ul class="recipeForm-directions-list">

			<li class="recipeForm-directions-step"
				ng-repeat="step in rf.recipeData.directions"
				ng-class="{'last': $last, 'selected': rf.selected.step === step}">

				<!-- MOVE -->
				<span class="btn-group move-item"
					  ng-class="{'showMove': rfl.moveDirections}">
					<a class="btn btn-info"
					   ng-click="rfl.moveItem($event, rf.recipeData.directions, $index, $index - 1)"
					   ng-disabled="$first">
						<i class="fa fa-arrow-up"></i>
					</a>
					<a class="btn btn-info"
					   ng-click="rfl.moveItem($event, rf.recipeData.directions, $index, $index + 1)"
					   ng-disabled="$last">
						<i class="fa fa-arrow-down"></i>
					</a>
				</span>

				<!-- INPUTS -->
				<div class="input-wrapper">
					<div class="input-group">
						<div class="input-group-addon">{{$index + 1}}.</div>
						<input id="directions-{{step.id}}"
							   name="directions-{{step.id}}"
							   type="text"
							   placeholder="Directions for step {{$index + 1}}"
							   ng-model="step.step"
							   class="form-control"
							   ng-focus="rf.clearChar()">
						<div class="input-group-btn">
							<button class="btn btn-danger"
									ng-click="rfl.removeItem(rf.recipeData.directions, $index)"
									ng-disabled="rf.recipeData.directions.length === 1">
								<i class="fa fa-times"></i>
							</button>
						</div>
					</div>
				</div>

			</li>
		</ul>

		<p class="rearrange-items-toggle">
			<button class="btn btn-default"
					blur-on-end
					ng-click="rfl.moveDirections = !rfl.moveDirections">
				<i class="fa"
				   ng-class="{'fa-eye': !rfl.moveDirections, 'fa-eye-slash': rfl.moveDirections}"></i>
				{{!rfl.moveDirections ? 'Show' : 'Hide'}} Move Controls
			</button>
		</p>

		<p>
			<button class="btn btn-info"
					blur-on-end
					ng-click="rfl.addItem($event, rf.recipeData.directions, 'step')">
				<i class="fa fa-plus"></i> Add Another Step
			</button>
		</p>
	</div>

	<div class="form-group recipeForm-public">
		<label>Public<span class="req">*</span></label>
		<p>
			<small>Who can view this recipe?</small>
		</p>
		<div class="radio">
			<label class="radio-inline">
				<input type="radio"
					   name="isPublic"
					   ng-value="true"
					   ng-model="rf.recipeData.isPublic"
					   ng-focus="rf.clearChar()"
					   required>Anyone can view
			</label>

			<label class="radio-inline">
				<input type="radio"
					   name="isPublic"
					   ng-value="false"
					   ng-model="rf.recipeData.isPublic"
					   ng-focus="rf.clearChar()">Only me
			</label>
		</div>
	</div>

	<div class="form-group recipeForm-category">
		<label for="recipeCategory">Dish<span class="req">*</span></label>
		<select id="recipeCategory"
				name="category"
				class="form-control"
				ng-options="item as item for item in rf.categories"
				ng-model="rf.recipeData.category"
				ng-focus="rf.clearChar()">
		</select>
	</div>

	<div class="form-group recipeForm-tags">
		<label>Tags</label>
		<p>
			<small>Select any applicable tags.</small>
		</p>
		<p>
			<button ng-repeat="tag in rf.tags"
					ng-click="rf.addRemoveTag(tag)"
					class="btn"
					ng-class="{'btn-info': !rf.tagMap[tag], 'btn-danger': rf.tagMap[tag]}">
				<i ng-class="{'added': rf.tagMap[tag]}" class="fa fa-times"></i> {{tag}}
			</button>
		</p>
	</div>

	<div class="form-group recipeForm-servings">
		<label for="servings">Servings</label>
		<p>
			<small>How many servings does this recipe make?</small>
		</p>
		<input id="servings"
			   name="servings"
			   type="number"
			   min="1"
			   step="1"
			   class="form-control"
			   ng-pattern="/^\d+$/"
			   ng-model="rf.recipeData.servings"
			   ng-focus="rf.clearChar()">
		<div ng-if="recipeForm.servings.$invalid && recipeForm.servings.$dirty" ng-messages="recipeForm.servings.$error" class="text-danger">
			<span ng-message="pattern">Please enter an integer.</span>
			<span ng-message="number">Please enter an integer.</span>
		</div>
	</div>

	<div class="form-group recipeForm-prepTime">
		<label for="prepTime">Preparation Time</label>
		<p>
			<small>How long will it take to prepare this recipe? Enter time in minutes (we will convert it to
				hours if necessary).</small>
		</p>
		<div class="form-group form-inline">
			<div class="input-group">
				<input id="prepTime"
					   name="prepTime"
					   type="number"
					   min="1"
					   step="1"
					   class="form-control"
					   ng-pattern="rf.timeRegex"
					   ng-model="rf.recipeData.prepTime"
					   ng-focus="rf.clearChar()">
				<div class="input-group-addon">minutes</div>
			</div>

			<div ng-if="recipeForm.prepTime.$valid && rf.recipeData.prepTime >= 60"
				 class="recipeForm-prepTime-conversion text-info">({{rf.recipeData.prepTime |
				minToH}})</div>
			<div ng-if="recipeForm.prepTime.$invalid && recipeForm.prepTime.$dirty" ng-messages="recipeForm.prepTime.$error" class="text-danger">
				<span ng-message="number">{{rf.timeError}}</span>
				<span ng-message="pattern">{{rf.timeError}}</span>
			</div>
		</div>
	</div>

	<div class="form-group recipeForm-cookTime">
		<label for="cookTime">Cook Time</label>
		<p>
			<small>How long will it take to cook this recipe? Enter time in minutes (we will convert it to
				hours if necessary).</small>
		</p>
		<div class="form-group form-inline">
			<div class="input-group">
				<input id="cookTime"
					   name="cookTime"
					   type="number"
					   min="1"
					   step="1"
					   class="form-control"
					   ng-pattern="rf.timeRegex"
					   ng-model="rf.recipeData.cookTime"
					   ng-focus="rf.clearChar()">
				<div class="input-group-addon">minutes</div>
			</div>
			<span ng-if="recipeForm.cookTime.$valid && rf.recipeData.cookTime >= 60"
				 class="recipeForm-cookTime-conversion text-info">({{rf.recipeData.cookTime |
				minToH}})</span>
			<div ng-if="recipeForm.cookTime.$invalid && recipeForm.cookTime.$dirty" ng-messages="recipeForm.cookTime.$error" class="text-danger">
				<span ng-message="number">{{rf.timeError}}</span>
				<span ng-message="pattern">{{rf.timeError}}</span>
			</div>
		</div>
	</div>

	<div class="form-group recipeForm-dietary">
		<label for="dietary">Special Diet</label>
		<p>
			<small>Indicate a primary dietary concern that this recipe addresses, if any.</small>
		</p>
		<select id="dietary"
				name="dietary"
				class="form-control"
				ng-options="item as item for item in rf.dietary"
				ng-model="rf.recipeData.dietary"
				ng-focus="rf.clearChar()">
			<option value="">None</option>
		</select>
	</div>

	<button class="btn"
			ng-class="{'btn-primary': !rf.saved, 'btn-success': rf.saved === true, 'btn-danger': rf.saved === 'error'}"
			ng-disabled="recipeForm.$invalid || !rf.recipeData.ingredients[0].ingredient || !rf.recipeData.directions[0].step"
			ng-click="rf.saveRecipe()">
		<i class="fa"
		   ng-class="{'fa-download': !rf.saved, 'fa-check': rf.saved === true, 'fa-ban': rf.saved === 'error'}"></i> {{rf.saveBtnText}}
	</button>
</form><commit_msg>#36 - update color of move controls buttons<commit_after><form name="recipeForm" class="recipeForm" novalidate>
	<p class="req"><strong>*</strong> <small><em>required</em></small></p>

	<div class="form-group recipeForm-name">
		<label for="recipeName">Recipe Name<span class="req">*</span></label>
		<input id="recipeName"
			   name="name"
			   type="text"
			   ng-model="rf.recipeData.name"
			   class="form-control"
			   ng-focus="rf.clearChar()"
			   required>
	</div>

	<div class="form-group recipeForm-description">
		<label for="recipeDescription">Description<span class="req">*</span></label>
		<textarea id="recipeDescription"
				  name="recipeDescription"
				  class="form-control"
				  rows="3"
				  ng-model="rf.recipeData.description"
				  ng-focus="rf.clearChar()"
				  required></textarea>
	</div>

	<div class="form-group recipeForm-uploadImage">
		<label for="recipePhoto">Recipe Photo</label>
		<p>
			<small>You may upload a photograph of your dish in <strong>png</strong> or <strong>jpg</strong> format.
				File must be <strong>under 300kb</strong>.</small>
		</p>

		<img ng-if="rf.recipeData.photo || rf.uploadedFile"
			 class="recipeForm-uploadImage-img"
			 ngf-accept="'.png,.jpg'"
			 ngf-max-size="300000"
			 ngf-src="rf.uploadedFile"
			 ngf-default-src="{{'/uploads/images/' + rf.recipeData.photo}}">

		<button ng-if="rf.recipeData.photo || rf.uploadedFile"
				class="btn btn-danger"
				ng-click="rf.removePhoto()"><i class="fa fa-times"></i> Remove Photo</button>

		<input id="recipePhoto"
			   ng-show="!rf.recipeData.photo && !rf.uploadedFile"
			   name="recipePhoto"
			   type="file"
			   class="recipeForm-uploadImage-input form-control"
			   ngf-select
			   ngf-change="rf.updateFile($files)"
			   accept="image/png, image/jpeg">

		<div ng-if="rf.uploadError" class="text-danger ng-messages">
			<span>{{rf.uploadError}}</span>
		</div>
	</div>

	<div class="form-group recipeForm-ingredients">
		<label>Ingredients<span class="req">*</span></label>

		<div class="recipeForm-specialChars form-group form-inline">
			<p>
				<small>Measurement characters: click to insert at cursor in <strong>Amount</strong> field.</small>
			</p>
			<button class="btn btn-default btn-sm"
					blur-on-end
					ng-repeat="char in rf.chars"
					ng-click="rf.insertChar(char)">{{char}}</button>
		</div>

		<ul class="recipeForm-ingredients-list">

			<li class="form-inline recipeForm-ingredients-item"
				ng-repeat="ing in rf.recipeData.ingredients"
				id="ingredient-{{ing.id}}"
				ng-class="{'last': $last, 'selected': rf.selected.ing === ing}">

				<!-- MOVE -->
				<span class="btn-group move-item"
					  ng-class="{'showMove': rfl.moveIngredients}">
					<a class="btn btn-warning"
					   ng-click="rfl.moveItem($event, rf.recipeData.ingredients, $index, $index - 1)"
					   ng-disabled="$first">
						<i class="fa fa-arrow-up"></i>
					</a>
					<a class="btn btn-warning"
					   ng-click="rfl.moveItem($event, rf.recipeData.ingredients, $index, $index + 1)"
					   ng-disabled="$last">
						<i class="fa fa-arrow-down"></i>
					</a>
				</span>

				<!-- INPUTS -->
				<div class="input-wrapper">
					<div class="input-group recipeForm-ingredients-item-amt">
						<label for="ingredientAmt-{{ing.id}}" class="input-group-addon">Amount</label>
						<input id="ingredientAmt-{{ing.id}}"
							   name="ingredientAmt-{{ing.id}}"
							   type="text"
							   placeholder="1 c, ¼ tsp, pinch"
							   ng-model="ing.amt"
							   class="form-control recipeForm-ingredients-item-amt-input"
							   ng-focus="rf.insertCharInput($event, $index)"
							   ng-keyup="rf.insertCharInput($event, $index)"
							   ng-click="rf.insertCharInput($event, $index)">
					</div>

					<div class="input-group recipeForm-ingredients-item-ingredient">
						<label for="ingredient-{{ing.id}}" class="input-group-addon">Ingredient</label>
						<input id="ingredient-{{ing.id}}"
							   name="ingredient-{{ing.id}}"
							   type="text"
							   placeholder="ingredient {{$index + 1}}"
							   ng-model="ing.ingredient"
							   class="form-control"
							   ng-focus="rf.clearChar()">
						<div class="input-group-btn">
							<button class="btn btn-danger"
									ng-click="rfl.removeItem(rf.recipeData.ingredients, $index)"
									ng-disabled="rf.recipeData.ingredients.length === 1">
								<i class="fa fa-times"></i>
							</button>
						</div>
					</div>
				</div>

			</li>
		</ul>

		<p class="rearrange-items-toggle">
			<button class="btn btn-default"
					blur-on-end
					ng-click="rfl.moveIngredients = !rfl.moveIngredients">
				<i class="fa"
				   ng-class="{'fa-eye': !rfl.moveIngredients, 'fa-eye-slash': rfl.moveIngredients}"></i>
				{{!rfl.moveIngredients ? 'Show' : 'Hide'}} Move Controls
			</button>
		</p>

		<p>
			<button class="btn btn-info"
					blur-on-end
					ng-click="rfl.addItem($event, rf.recipeData.ingredients, 'ing')">
				<i class="fa fa-plus"></i> Add Another Ingredient
			</button>
		</p>
	</div>

	<div class="form-group recipeForm-directions">
		<label>Directions<span class="req">*</span></label>

		<ul class="recipeForm-directions-list">

			<li class="recipeForm-directions-step"
				ng-repeat="step in rf.recipeData.directions"
				ng-class="{'last': $last, 'selected': rf.selected.step === step}">

				<!-- MOVE -->
				<span class="btn-group move-item"
					  ng-class="{'showMove': rfl.moveDirections}">
					<a class="btn btn-warning"
					   ng-click="rfl.moveItem($event, rf.recipeData.directions, $index, $index - 1)"
					   ng-disabled="$first">
						<i class="fa fa-arrow-up"></i>
					</a>
					<a class="btn btn-warning"
					   ng-click="rfl.moveItem($event, rf.recipeData.directions, $index, $index + 1)"
					   ng-disabled="$last">
						<i class="fa fa-arrow-down"></i>
					</a>
				</span>

				<!-- INPUTS -->
				<div class="input-wrapper">
					<div class="input-group">
						<div class="input-group-addon">{{$index + 1}}.</div>
						<input id="directions-{{step.id}}"
							   name="directions-{{step.id}}"
							   type="text"
							   placeholder="Directions for step {{$index + 1}}"
							   ng-model="step.step"
							   class="form-control"
							   ng-focus="rf.clearChar()">
						<div class="input-group-btn">
							<button class="btn btn-danger"
									ng-click="rfl.removeItem(rf.recipeData.directions, $index)"
									ng-disabled="rf.recipeData.directions.length === 1">
								<i class="fa fa-times"></i>
							</button>
						</div>
					</div>
				</div>

			</li>
		</ul>

		<p class="rearrange-items-toggle">
			<button class="btn btn-default"
					blur-on-end
					ng-click="rfl.moveDirections = !rfl.moveDirections">
				<i class="fa"
				   ng-class="{'fa-eye': !rfl.moveDirections, 'fa-eye-slash': rfl.moveDirections}"></i>
				{{!rfl.moveDirections ? 'Show' : 'Hide'}} Move Controls
			</button>
		</p>

		<p>
			<button class="btn btn-info"
					blur-on-end
					ng-click="rfl.addItem($event, rf.recipeData.directions, 'step')">
				<i class="fa fa-plus"></i> Add Another Step
			</button>
		</p>
	</div>

	<div class="form-group recipeForm-public">
		<label>Public<span class="req">*</span></label>
		<p>
			<small>Who can view this recipe?</small>
		</p>
		<div class="radio">
			<label class="radio-inline">
				<input type="radio"
					   name="isPublic"
					   ng-value="true"
					   ng-model="rf.recipeData.isPublic"
					   ng-focus="rf.clearChar()"
					   required>Anyone can view
			</label>

			<label class="radio-inline">
				<input type="radio"
					   name="isPublic"
					   ng-value="false"
					   ng-model="rf.recipeData.isPublic"
					   ng-focus="rf.clearChar()">Only me
			</label>
		</div>
	</div>

	<div class="form-group recipeForm-category">
		<label for="recipeCategory">Dish<span class="req">*</span></label>
		<select id="recipeCategory"
				name="category"
				class="form-control"
				ng-options="item as item for item in rf.categories"
				ng-model="rf.recipeData.category"
				ng-focus="rf.clearChar()">
		</select>
	</div>

	<div class="form-group recipeForm-tags">
		<label>Tags</label>
		<p>
			<small>Select any applicable tags.</small>
		</p>
		<p>
			<button ng-repeat="tag in rf.tags"
					ng-click="rf.addRemoveTag(tag)"
					class="btn"
					ng-class="{'btn-info': !rf.tagMap[tag], 'btn-danger': rf.tagMap[tag]}">
				<i ng-class="{'added': rf.tagMap[tag]}" class="fa fa-times"></i> {{tag}}
			</button>
		</p>
	</div>

	<div class="form-group recipeForm-servings">
		<label for="servings">Servings</label>
		<p>
			<small>How many servings does this recipe make?</small>
		</p>
		<input id="servings"
			   name="servings"
			   type="number"
			   min="1"
			   step="1"
			   class="form-control"
			   ng-pattern="/^\d+$/"
			   ng-model="rf.recipeData.servings"
			   ng-focus="rf.clearChar()">
		<div ng-if="recipeForm.servings.$invalid && recipeForm.servings.$dirty" ng-messages="recipeForm.servings.$error" class="text-danger">
			<span ng-message="pattern">Please enter an integer.</span>
			<span ng-message="number">Please enter an integer.</span>
		</div>
	</div>

	<div class="form-group recipeForm-prepTime">
		<label for="prepTime">Preparation Time</label>
		<p>
			<small>How long will it take to prepare this recipe? Enter time in minutes (we will convert it to
				hours if necessary).</small>
		</p>
		<div class="form-group form-inline">
			<div class="input-group">
				<input id="prepTime"
					   name="prepTime"
					   type="number"
					   min="1"
					   step="1"
					   class="form-control"
					   ng-pattern="rf.timeRegex"
					   ng-model="rf.recipeData.prepTime"
					   ng-focus="rf.clearChar()">
				<div class="input-group-addon">minutes</div>
			</div>

			<div ng-if="recipeForm.prepTime.$valid && rf.recipeData.prepTime >= 60"
				 class="recipeForm-prepTime-conversion text-info">({{rf.recipeData.prepTime |
				minToH}})</div>
			<div ng-if="recipeForm.prepTime.$invalid && recipeForm.prepTime.$dirty" ng-messages="recipeForm.prepTime.$error" class="text-danger">
				<span ng-message="number">{{rf.timeError}}</span>
				<span ng-message="pattern">{{rf.timeError}}</span>
			</div>
		</div>
	</div>

	<div class="form-group recipeForm-cookTime">
		<label for="cookTime">Cook Time</label>
		<p>
			<small>How long will it take to cook this recipe? Enter time in minutes (we will convert it to
				hours if necessary).</small>
		</p>
		<div class="form-group form-inline">
			<div class="input-group">
				<input id="cookTime"
					   name="cookTime"
					   type="number"
					   min="1"
					   step="1"
					   class="form-control"
					   ng-pattern="rf.timeRegex"
					   ng-model="rf.recipeData.cookTime"
					   ng-focus="rf.clearChar()">
				<div class="input-group-addon">minutes</div>
			</div>
			<span ng-if="recipeForm.cookTime.$valid && rf.recipeData.cookTime >= 60"
				 class="recipeForm-cookTime-conversion text-info">({{rf.recipeData.cookTime |
				minToH}})</span>
			<div ng-if="recipeForm.cookTime.$invalid && recipeForm.cookTime.$dirty" ng-messages="recipeForm.cookTime.$error" class="text-danger">
				<span ng-message="number">{{rf.timeError}}</span>
				<span ng-message="pattern">{{rf.timeError}}</span>
			</div>
		</div>
	</div>

	<div class="form-group recipeForm-dietary">
		<label for="dietary">Special Diet</label>
		<p>
			<small>Indicate a primary dietary concern that this recipe addresses, if any.</small>
		</p>
		<select id="dietary"
				name="dietary"
				class="form-control"
				ng-options="item as item for item in rf.dietary"
				ng-model="rf.recipeData.dietary"
				ng-focus="rf.clearChar()">
			<option value="">None</option>
		</select>
	</div>

	<button class="btn"
			ng-class="{'btn-primary': !rf.saved, 'btn-success': rf.saved === true, 'btn-danger': rf.saved === 'error'}"
			ng-disabled="recipeForm.$invalid || !rf.recipeData.ingredients[0].ingredient || !rf.recipeData.directions[0].step"
			ng-click="rf.saveRecipe()">
		<i class="fa"
		   ng-class="{'fa-download': !rf.saved, 'fa-check': rf.saved === true, 'fa-ban': rf.saved === 'error'}"></i> {{rf.saveBtnText}}
	</button>
</form>
{'fraction_non_alphanumeric': 0.19192921524849085, 'fraction_numerical': 0.0027288514016373107, 'mean_word_length': 3.1680165431673273, 'pattern_counts': {'":': 0, '<': 553, '<?xml version=': 0, '>': 557, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 2, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4639724', 'n_tokens_mistral': 10743, 'n_tokens_neox': 8437, 'n_words': 1467}