|  | <div class="narrow"> | 
						
						
							|  |   <?= partial('partials/header') ?> | 
						
						
							|  |  | 
						
						
							|  |     <div style="clear: both;"> | 
						
						
							|  |       <div class="alert alert-success hidden" id="post_success"><strong>Success! Your post should be on your website now!</strong><br><a href="" id="post_href">View your post</a></div> | 
						
						
							|  |       <div class="alert alert-danger hidden" id="post_error"><strong>There was a problem saving your post. Your endpoint did not return a Location header.</strong><br>See <a href="/creating-a-micropub-endpoint">Creating a Micropub Endpoint</a> for more information.</div> | 
						
						
							|  |     </div> | 
						
						
							|  |  | 
						
						
							|  |     <form role="form" style="margin-top: 20px;" id="note_form"> | 
						
						
							|  |  | 
						
						
							|  |       <h2>Product</h2> | 
						
						
							|  |  | 
						
						
							|  |       <div class="row"> | 
						
						
							|  |         <div class="col-xs-6"> | 
						
						
							|  |           <div class="form-group"> | 
						
						
							|  |             <label>Name</label> | 
						
						
							|  |             <input type="text" class="form-control" id="item_name" placeholder="" value=""> | 
						
						
							|  |           </div> | 
						
						
							|  |         </div> | 
						
						
							|  |         <div class="col-xs-6"> | 
						
						
							|  |           <div class="form-group"> | 
						
						
							|  |             <label>URL</label> | 
						
						
							|  |             <input type="url" class="form-control" id="item_url" placeholder="" value=""> | 
						
						
							|  |           </div> | 
						
						
							|  |         </div> | 
						
						
							|  |       </div> | 
						
						
							|  |  | 
						
						
							|  |       <h2>Review</h2> | 
						
						
							|  |  | 
						
						
							|  |       <div class="rating-stars"> | 
						
						
							|  |         <a href="" data-rating="1"></a><a href="" data-rating="2"></a><a href="" data-rating="3"></a><a href="" data-rating="4"></a><a href="" data-rating="5"></a> | 
						
						
							|  |         <span class="description">It's okay</span> | 
						
						
							|  |       </div> | 
						
						
							|  |  | 
						
						
							|  |       <div class="row review-content hidden"> | 
						
						
							|  |         <div class="col-xs-12"> | 
						
						
							|  |           <div class="form-group"> | 
						
						
							|  |             <textarea id="review_content" value="" class="form-control" style="height: 4em;" placeholder="Write your review here"></textarea>           | 
						
						
							|  |             <div id="review-html-note"> | 
						
						
							|  |               <input type="checkbox" id="review_is_html" value="1"> Post as HTML | 
						
						
							|  |             </div> | 
						
						
							|  |           </div> | 
						
						
							|  |         </div> | 
						
						
							|  |       </div> | 
						
						
							|  |  | 
						
						
							|  |       <div class="row review-summary hidden"> | 
						
						
							|  |         <div class="col-xs-12"> | 
						
						
							|  |           <div class="form-group"> | 
						
						
							|  |             <input id="review_summary" value="" class="form-control" placeholder="Review summary"> | 
						
						
							|  |           </div> | 
						
						
							|  |         </div> | 
						
						
							|  |       </div> | 
						
						
							|  |  | 
						
						
							|  |       <div class="row review-save hidden"> | 
						
						
							|  |         <div class="col-xs-12"> | 
						
						
							|  |           <div style="float: right; margin-top: 6px;"> | 
						
						
							|  |             <button class="btn btn-success" id="btn_post">Post Review</button> | 
						
						
							|  |           </div> | 
						
						
							|  |         </div> | 
						
						
							|  |       </div> | 
						
						
							|  |  | 
						
						
							|  |     </form> | 
						
						
							|  |  | 
						
						
							|  | </div> | 
						
						
							|  | <style type="text/css"> | 
						
						
							|  | .alert { | 
						
						
							|  |   margin-top: 1em; | 
						
						
							|  | } | 
						
						
							|  | .rating-stars { | 
						
						
							|  |   display: flex; | 
						
						
							|  |   flex-direction: row; | 
						
						
							|  |   align-items: center; | 
						
						
							|  | } | 
						
						
							|  | .rating-stars .description { | 
						
						
							|  |   display: none; | 
						
						
							|  |   font-weight: bold; | 
						
						
							|  |   margin-left: 20px; | 
						
						
							|  | } | 
						
						
							|  | .rating-stars .description.visible { | 
						
						
							|  |   display: inline-block; | 
						
						
							|  | } | 
						
						
							|  | .rating-stars a { | 
						
						
							|  |   display: inline-block; | 
						
						
							|  |   width: 64px; | 
						
						
							|  |   height: 64px; | 
						
						
							|  |   background-repeat: no-repeat; | 
						
						
							|  |   background-image: url("data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJMYXllcl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHg9IjBweCIgeT0iMHB4IgogICB3aWR0aD0iNjRweCIgaGVpZ2h0PSI2NHB4IiB2aWV3Qm94PSIwIDAgNjQgNjQiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDY0IDY0IiB4bWw6c3BhY2U9InByZXNlcnZlIj48cG9seWdvbiBmaWxsPSJub25lIiBzdHJva2U9IiNBN0E5QUMiIHN0cm9rZS13aWR0aD0iNCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBwb2ludHM9IjMxLjg2Niw2LjYxOCA0MC4wOSwyMy4yODEgNTguNDc5LDI1Ljk1MyA0NS4xNzIsMzguOTIzIDQ4LjMxMyw1Ny4yMzkgMzEuODY2LDQ4LjU5MiAxNS40MTgsNTcuMjM5IDE4LjU2LDM4LjkyMyA1LjI1MywyNS45NTMgMjMuNjQyLDIzLjI4MSAiLz48L3N2Zz4="); | 
						
						
							|  |  | 
						
						
							|  | } | 
						
						
							|  | .rating-stars a.hover { | 
						
						
							|  |   background-image: url("data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeD0iMHB4IiB5PSIwcHgiCiAgIHdpZHRoPSI2NHB4IiBoZWlnaHQ9IjY0cHgiIHZpZXdCb3g9IjAgMCA2NCA2NCIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgNjQgNjQiIHhtbDpzcGFjZT0icHJlc2VydmUiPjxwb2x5Z29uIGZpbGw9IiM1MUFFQ0QiIHN0cm9rZT0iIzUxQUVDRCIgc3Ryb2tlLXdpZHRoPSI0IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHBvaW50cz0iMzEuODY2LDYuNjE4IDQwLjA5LDIzLjI4MSA1OC40NzksMjUuOTUzIDQ1LjE3MiwzOC45MjMgNDguMzEzLDU3LjIzOSAzMS44NjYsNDguNTkyIDE1LjQxOCw1Ny4yMzkgMTguNTYsMzguOTIzIDUuMjUzLDI1Ljk1MyAyMy42NDIsMjMuMjgxICIvPjwvc3ZnPgo="); | 
						
						
							|  | } | 
						
						
							|  | .rating-stars a.selected { | 
						
						
							|  |   background-image: url("data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJMYXllcl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHg9IjBweCIgeT0iMHB4IgogICB3aWR0aD0iNjRweCIgaGVpZ2h0PSI2NHB4IiB2aWV3Qm94PSIwIDAgNjQgNjQiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDY0IDY0IiB4bWw6c3BhY2U9InByZXNlcnZlIj48cG9seWdvbiBmaWxsPSIjRkVDMjBGIiBzdHJva2U9IiNGRUMyMEYiIHN0cm9rZS13aWR0aD0iNCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBwb2ludHM9IjMxLjg2Niw2LjYxOCA0MC4wOSwyMy4yODEgNTguNDc5LDI1Ljk1MyA0NS4xNzIsMzguOTIzIDQ4LjMxMyw1Ny4yMzkgMzEuODY2LDQ4LjU5MiAxNS40MTgsNTcuMjM5IDE4LjU2LDM4LjkyMyA1LjI1MywyNS45NTMgMjMuNjQyLDIzLjI4MSAiLz48L3N2Zz4="); | 
						
						
							|  | } | 
						
						
							|  |  | 
						
						
							|  | .review-content { | 
						
						
							|  |   margin-top: 1em; | 
						
						
							|  | } | 
						
						
							|  | #review-html-note { | 
						
						
							|  |   font-size: 12px; | 
						
						
							|  |   text-align: right; | 
						
						
							|  | } | 
						
						
							|  |  | 
						
						
							|  | </style> | 
						
						
							|  | <script> | 
						
						
							|  | var selectedRating = 0; | 
						
						
							|  | var userSelectedHTML = null; | 
						
						
							|  |  | 
						
						
							|  | function isHTML(str) { | 
						
						
							|  |   var doc = new DOMParser().parseFromString(str, "text/html"); | 
						
						
							|  |   return Array.from(doc.body.childNodes).some(node => node.nodeType === 1); | 
						
						
							|  | } | 
						
						
							|  |  | 
						
						
							|  | function isTouchDevice() { | 
						
						
							|  |   return 'ontouchstart' in document.documentElement; | 
						
						
							|  | } | 
						
						
							|  |  | 
						
						
							|  | function setSaveButtonState() { | 
						
						
							|  |   if(selectedRating > 0 && $("#item_name").val() != "" && $("#item_url").val() != "") { | 
						
						
							|  |     $(".review-save").removeClass("hidden"); | 
						
						
							|  |   } else { | 
						
						
							|  |     $(".review-save").addClass("hidden"); | 
						
						
							|  |   } | 
						
						
							|  | } | 
						
						
							|  |  | 
						
						
							|  | $(function(){ | 
						
						
							|  |  | 
						
						
							|  |   $(".rating-stars a").on("mouseover",function(){ | 
						
						
							|  |     // Disable hover effects on touch devices | 
						
						
							|  |     if(isTouchDevice()) { return; } | 
						
						
							|  |  | 
						
						
							|  |     $(this).addClass("hover"); | 
						
						
							|  |     var to = intval($(this).data("rating")); | 
						
						
							|  |     $(".rating-stars a").removeClass("selected"); | 
						
						
							|  |     for(var i=1; i<=to; i++) { | 
						
						
							|  |       $(".rating-stars a[data-rating="+i+"]").addClass("hover").removeClass("selected"); | 
						
						
							|  |     } | 
						
						
							|  |     var description; | 
						
						
							|  |     switch(to) { | 
						
						
							|  |       case 1: | 
						
						
							|  |         description = "I hate it"; break; | 
						
						
							|  |       case 2: | 
						
						
							|  |         description = "I don't like it"; break; | 
						
						
							|  |       case 3: | 
						
						
							|  |         description = "It's okay"; break; | 
						
						
							|  |       case 4: | 
						
						
							|  |         description = "I like it"; break; | 
						
						
							|  |       case 5: | 
						
						
							|  |         description = "I love it!"; break; | 
						
						
							|  |     } | 
						
						
							|  |     $(".rating-stars .description").text(description); | 
						
						
							|  |     $(".rating-stars span").addClass("visible"); | 
						
						
							|  |   }); | 
						
						
							|  |   $(".rating-stars a").on("mouseout",function(){ | 
						
						
							|  |     $(this).removeClass("hover"); | 
						
						
							|  |   }); | 
						
						
							|  |   $(".rating-stars").on("mouseout",function(){ | 
						
						
							|  |     $(".rating-stars span").removeClass("visible"); | 
						
						
							|  |     $(".rating-stars a").removeClass("hover"); | 
						
						
							|  |     if(selectedRating) { | 
						
						
							|  |       for(var i=1; i<=selectedRating; i++) { | 
						
						
							|  |         $(".rating-stars a[data-rating="+i+"]").addClass("selected") | 
						
						
							|  |       } | 
						
						
							|  |     } | 
						
						
							|  |   }); | 
						
						
							|  |   $(".rating-stars a").on("click",function(){ | 
						
						
							|  |     selectedRating = intval($(this).data("rating")); | 
						
						
							|  |     $(".rating-stars a").removeClass("hover").removeClass("selected"); | 
						
						
							|  |     for(var i=1; i<=selectedRating; i++) { | 
						
						
							|  |       $(".rating-stars a[data-rating="+i+"]").addClass("selected") | 
						
						
							|  |     } | 
						
						
							|  |     $(".review-content").removeClass("hidden"); | 
						
						
							|  |     setSaveButtonState(); | 
						
						
							|  |     return false; | 
						
						
							|  |   }); | 
						
						
							|  |  | 
						
						
							|  |   $("#review_is_html").on("click", function(){ | 
						
						
							|  |     if($(this).attr("checked") == "checked") { | 
						
						
							|  |       userSelectedHTML = 1; | 
						
						
							|  |     } else { | 
						
						
							|  |       userSelectedHTML = -1; | 
						
						
							|  |     } | 
						
						
							|  |   }); | 
						
						
							|  |   $("#review_content").on("keyup", function(){ | 
						
						
							|  |     if(userSelectedHTML == null) { | 
						
						
							|  |       if(isHTML($(this).val())) { | 
						
						
							|  |         $("#review_is_html").attr("checked", "checked"); | 
						
						
							|  |       } else { | 
						
						
							|  |         $("#review_is_html").removeAttr("checked"); | 
						
						
							|  |       } | 
						
						
							|  |     } | 
						
						
							|  |     if($(this).val() != "") { | 
						
						
							|  |       $(".review-summary").removeClass("hidden"); | 
						
						
							|  |     } else { | 
						
						
							|  |       $(".review-summary").addClass("hidden"); | 
						
						
							|  |     } | 
						
						
							|  |  | 
						
						
							|  |     var scrollHeight = document.getElementById("review_content").scrollHeight; | 
						
						
							|  |     var currentHeight = parseInt($("#review_content").css("height")); | 
						
						
							|  |     if(Math.abs(scrollHeight - currentHeight) > 20) { | 
						
						
							|  |       $("#review_content").css("height", (scrollHeight+30)+"px"); | 
						
						
							|  |     } | 
						
						
							|  |   }); | 
						
						
							|  |  | 
						
						
							|  |   $("#item_name").on("keyup", setSaveButtonState); | 
						
						
							|  |   $("#item_url").on("keyup", setSaveButtonState); | 
						
						
							|  |  | 
						
						
							|  |   $("#btn_post").click(function(){ | 
						
						
							|  |     $("#btn_post").addClass("loading disabled").text("Working..."); | 
						
						
							|  |  | 
						
						
							|  |     var review = { | 
						
						
							|  |       item: [{ | 
						
						
							|  |               type: "h-product", | 
						
						
							|  |               properties: { | 
						
						
							|  |                 name: [$("#item_name").val()], | 
						
						
							|  |                 url: [$("#item_url").val()] | 
						
						
							|  |               } | 
						
						
							|  |             }], | 
						
						
							|  |       rating: [selectedRating], | 
						
						
							|  |     }; | 
						
						
							|  |     if($("#review_content").val() != "") { | 
						
						
							|  |       if($("#review_is_html").attr("checked") == "checked") { | 
						
						
							|  |         review["content"] = [{html: $("#review_content").val()}]; | 
						
						
							|  |       } else { | 
						
						
							|  |         review["content"] = [$("#review_content").val()]; | 
						
						
							|  |       } | 
						
						
							|  |     } | 
						
						
							|  |     if($("#review_summary").val() != "") { | 
						
						
							|  |       review["summary"] = [$("#review_summary").val()]; | 
						
						
							|  |     } | 
						
						
							|  |  | 
						
						
							|  |     $.post("/micropub/postjson", { | 
						
						
							|  |       data: JSON.stringify({ | 
						
						
							|  |         "type": "h-review", | 
						
						
							|  |         "properties": review | 
						
						
							|  |       }) | 
						
						
							|  |     }, function(response){ | 
						
						
							|  |       $("#btn_post").removeClass("loading disabled").text("Post Review"); | 
						
						
							|  |  | 
						
						
							|  |       if(response.location != false) { | 
						
						
							|  |         $("#post_success").removeClass('hidden'); | 
						
						
							|  |         $("#post_error").addClass('hidden'); | 
						
						
							|  |         $("#post_href").attr("href", response.location); | 
						
						
							|  |         $("#note_form").addClass("hidden"); | 
						
						
							|  |       } else { | 
						
						
							|  |         $("#post_success").addClass('hidden'); | 
						
						
							|  |         $("#post_error").removeClass('hidden'); | 
						
						
							|  |       } | 
						
						
							|  |  | 
						
						
							|  |     }); | 
						
						
							|  |     return false; | 
						
						
							|  |  | 
						
						
							|  |   }); | 
						
						
							|  |  | 
						
						
							|  | }); | 
						
						
							|  | </script>
 |