reserve.xhtml 7.49 KB
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:map="http://java.sun.com/jsf/composite/cditools/map"
	xmlns:tools="http://java.sun.com/jsf/composite/cditools"
	xmlns:c="http://java.sun.com/jsp/jstl/core"
	xmlns:p="http://primefaces.org/ui">


<h:body>

	<ui:composition template="#{sessionHandler.template}">
		<f:metadata>
			<f:event type="preRenderView"
				listener="#{ajaxMapView.initReserveMap()}" />
		</f:metadata>
		<ui:param name="thispage" value="page.place.placemap" />
		<ui:define name="content">
			<h:form>
				<p:remoteCommand name="updateWholePage" update="@all"
					action="#{ajaxMapView.initReserveMap()}" />
			</h:form>
			<p:dialog rendered="#{ajaxMapView.isMgmtPermission()}"
				visible="#{!empty ajaxMapView.place}" id="fbdiag">
				Clicked place name : #{ajaxMapView.place.name};
				<h:link rendered="#{!empty ajaxMapView.place}" outcome="/place/edit">
					<f:param name="placeid" value="#{ajaxMapView.place.id}" />
					Muokkaa
				</h:link>
			</p:dialog>

			<h:outputScript target="head" library="seatjs" name="d3.min.js" />
			<h:outputScript target="head" library="seatjs" name="d3-tip.js" />
			<h:outputScript target="head" library="seatjs" name="seatmap.js" />
			<h:outputStylesheet library="seatjs" name="placemap.css" />


			<ui:fragment rendered="#{layoutView.manageContent}">
				<h:link rendered="#{layoutView.manageContent}"
					styleClass="editorlink" value="Edit content for users in queue"
					outcome="/pages/manage">
					<f:param name="pagename" value="#{layoutView.pagepath}:inqueue" />
				</h:link>
				<br />

				<h:link rendered="#{layoutView.manageContent}"
					styleClass="editorlink"
					value="Edit content for user reserving places"
					outcome="/pages/manage">
					<f:param name="pagename" value="#{layoutView.pagepath}:reserving" />
				</h:link>
				<br />
			</ui:fragment>


			<ui:repeat var="cont1"
				rendered="#{ajaxMapView.queueEnabled and ajaxMapView.reserving}"
				value="#{menuView.getPagecontent('reserving')}">
				<h:outputText value="#{cont1.content}" escape="false" />
			</ui:repeat>



			<ui:repeat var="cont1"
				rendered="#{ajaxMapView.queueEnabled and not ajaxMapView.reserving}"
				value="#{menuView.getPagecontent('inqueue')}">
				<h:outputText value="#{cont1.content}" escape="false" />
			</ui:repeat>
			<br />
			<h3>
				<h:outputText value="#{i18n['mapView.yourPlaces']}" />
			</h3>

			<p:dataTable tableStyle="
					width: auto;" var="cnt"
				value="#{ajaxMapView.slotcount}">

				<p:column headerText="#{i18n['mapView.productcount.productname']}">
					<h:outputText value="#{cnt.product.name}" />
				</p:column>
				<p:column headerText="#{i18n['mapView.productcount.productcount']}">
					<h:outputText value="#{cnt.count}" />
				</p:column>
			</p:dataTable>
			<ui:fragment rendered="#{ajaxMapView.reserving}">
				<div style="margin: 5px;">
					<h:form id="placeselectform">
						<p:commandButton rendered="#{ajaxMapView.canUserBuy()}"
							value="#{i18n['mapView.buyPlaces']}"
							action="#{ajaxMapView.buySelectedPlaces()}" ajax="false" />
					</h:form>
				</div>
			</ui:fragment>



			<ui:fragment
				rendered="#{ajaxMapView.queueEnabled and not ajaxMapView.reserving}">
				<h3><h:outputText value="#{i18n['mapView.youAreInQueue']}" /></h3>
				<div style="margin: 1em;">
					<h:outputText value="#{i18n['mapView.queuePosition']}: " />
					<span id="queuepos" /><br />
					<h:outputText value=" #{i18n['mapView.queuePositionUpdated']}: " />
					<span id="queueupdated" /> <br />
				</div>
			</ui:fragment>


			<svg id="seatmap" style="margin: auto; border: 1px solid black;"
				width="#{ajaxMapView.map.width}px"
				height="#{ajaxMapView.map.height}px" />


			<script type="text/javascript">
			// Queue is enabled and we are reserving.
			var queueReserving = #{(ajaxMapView.queueEnabled and not ajaxMapView.reserving)?"true":"false"};

			
			function updateMap() {
				px.update();
				reloadQueue();
			}
			
		
			function reloadQueue(){
				if(queueReserving){
				$.getJSON("#{request.contextPath}/rest/placemap/v1/queue/#{ajaxMapView.map.id}/#{ajaxMapView.eventuser.id}")
					.done(function(data){ 
						updateQueue(data);
					} ).fail(function(){ 
						location.reload();
					});
				}
			}
			
			
			function updateQueue(data) {
				if(data === undefined) {
					alert('not in queue');
					return;
				}
				
				if(data.value == 0) {
					updateWholePage();
				} else {
					$("#queuepos").text(data.value);
					var d = new Date();
					$("#queueupdated").text(d.getHours() + ":" + d.getMinutes() + ":"+ d.getSeconds())
				}			
			}

			
			setInterval(function () { updateMap() }, 5000);

			var pageEscapeAlert = queueReserving;
			
			$().ready(function(){
				reloadQueue();
			});
			$(window).bind('beforeunload', function() {
				if(pageEscapeAlert) {
					alert("#{i18n['mapView.lockPlacesBeforeLeaving']}");
				}
			});
		
			
			</script>

			<script type="text/javascript">
			
			
			
			px = placemap({
					element : document.getElementById("seatmap"),
					moyaurl : "#{request.contextPath}",
					map_id : #{ajaxMapView.map.id},
					placereserve: true,
					onclick : function(d) {
						// px.update();
						//alert(d);
						// #{ajaxMapView.isMgmtPermission()?'placeClicker([{name: \'placeId\', value: d}])':''}
						return false;
					}
				});
//				document.getElementById("editbutton").addEventListener("click",
//						function() {
	//						px.enable_edit();
	//					});
				//px.enable_edit();

			</script>

			<h:panelGrid columns="3" cellpadding="10">
				<h:panelGrid columns="2">
					<div
						style="border-color: black; border-style: solid; border-width: 1px; background-color: grey; width: 10px; height: 10px;">&nbsp;</div>
					<h:outputText value="#{i18n['placeSelect.legend.grey']}" />
					<div
						style="border-color: black; border-style: solid; border-width: 1px; background-color: white; width: 10px; height: 10px;">&nbsp;</div>
					<h:outputText value="#{i18n['placeSelect.legend.white']}" />
					<div
						style="border-color: black; border-style: solid; border-width: 1px; background-color: red; width: 10px; height: 10px;">&nbsp;</div>
					<h:outputText value="#{i18n['placeSelect.legend.red']}" />
					<div
						style="border-color: black; border-style: solid; border-width: 1px; background-color: green; width: 10px; height: 10px;">&nbsp;</div>
					<h:outputText value="#{i18n['placeSelect.legend.green']}" />
					<div
						style="border-color: black; border-style: solid; border-width: 1px; background-color: blue; width: 10px; height: 10px;">&nbsp;</div>
					<h:outputText value="#{i18n['placeSelect.legend.blue']}" />
				</h:panelGrid>

				<h:panelGrid columnClasses=",rightalign" columns="2">
					<h:outputLabel value="#{i18n['placeSelect.totalPlaces']}:" />
					<h:outputText value="#{ajaxMapView.availablePlaces}" />

					<h:outputLabel value="#{i18n['placeSelect.placesleft']}:" />
					<h:outputText value="#{ajaxMapView.placesLeftToSelect}" />


				</h:panelGrid>

			</h:panelGrid>

			<ui:fragment rendered="#{ajaxMapView.reserving}">
				<div style="margin: 5px;">
					<h:form id="placeselectformBottom">
						<p:commandButton rendered="#{ajaxMapView.canUserBuy()}"
							value="#{i18n['mapView.buyPlaces']}"
							action="#{ajaxMapView.buySelectedPlaces()}" ajax="false" />
					</h:form>
				</div>
			</ui:fragment>
		</ui:define>
	</ui:composition>
</h:body>
</html>