Work on Qr Scanner check-in
Work on global JS Minor tweaks and fixes
This commit is contained in:
parent
a2918af55b
commit
3ef62fd8a2
|
|
@ -7,6 +7,7 @@ use App\Models\Attendee;
|
|||
use App\Models\Event;
|
||||
use Carbon\Carbon;
|
||||
use DB;
|
||||
use JavaScript;
|
||||
|
||||
class EventCheckInController extends MyBaseController
|
||||
{
|
||||
|
|
@ -19,10 +20,17 @@ class EventCheckInController extends MyBaseController
|
|||
public function showCheckIn($event_id)
|
||||
{
|
||||
|
||||
$event = Event::scope()->findOrFail($event_id);
|
||||
|
||||
$data['event'] = Event::scope()->findOrFail($event_id);
|
||||
$data['attendees'] = $data['event']->attendees;
|
||||
$data = [
|
||||
'event' => $event,
|
||||
'attendees' => $event->attendees
|
||||
];
|
||||
|
||||
JavaScript::put([
|
||||
'qrcodeCheckInRoute' => route('postQRCodeCheckInAttendee', ['event_id' => $event->id]),
|
||||
'checkInRoute' => route('postCheckInSearch', ['event_id' => $event->id])
|
||||
]);
|
||||
|
||||
return view('ManageEvent.CheckIn', $data);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,31 +5,36 @@ namespace App\Http\Controllers;
|
|||
use App\Models\Event;
|
||||
|
||||
use App\Models\Organiser;
|
||||
use Auth;
|
||||
use JavaScript;
|
||||
use View;
|
||||
|
||||
|
||||
class MyBaseController extends Controller
|
||||
{
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
/*
|
||||
* Set up JS across all views
|
||||
*/
|
||||
JavaScript::put([
|
||||
'User' => [
|
||||
'full_name' => Auth::user()->full_name,
|
||||
'email' => Auth::user()->email,
|
||||
'is_confirmed' => Auth::user()->is_confirmed,
|
||||
],
|
||||
'DateFormat' =>'dd-MM-yyyy',
|
||||
'DateTimeFormat' => 'dd-MM-yyyy hh:mm',
|
||||
'GenericErrorMessage' => 'Whoops!, An unknown error has occurred. Please try again or contact support if the problem persists.'
|
||||
]);
|
||||
|
||||
/*
|
||||
* Share the organizers across all views
|
||||
*/
|
||||
View::share('organisers', Organiser::scope()->get());
|
||||
}
|
||||
|
||||
/**
|
||||
* Setup the layout used by the controller.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
protected function setupLayout()
|
||||
{
|
||||
if (!is_null($this->layout)) {
|
||||
$this->layout = View::make($this->layout);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns data which is required in each view, optionally combined with additional data.
|
||||
*
|
||||
|
|
@ -47,4 +52,16 @@ class MyBaseController extends Controller
|
|||
'questions' => $event->questions()->get(),
|
||||
], $additional_data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Setup the layout used by the controller.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
protected function setupLayout()
|
||||
{
|
||||
if (!is_null($this->layout)) {
|
||||
$this->layout = View::make($this->layout);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -133,6 +133,16 @@ class User extends Model implements AuthenticatableContract, CanResetPasswordCon
|
|||
return 'remember_token';
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the full name of the user.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getFullNameAttribute()
|
||||
{
|
||||
return $this->first_name.' '.$this->last_name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Boot all of the bootable traits on the model.
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -1,10 +1,3 @@
|
|||
window.Attendize = {
|
||||
DateFormat: 'dd-MM-yyyy',
|
||||
DateTimeFormat: 'dd-MM-yyyy hh:mm',
|
||||
GenericErrorMessage: 'Whoops!, An unknown error has occurred.'
|
||||
+ 'Please try again or contact support if the problem persists. '
|
||||
};
|
||||
|
||||
$(function () {
|
||||
|
||||
/*
|
||||
|
|
@ -13,7 +6,7 @@ $(function () {
|
|||
* --------------------------
|
||||
*/
|
||||
|
||||
/* Datepciker */
|
||||
/* Datepicker */
|
||||
$(document).ajaxComplete(function () {
|
||||
$('#DatePicker').remove();
|
||||
var $div = $("<div>", {id: "DatePicker"});
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1,282 @@
|
|||
/**
|
||||
* @todo Refactor this
|
||||
*/
|
||||
|
||||
var workingAway = false;
|
||||
var canvasContext = null;
|
||||
var c = 0;
|
||||
var stype = 0;
|
||||
var gUM = false;
|
||||
var webkit = false;
|
||||
var moz = false;
|
||||
var theVideo = null;
|
||||
var QrTimeout = null;
|
||||
var beepSound = new Audio('/mp3/beep.mp3');
|
||||
var vidhtml = '<video id="ScanVideo" autoplay></video>';
|
||||
|
||||
|
||||
$(document).ready(function() {
|
||||
|
||||
search();
|
||||
|
||||
$('input#search').focus();
|
||||
|
||||
$(document.body).on('click', '.at', function(e) {
|
||||
|
||||
if ($(this).hasClass('working')) {
|
||||
return false;
|
||||
}
|
||||
|
||||
var hasArrived = $(this).hasClass('arrived'),
|
||||
attendeeId = $(this).data('id'),
|
||||
checking = hasArrived ? 'out' : 'in',
|
||||
$this = $(this),
|
||||
$icon = $('i', $this);
|
||||
|
||||
|
||||
$this.addClass("working");
|
||||
$icon.removeClass('ico-checkmark').addClass('ico-busy');
|
||||
|
||||
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: "{{route('postCheckInAttendee', ['event_id' => $event->id])}}",
|
||||
data: {
|
||||
attendee_id: attendeeId,
|
||||
has_arrived: hasArrived ? 1 : 0,
|
||||
checking: checking
|
||||
},
|
||||
cache: false,
|
||||
success: function(data) {
|
||||
|
||||
if (data.status === 'success' || data.status === 'error') {
|
||||
|
||||
if (data.checked === 'in') {
|
||||
$this.addClass('arrived').removeClass('not_arrived');
|
||||
} else if (data.checked === 'out') {
|
||||
$this.removeClass('arrived').addClass('not_arrived');
|
||||
}
|
||||
|
||||
if (data.status === 'error') {
|
||||
alert(data.message);
|
||||
}
|
||||
|
||||
} else {
|
||||
alert('An unknown error has occured. Please try again.');
|
||||
}
|
||||
|
||||
$icon.addClass('ico-checkmark').removeClass('ico-busy');
|
||||
$this.removeClass('working');
|
||||
}
|
||||
}, 'json');
|
||||
e.preventDefault();
|
||||
});
|
||||
|
||||
$('.clearSearch').on('click', function() {
|
||||
$("input#search").val('').focus();
|
||||
$(this).fadeOut();
|
||||
search();
|
||||
});
|
||||
|
||||
|
||||
$('.qr_search').on('click', function(e) {
|
||||
$('#QrModal').modal('show');
|
||||
loadQrReader();
|
||||
});
|
||||
|
||||
$('.startScanner').on('click', function(e) {
|
||||
e.preventDefault();
|
||||
loadQrReader();
|
||||
});
|
||||
|
||||
$( window ).resize(resizeVideo);
|
||||
|
||||
$("input#search").on("keyup", function(e) {
|
||||
clearTimeout($.data(this, 'timer'));
|
||||
var search_string = $(this).val();
|
||||
if (search_string === '') {
|
||||
$('.attendees_title').html('All Attendees');
|
||||
$(this).data('timer', setTimeout(search, 100));
|
||||
$('.clearSearch').fadeOut();
|
||||
} else {
|
||||
$('.attendees_title').html('Results for<b>: ' + search_string + '</b>');
|
||||
$(this).data('timer', setTimeout(search, 500));
|
||||
$('.clearSearch').fadeIn();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
function populateAttendeeList(attendees) {
|
||||
$('#attendee_list').empty();
|
||||
|
||||
if (jQuery.isEmptyObject(attendees)) {
|
||||
$('#attendee_list').html('There are no results.');
|
||||
} else {
|
||||
for (i in attendees) {
|
||||
$('#attendee_list').append('<li id="a_' + attendees[i].id + '" class="' + (attendees[i].has_arrived == '1' ? 'arrived' : 'not_arrived') + ' at list-group-item" data-id="' + attendees[i].id + '">'
|
||||
+ 'Name: <b>' + attendees[i].first_name + ' '
|
||||
+ attendees[i].last_name
|
||||
+ ' </b><br>Reference: <b>' + attendees[i].reference + '</b>'
|
||||
+ ' <br>Ticket: <b>' + attendees[i].ticket + '</b>'
|
||||
+ '<a href="" class="ci btn btn-successfulQrRead"><i class="ico-checkmark"></i></a> '
|
||||
+ '</li>');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function search() {
|
||||
var query_value = $('input#search').val();
|
||||
|
||||
if(workingAway) {
|
||||
return;
|
||||
}
|
||||
workingAway = true;
|
||||
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: Attendize.checkInRoute,
|
||||
data: {q: query_value},
|
||||
cache: false,
|
||||
error: function() {
|
||||
workingAway = false;
|
||||
},
|
||||
success: function(attendees) {
|
||||
if (query_value !== '') {
|
||||
$('.attendees_title').html('Results for<b>: ' + query_value + '</b>');
|
||||
} else {
|
||||
$('.attendees_title').html('All Attendees');
|
||||
}
|
||||
|
||||
workingAway = false;
|
||||
populateAttendeeList(attendees);
|
||||
}
|
||||
}, 'json');
|
||||
return false;
|
||||
}
|
||||
|
||||
// QRCODE reader Copyright 2011 Lazar Laszlo
|
||||
// http://www.webqr.com
|
||||
|
||||
function resizeVideo() {
|
||||
var $videoWrapper = $('#ScanVideoOutter');
|
||||
var $video = $('#ScanVideo');
|
||||
|
||||
$video.height($videoWrapper.height());
|
||||
$video.width($videoWrapper.width());
|
||||
}
|
||||
|
||||
function captureToCanvas() {
|
||||
if(stype!=1)
|
||||
return;
|
||||
if(gUM)
|
||||
{
|
||||
try{
|
||||
canvasContext.drawImage(theVideo,0,0);
|
||||
try{
|
||||
qrcode.decode();
|
||||
}
|
||||
catch(e){
|
||||
console.log(e);
|
||||
QrTimeout = setTimeout(captureToCanvas, 500);
|
||||
};
|
||||
}
|
||||
catch(e){
|
||||
console.log(e);
|
||||
QrTimeout = setTimeout(captureToCanvas, 500);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function htmlEntities(str) {
|
||||
return String(str).replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"');
|
||||
}
|
||||
|
||||
function read(qrcode_token)
|
||||
{
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: Attendize.qrcodeCheckInRoute,
|
||||
data: {qrcode_token: htmlEntities(qrcode_token)},
|
||||
cache: false,
|
||||
complete: function(){
|
||||
beepSound.play();
|
||||
},
|
||||
error: function() {
|
||||
showMessage('Something has gone wrong. Please try again.');
|
||||
},
|
||||
success: function(response) {
|
||||
$('#ScanResult').html("<b>" + response.message +"</b>");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
function successfulQrRead(stream) {
|
||||
if(webkit)
|
||||
theVideo.src = window.URL.createObjectURL(stream);
|
||||
else if(moz)
|
||||
{
|
||||
theVideo.mozSrcObject = stream;
|
||||
theVideo.play();
|
||||
}
|
||||
else {
|
||||
theVideo.src = stream;
|
||||
}
|
||||
|
||||
gUM=true;
|
||||
QrTimeout = setTimeout(captureToCanvas, 500);
|
||||
}
|
||||
|
||||
function error(error) {
|
||||
gUM=false;
|
||||
return;
|
||||
}
|
||||
|
||||
function loadQrReader()
|
||||
{
|
||||
|
||||
var $canvas = $('#QrCanvas');
|
||||
|
||||
$canvas.height('300px');
|
||||
$canvas.width('600px');
|
||||
|
||||
canvasContext = $canvas[0].getContext('2d');
|
||||
canvasContext.clearRect(0, 0, 600, 300);
|
||||
qrcode.callback = read;
|
||||
|
||||
$('#ScanResult').html('<div id="scanning-ellipsis">Scanning<span>.</span><span>.</span><span>.</span></div>');
|
||||
if(stype==1)
|
||||
{
|
||||
clearTimeout(QrTimeout);
|
||||
QrTimeout = setTimeout(captureToCanvas, 500);
|
||||
return;
|
||||
}
|
||||
|
||||
$('#ScanVideoOutter').html(vidhtml);
|
||||
theVideo = $("#ScanVideo")[0];
|
||||
|
||||
if(navigator.getUserMedia)
|
||||
{
|
||||
navigator.getUserMedia({video: true, audio: false}, successfulQrRead, error);
|
||||
} else if(navigator.webkitGetUserMedia)
|
||||
{
|
||||
webkit=true;
|
||||
navigator.webkitGetUserMedia({video:true, audio: false}, successfulQrRead, error);
|
||||
}
|
||||
else if(navigator.mediaDevices.getUserMedia)
|
||||
{
|
||||
moz=true;
|
||||
navigator.mozGetUserMedia({video: true, audio: false}, successfulQrRead, error);
|
||||
}
|
||||
else if(navigator.mozGetUserMedia)
|
||||
{
|
||||
moz=true;
|
||||
navigator.mozGetUserMedia({video: true, audio: false}, successfulQrRead, error);
|
||||
}
|
||||
|
||||
stype=1;
|
||||
QrTimeout = setTimeout(captureToCanvas, 500);
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,371 @@
|
|||
::-webkit-input-placeholder { /* WebKit browsers */
|
||||
}
|
||||
:-moz-placeholder { /* Mozilla Firefox 4 to 18 */
|
||||
opacity: 1;
|
||||
}
|
||||
::-moz-placeholder { /* Mozilla Firefox 19+ */
|
||||
opacity: 1;
|
||||
}
|
||||
:-ms-input-placeholder { /* Internet Explorer 10+ */
|
||||
}
|
||||
|
||||
|
||||
body {
|
||||
background-color: #0384a6;
|
||||
}
|
||||
|
||||
.attendeeList .container {
|
||||
background: #fff;
|
||||
margin-bottom: 50px;
|
||||
padding-top: 10px;
|
||||
}
|
||||
|
||||
.attendeeList .container .attendee_list {
|
||||
padding: 15px;
|
||||
padding-top: 0;
|
||||
}
|
||||
|
||||
|
||||
.attendeeList .container .attendee_list .attendees_title {
|
||||
margin: 10px 0 20px 0;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
header {
|
||||
background-color: #FFF;
|
||||
padding: 10px 0;
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
z-index: 200;
|
||||
}
|
||||
|
||||
header .menuToggle {
|
||||
position: absolute;
|
||||
left: 15px;
|
||||
color: #ccc;
|
||||
text-align: center;
|
||||
font-size: 30px;
|
||||
}
|
||||
|
||||
section.attendeeList {
|
||||
margin-top: 80px;
|
||||
}
|
||||
|
||||
.attendee_search {
|
||||
font-size: 16px;
|
||||
margin-bottom: 0;
|
||||
border: none;
|
||||
height: 40px;
|
||||
}
|
||||
|
||||
.qr_search {
|
||||
height: 40px;
|
||||
background: #FFF;
|
||||
color: #000;
|
||||
font-size: 25px;
|
||||
border: none;
|
||||
border-right: 1px solid #999;
|
||||
}
|
||||
|
||||
.clearSearch {
|
||||
position: absolute;
|
||||
top: 8px;
|
||||
right: 25px;
|
||||
font-size: 24px;
|
||||
cursor: pointer;
|
||||
display: none;
|
||||
}
|
||||
|
||||
.at {
|
||||
position: relative;
|
||||
padding-left: 70px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.at:active {
|
||||
background-color: #f9f9f9 !important;
|
||||
}
|
||||
|
||||
.at .ci {
|
||||
position: absolute;
|
||||
left: 15px;
|
||||
top: 20px;
|
||||
color: white;
|
||||
border: none;
|
||||
border-radius: 150px;
|
||||
padding: 10px;
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
line-height: 20px;
|
||||
}
|
||||
|
||||
.at.arrived {
|
||||
background-color: #E6FFE7;
|
||||
}
|
||||
.at.not_arrived .ci {
|
||||
background-color: #fafafa;
|
||||
|
||||
}
|
||||
.at.arrived .ci {
|
||||
background-color: #36F158;
|
||||
}
|
||||
|
||||
footer {
|
||||
background-color: #333;
|
||||
height: 50px;
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
left: 0;
|
||||
}
|
||||
|
||||
.modal-dialog {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.modal-content {
|
||||
height: auto;
|
||||
min-height: 100%;
|
||||
border-radius: 0;
|
||||
}
|
||||
.modal-footer {
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
bottom: 0;
|
||||
}
|
||||
|
||||
.modal-body {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
|
||||
/* Small Devices, Tablets */
|
||||
|
||||
@media (min-width: 100px) and (max-width: 767px) {
|
||||
|
||||
header {
|
||||
border-bottom: 1px solid #ddd;
|
||||
}
|
||||
|
||||
section.attendeeList {
|
||||
margin-top: 60px;
|
||||
}
|
||||
|
||||
section.attendeeList .container {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
section.attendeeList .col-md-12 {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
section.attendeeList .attendees_title {
|
||||
padding-left: 10px;
|
||||
}
|
||||
|
||||
section.attendeeList .container .attendee_list {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.list-group-item:first-child {
|
||||
border-top-right-radius: 0px;
|
||||
border-top-left-radius: 0px;
|
||||
}
|
||||
|
||||
.at {
|
||||
position: relative;
|
||||
padding-left: 70px;
|
||||
cursor: pointer;
|
||||
border-left: none;
|
||||
border-right: none;
|
||||
border-radius: 0;
|
||||
}
|
||||
}
|
||||
#ScanResult {
|
||||
width: 90%;
|
||||
}
|
||||
|
||||
#ScanVideoOutter {
|
||||
min-width: 100%;
|
||||
min-height: 300px;
|
||||
position: relative;
|
||||
background: #999;
|
||||
}
|
||||
|
||||
#ScanVideo {
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
height:100%;
|
||||
min-height:250px;
|
||||
min-width: 250px !important;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
}
|
||||
|
||||
#qr-file {
|
||||
|
||||
}
|
||||
|
||||
#QrCanvas{
|
||||
display:none;
|
||||
}
|
||||
|
||||
#help-text{
|
||||
z-index: 9999999999;
|
||||
position: relative;
|
||||
color: #00AEFB;
|
||||
top: 0;
|
||||
}
|
||||
|
||||
#imghelp{
|
||||
position:relative;
|
||||
left:0px;
|
||||
top:-160px;
|
||||
z-index:100;
|
||||
background:#f2f2f2;
|
||||
margin-left:35px;
|
||||
margin-right:35px;
|
||||
padding-top:15px;
|
||||
padding-bottom:15px;
|
||||
border-radius:20px;
|
||||
}
|
||||
|
||||
|
||||
#ScanResult {
|
||||
transition: background 0.4s ease-in-out;
|
||||
width: 100%;
|
||||
border: none;
|
||||
border-bottom: 1px solid #ccc;
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
/* Mobile */
|
||||
/*@media only screen and (max-width: 480px) {*/
|
||||
/*#ScanResult {*/
|
||||
/*width: 90%;*/
|
||||
/*}*/
|
||||
|
||||
/*#ScanVideoOutter {*/
|
||||
/*min-width: 100%;*/
|
||||
/*max-width: 100%;*/
|
||||
/*position: relative;*/
|
||||
/*}*/
|
||||
|
||||
/*#ScanVideo {*/
|
||||
/*position: absolute;*/
|
||||
/*width: 100%;*/
|
||||
/*height:100%;*/
|
||||
/*top: 0;*/
|
||||
/*left: 0;*/
|
||||
/*right: 0;*/
|
||||
/*}*/
|
||||
|
||||
/*#help-text{*/
|
||||
/*top: -35px;*/
|
||||
/*}*/
|
||||
|
||||
/*#qrfile{*/
|
||||
/*width: 300px;*/
|
||||
/*}*/
|
||||
|
||||
|
||||
/*}*/
|
||||
|
||||
|
||||
@-webkit-keyframes opacity {
|
||||
0% {
|
||||
filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);
|
||||
opacity: 1;
|
||||
}
|
||||
100% {
|
||||
filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@-moz-keyframes opacity {
|
||||
0% {
|
||||
filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
100% {
|
||||
filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@-webkit-keyframes opacity {
|
||||
0% {
|
||||
filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);
|
||||
opacity: 1;
|
||||
}
|
||||
100% {
|
||||
filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@-moz-keyframes opacity {
|
||||
0% {
|
||||
filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);
|
||||
opacity: 1;
|
||||
}
|
||||
100% {
|
||||
filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@-o-keyframes opacity {
|
||||
0% {
|
||||
filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);
|
||||
opacity: 1;
|
||||
}
|
||||
100% {
|
||||
filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes opacity {
|
||||
0% {
|
||||
filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);
|
||||
opacity: 1;
|
||||
}
|
||||
100% {
|
||||
filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
#scanning-ellipsis span {
|
||||
-webkit-animation-name: opacity;
|
||||
-webkit-animation-duration: 1s;
|
||||
-webkit-animation-iteration-count: infinite;
|
||||
-moz-animation-name: opacity;
|
||||
-moz-animation-duration: 1s;
|
||||
-moz-animation-iteration-count: infinite;
|
||||
-ms-animation-name: opacity;
|
||||
-ms-animation-duration: 1s;
|
||||
-ms-animation-iteration-count: infinite;
|
||||
}
|
||||
#scanning-ellipsis span:nth-child(2) {
|
||||
-webkit-animation-delay: 100ms;
|
||||
-moz-animation-delay: 100ms;
|
||||
-ms-animation-delay: 100ms;
|
||||
-o-animation-delay: 100ms;
|
||||
animation-delay: 100ms;
|
||||
}
|
||||
#scanning-ellipsis span:nth-child(3) {
|
||||
-webkit-animation-delay: 300ms;
|
||||
-moz-animation-delay: 300ms;
|
||||
-ms-animation-delay: 300ms;
|
||||
-o-animation-delay: 300ms;
|
||||
animation-delay: 300ms;
|
||||
}
|
||||
|
|
@ -6,8 +6,10 @@
|
|||
</title>
|
||||
|
||||
{!! HTML::style('assets/stylesheet/application.css') !!}
|
||||
{!! HTML::style('assets/stylesheet/check_in.css') !!}
|
||||
{!! HTML::script('vendor/jquery/jquery.js') !!}
|
||||
|
||||
@include('Shared/Layouts/ViewJavascript')
|
||||
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0">
|
||||
|
||||
<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
|
||||
|
|
@ -26,340 +28,8 @@
|
|||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
<style>
|
||||
|
||||
::-webkit-input-placeholder { /* WebKit browsers */
|
||||
}
|
||||
:-moz-placeholder { /* Mozilla Firefox 4 to 18 */
|
||||
opacity: 1;
|
||||
}
|
||||
::-moz-placeholder { /* Mozilla Firefox 19+ */
|
||||
opacity: 1;
|
||||
}
|
||||
:-ms-input-placeholder { /* Internet Explorer 10+ */
|
||||
}
|
||||
|
||||
|
||||
body {
|
||||
background-color: #0384a6;
|
||||
}
|
||||
|
||||
.attendeeList .container {
|
||||
background: #fff;
|
||||
margin-bottom: 50px;
|
||||
padding-top: 10px;
|
||||
}
|
||||
|
||||
.attendeeList .container .attendee_list {
|
||||
padding: 15px;
|
||||
padding-top: 0;
|
||||
}
|
||||
|
||||
|
||||
.attendeeList .container .attendee_list .attendees_title {
|
||||
margin: 10px 0 20px 0;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
header {
|
||||
background-color: #FFF;
|
||||
padding: 10px 0;
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
z-index: 200;
|
||||
}
|
||||
|
||||
header .menuToggle {
|
||||
position: absolute;
|
||||
left: 15px;
|
||||
color: #ccc;
|
||||
text-align: center;
|
||||
font-size: 30px;
|
||||
}
|
||||
|
||||
section.attendeeList {
|
||||
margin-top: 80px;
|
||||
}
|
||||
|
||||
.attendee_search {
|
||||
font-size: 16px;
|
||||
margin-bottom: 0;
|
||||
border: none;
|
||||
height: 40px;
|
||||
}
|
||||
|
||||
.qr_search {
|
||||
height: 40px;
|
||||
background: #FFF;
|
||||
color: #000;
|
||||
font-size: 25px;
|
||||
border: none;
|
||||
border-right: 1px solid #999;
|
||||
}
|
||||
|
||||
.clearSearch {
|
||||
position: absolute;
|
||||
top: 8px;
|
||||
right: 25px;
|
||||
font-size: 24px;
|
||||
cursor: pointer;
|
||||
display: none;
|
||||
}
|
||||
|
||||
.at {
|
||||
position: relative;
|
||||
padding-left: 70px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.at:active {
|
||||
background-color: #f9f9f9 !important;
|
||||
}
|
||||
|
||||
.at .ci {
|
||||
position: absolute;
|
||||
left: 15px;
|
||||
top: 20px;
|
||||
color: white;
|
||||
border: none;
|
||||
border-radius: 150px;
|
||||
padding: 10px;
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
line-height: 20px;
|
||||
}
|
||||
|
||||
.at.arrived {
|
||||
background-color: #E6FFE7;
|
||||
}
|
||||
.at.not_arrived .ci {
|
||||
background-color: #fafafa;
|
||||
|
||||
}
|
||||
.at.arrived .ci {
|
||||
background-color: #36F158;
|
||||
}
|
||||
|
||||
footer {
|
||||
background-color: #333;
|
||||
height: 50px;
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
left: 0;
|
||||
}
|
||||
|
||||
.modal-dialog {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.modal-content {
|
||||
height: auto;
|
||||
min-height: 100%;
|
||||
border-radius: 0;
|
||||
}
|
||||
.modal-footer {
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
bottom: 0;
|
||||
}
|
||||
|
||||
.modal-body {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
|
||||
/* Small Devices, Tablets */
|
||||
|
||||
@media (min-width: 100px) and (max-width: 767px) {
|
||||
|
||||
header {
|
||||
border-bottom: 1px solid #ddd;
|
||||
}
|
||||
|
||||
section.attendeeList {
|
||||
margin-top: 60px;
|
||||
}
|
||||
|
||||
section.attendeeList .container {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
section.attendeeList .col-md-12 {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
section.attendeeList .attendees_title {
|
||||
padding-left: 10px;
|
||||
}
|
||||
|
||||
section.attendeeList .container .attendee_list {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.list-group-item:first-child {
|
||||
border-top-right-radius: 0px;
|
||||
border-top-left-radius: 0px;
|
||||
}
|
||||
|
||||
.at {
|
||||
position: relative;
|
||||
padding-left: 70px;
|
||||
cursor: pointer;
|
||||
border-left: none;
|
||||
border-right: none;
|
||||
border-radius: 0;
|
||||
}
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
<script>
|
||||
|
||||
var workingAway = false;
|
||||
|
||||
function populateAttendeeList(attendees) {
|
||||
$('#attendee_list').empty();
|
||||
|
||||
if (jQuery.isEmptyObject(attendees)) {
|
||||
$('#attendee_list').html('There are no results.');
|
||||
} else {
|
||||
for (i in attendees) {
|
||||
$('#attendee_list').append('<li id="a_' + attendees[i].id + '" class="' + (attendees[i].has_arrived == '1' ? 'arrived' : 'not_arrived') + ' at list-group-item" data-id="' + attendees[i].id + '">'
|
||||
+ 'Name: <b>' + attendees[i].first_name + ' '
|
||||
+ attendees[i].last_name
|
||||
+ ' </b><br>Reference: <b>' + attendees[i].reference + '</b>'
|
||||
+ ' <br>Ticket: <b>' + attendees[i].ticket + '</b>'
|
||||
+ '<a href="" class="ci btn btn-successfulQrRead"><i class="ico-checkmark"></i></a> '
|
||||
+ '</li>');
|
||||
}
|
||||
}
|
||||
}
|
||||
function search() {
|
||||
var query_value = $('input#search').val();
|
||||
|
||||
if(workingAway) {
|
||||
return;
|
||||
}
|
||||
workingAway = true;
|
||||
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: "{{route('postCheckInSearch', ['event_id' => $event->id])}}",
|
||||
data: {q: query_value},
|
||||
cache: false,
|
||||
error: function() {
|
||||
workingAway = false;
|
||||
},
|
||||
success: function(attendees) {
|
||||
if (query_value !== '') {
|
||||
$('.attendees_title').html('Results for<b>: ' + query_value + '</b>');
|
||||
} else {
|
||||
$('.attendees_title').html('All Attendees');
|
||||
}
|
||||
|
||||
workingAway = false;
|
||||
populateAttendeeList(attendees);
|
||||
}
|
||||
}, 'json');
|
||||
return false;
|
||||
}
|
||||
|
||||
$(document).ready(function() {
|
||||
|
||||
search();
|
||||
|
||||
$('input#search').focus();
|
||||
|
||||
$(document.body).on('click', '.at', function(e) {
|
||||
|
||||
if ($(this).hasClass('working')) {
|
||||
return false;
|
||||
}
|
||||
|
||||
var hasArrived = $(this).hasClass('arrived'),
|
||||
attendeeId = $(this).data('id'),
|
||||
checking = hasArrived ? 'out' : 'in',
|
||||
$this = $(this),
|
||||
$icon = $('i', $this);
|
||||
|
||||
|
||||
$this.addClass("working");
|
||||
$icon.removeClass('ico-checkmark').addClass('ico-busy');
|
||||
|
||||
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: "{{route('postCheckInAttendee', ['event_id' => $event->id])}}",
|
||||
data: {
|
||||
attendee_id: attendeeId,
|
||||
has_arrived: hasArrived ? 1 : 0,
|
||||
checking: checking
|
||||
},
|
||||
cache: false,
|
||||
success: function(data) {
|
||||
|
||||
if (data.status === 'success' || data.status === 'error') {
|
||||
|
||||
if (data.checked === 'in') {
|
||||
$this.addClass('arrived').removeClass('not_arrived');
|
||||
} else if (data.checked === 'out') {
|
||||
$this.removeClass('arrived').addClass('not_arrived');
|
||||
}
|
||||
|
||||
if (data.status === 'error') {
|
||||
alert(data.message);
|
||||
}
|
||||
|
||||
} else {
|
||||
alert('An unknown error has occured. Please try again.');
|
||||
}
|
||||
|
||||
$icon.addClass('ico-checkmark').removeClass('ico-busy');
|
||||
$this.removeClass('working');
|
||||
}
|
||||
}, 'json');
|
||||
e.preventDefault();
|
||||
});
|
||||
|
||||
$('.clearSearch').on('click', function() {
|
||||
$("input#search").val('').focus();
|
||||
$(this).fadeOut();
|
||||
search();
|
||||
});
|
||||
|
||||
|
||||
$('.qr_search').on('click', function(e) {
|
||||
$('#QrModal').modal('show');
|
||||
loadQrReader();
|
||||
});
|
||||
|
||||
$("input#search").on("keyup", function(e) {
|
||||
clearTimeout($.data(this, 'timer'));
|
||||
var search_string = $(this).val();
|
||||
if (search_string === '') {
|
||||
$('.attendees_title').html('All Attendees');
|
||||
$(this).data('timer', setTimeout(search, 100));
|
||||
$('.clearSearch').fadeOut();
|
||||
} else {
|
||||
$('.attendees_title').html('Results for<b>: ' + search_string + '</b>');
|
||||
$(this).data('timer', setTimeout(search, 500));
|
||||
$('.clearSearch').fadeIn();
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<header>
|
||||
<div class="menuToggle hide">
|
||||
<i class="ico-menu"></i>
|
||||
|
|
@ -442,8 +112,8 @@
|
|||
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
{!! Form::button('Close Scanner', ['class'=>"btn modal-close btn-danger",'data-dismiss'=>'modal']) !!}
|
||||
<a class="btn btn-primary" onclick="event.preventDefault(); workingAway = false; loadQrReader();" href="{{ Request::url() }}"><i class="fa fa-refresh"></i> Scan another ticket</a>
|
||||
{!! Form::button('Close', ['class'=>"btn modal-close btn-danger",'data-dismiss'=>'modal']) !!}
|
||||
<a class="btn btn-primary startScanner" href="javascript:void(0);"><i class="fa fa-refresh"></i> Scan another ticket</a>
|
||||
|
||||
</div>
|
||||
</div><!-- /end modal content-->
|
||||
|
|
@ -453,343 +123,8 @@
|
|||
|
||||
|
||||
{!! HTML::script('vendor/qrcode-scan/llqrcode.js') !!}
|
||||
|
||||
<style>
|
||||
|
||||
#ScanResult {
|
||||
width: 90%;
|
||||
}
|
||||
|
||||
#ScanVideoOutter {
|
||||
min-width: 100%;
|
||||
min-height: 300px;
|
||||
position: relative;
|
||||
background: #999;
|
||||
}
|
||||
|
||||
#ScanVideo {
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
height:100%;
|
||||
min-height:250px;
|
||||
min-width: 250px !important;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
}
|
||||
|
||||
#qr-file {
|
||||
|
||||
}
|
||||
|
||||
#QrCanvas{
|
||||
display:none;
|
||||
}
|
||||
|
||||
#help-text{
|
||||
z-index: 9999999999;
|
||||
position: relative;
|
||||
color: #00AEFB;
|
||||
top: 0;
|
||||
}
|
||||
|
||||
#imghelp{
|
||||
position:relative;
|
||||
left:0px;
|
||||
top:-160px;
|
||||
z-index:100;
|
||||
background:#f2f2f2;
|
||||
margin-left:35px;
|
||||
margin-right:35px;
|
||||
padding-top:15px;
|
||||
padding-bottom:15px;
|
||||
border-radius:20px;
|
||||
}
|
||||
|
||||
|
||||
#ScanResult {
|
||||
transition: background 0.4s ease-in-out;
|
||||
width: 100%;
|
||||
border: none;
|
||||
border-bottom: 1px solid #ccc;
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
/* Mobile */
|
||||
/*@media only screen and (max-width: 480px) {*/
|
||||
/*#ScanResult {*/
|
||||
/*width: 90%;*/
|
||||
/*}*/
|
||||
|
||||
/*#ScanVideoOutter {*/
|
||||
/*min-width: 100%;*/
|
||||
/*max-width: 100%;*/
|
||||
/*position: relative;*/
|
||||
/*}*/
|
||||
|
||||
/*#ScanVideo {*/
|
||||
/*position: absolute;*/
|
||||
/*width: 100%;*/
|
||||
/*height:100%;*/
|
||||
/*top: 0;*/
|
||||
/*left: 0;*/
|
||||
/*right: 0;*/
|
||||
/*}*/
|
||||
|
||||
/*#help-text{*/
|
||||
/*top: -35px;*/
|
||||
/*}*/
|
||||
|
||||
/*#qrfile{*/
|
||||
/*width: 300px;*/
|
||||
/*}*/
|
||||
|
||||
|
||||
/*}*/
|
||||
|
||||
|
||||
@-webkit-keyframes opacity {
|
||||
0% {
|
||||
filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);
|
||||
opacity: 1;
|
||||
}
|
||||
100% {
|
||||
filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@-moz-keyframes opacity {
|
||||
0% {
|
||||
filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
100% {
|
||||
filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@-webkit-keyframes opacity {
|
||||
0% {
|
||||
filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);
|
||||
opacity: 1;
|
||||
}
|
||||
100% {
|
||||
filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@-moz-keyframes opacity {
|
||||
0% {
|
||||
filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);
|
||||
opacity: 1;
|
||||
}
|
||||
100% {
|
||||
filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@-o-keyframes opacity {
|
||||
0% {
|
||||
filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);
|
||||
opacity: 1;
|
||||
}
|
||||
100% {
|
||||
filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes opacity {
|
||||
0% {
|
||||
filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);
|
||||
opacity: 1;
|
||||
}
|
||||
100% {
|
||||
filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
#scanning-ellipsis span {
|
||||
-webkit-animation-name: opacity;
|
||||
-webkit-animation-duration: 1s;
|
||||
-webkit-animation-iteration-count: infinite;
|
||||
-moz-animation-name: opacity;
|
||||
-moz-animation-duration: 1s;
|
||||
-moz-animation-iteration-count: infinite;
|
||||
-ms-animation-name: opacity;
|
||||
-ms-animation-duration: 1s;
|
||||
-ms-animation-iteration-count: infinite;
|
||||
}
|
||||
#scanning-ellipsis span:nth-child(2) {
|
||||
-webkit-animation-delay: 100ms;
|
||||
-moz-animation-delay: 100ms;
|
||||
-ms-animation-delay: 100ms;
|
||||
-o-animation-delay: 100ms;
|
||||
animation-delay: 100ms;
|
||||
}
|
||||
#scanning-ellipsis span:nth-child(3) {
|
||||
-webkit-animation-delay: 300ms;
|
||||
-moz-animation-delay: 300ms;
|
||||
-ms-animation-delay: 300ms;
|
||||
-o-animation-delay: 300ms;
|
||||
animation-delay: 300ms;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
|
||||
{{--QR JS - THIS WILL BE MOVED--}}
|
||||
<script>
|
||||
// QRCODE reader Copyright 2011 Lazar Laszlo
|
||||
// http://www.webqr.com
|
||||
|
||||
function resizeVideo() {
|
||||
var $videoWrapper = $('#ScanVideoOutter');
|
||||
var $video = $('#ScanVideo');
|
||||
|
||||
$video.height($videoWrapper.height());
|
||||
$video.width($videoWrapper.width());
|
||||
}
|
||||
|
||||
$(function() {
|
||||
$( window ).resize(resizeVideo);
|
||||
});
|
||||
|
||||
var canvasContext = null;
|
||||
var gCanvas = null;
|
||||
var c=0;
|
||||
var stype=0;
|
||||
var gUM=false;
|
||||
var webkit=false;
|
||||
var moz=false;
|
||||
var theVideo=null;
|
||||
|
||||
var beepSound = new Audio('/mp3/beep.mp3');
|
||||
var vidhtml = '<video id="ScanVideo" autoplay></video>';
|
||||
|
||||
function captureToCanvas() {
|
||||
if(stype!=1)
|
||||
return;
|
||||
if(gUM)
|
||||
{
|
||||
try{
|
||||
canvasContext.drawImage(theVideo,0,0);
|
||||
try{
|
||||
qrcode.decode();
|
||||
}
|
||||
catch(e){
|
||||
console.log(e);
|
||||
setTimeout(captureToCanvas, 500);
|
||||
};
|
||||
}
|
||||
catch(e){
|
||||
console.log(e);
|
||||
setTimeout(captureToCanvas, 500);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function htmlEntities(str) {
|
||||
return String(str).replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"');
|
||||
}
|
||||
|
||||
function read(qrcode_token)
|
||||
{
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: '{{ route('postQRCodeCheckInAttendee', ['event_id' => $event->id]) }}',
|
||||
data: {qrcode_token: htmlEntities(qrcode_token)},
|
||||
cache: false,
|
||||
complete: function(){
|
||||
beepSound.play();
|
||||
},
|
||||
error: function() {
|
||||
showMessage('Something has gone wrong. Please try again.');
|
||||
},
|
||||
success: function(response) {
|
||||
$('#ScanResult').html("<b>" + response.message +"</b>");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
function successfulQrRead(stream) {
|
||||
if(webkit)
|
||||
theVideo.src = window.URL.createObjectURL(stream);
|
||||
else if(moz)
|
||||
{
|
||||
theVideo.mozSrcObject = stream;
|
||||
theVideo.play();
|
||||
}
|
||||
else {
|
||||
theVideo.src = stream;
|
||||
}
|
||||
|
||||
gUM=true;
|
||||
setTimeout(captureToCanvas, 500);
|
||||
}
|
||||
|
||||
function error(error) {
|
||||
gUM=false;
|
||||
return;
|
||||
}
|
||||
|
||||
function loadQrReader()
|
||||
{
|
||||
|
||||
var $canvas = $('#QrCanvas');
|
||||
|
||||
$canvas.height('300px');
|
||||
$canvas.width('600px');
|
||||
|
||||
canvasContext = $canvas[0].getContext('2d');
|
||||
canvasContext.clearRect(0, 0, 600, 300);
|
||||
qrcode.callback = read;
|
||||
|
||||
$('#ScanResult').html('<div id="scanning-ellipsis">Scanning<span>.</span><span>.</span><span>.</span></div>');
|
||||
if(stype==1)
|
||||
{
|
||||
setTimeout(captureToCanvas, 500);
|
||||
return;
|
||||
}
|
||||
|
||||
$('#ScanVideoOutter').html(vidhtml);
|
||||
theVideo = $("#ScanVideo")[0];
|
||||
|
||||
if(navigator.getUserMedia)
|
||||
{
|
||||
navigator.getUserMedia({video: true, audio: false}, successfulQrRead, error);
|
||||
} else if(navigator.webkitGetUserMedia)
|
||||
{
|
||||
webkit=true;
|
||||
navigator.webkitGetUserMedia({video:true, audio: false}, successfulQrRead, error);
|
||||
}
|
||||
else if(navigator.mediaDevices.getUserMedia)
|
||||
{
|
||||
moz=true;
|
||||
navigator.mozGetUserMedia({video: true, audio: false}, successfulQrRead, error);
|
||||
}
|
||||
else if(navigator.mozGetUserMedia)
|
||||
{
|
||||
moz=true;
|
||||
navigator.mozGetUserMedia({video: true, audio: false}, successfulQrRead, error);
|
||||
}
|
||||
|
||||
stype=1;
|
||||
setTimeout(captureToCanvas, 500);
|
||||
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
|
||||
{!! HTML::script('assets/javascript/backend.js') !!}
|
||||
{!! HTML::script('assets/javascript/check_in.js') !!}
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -16,17 +16,19 @@
|
|||
@show
|
||||
</title>
|
||||
|
||||
@include('Shared.Layouts.ViewJavascript')
|
||||
|
||||
<!--Meta-->
|
||||
@include('Shared.Partials.GlobalMeta')
|
||||
<!--/Meta-->
|
||||
<!--/Meta-->
|
||||
|
||||
<!--JS-->
|
||||
{!! HTML::script(config('attendize.cdn_url_static_assets').'/vendor/jquery/jquery.js') !!}
|
||||
<!--/JS-->
|
||||
<!--/JS-->
|
||||
|
||||
<!--Style-->
|
||||
{!! HTML::style(config('attendize.cdn_url_static_assets').'/assets/stylesheet/application.css') !!}
|
||||
<!--/Style-->
|
||||
<!--/Style-->
|
||||
|
||||
@yield('head')
|
||||
</head>
|
||||
|
|
@ -118,7 +120,7 @@
|
|||
<!--/To The Top-->
|
||||
|
||||
</section>
|
||||
<!--/Main Conent-->
|
||||
<!--/Main Content-->
|
||||
|
||||
<!--JS-->
|
||||
{!! HTML::script('assets/javascript/backend.js') !!}
|
||||
|
|
|
|||
|
|
@ -3,6 +3,8 @@
|
|||
|
||||
<title>@yield('title')</title>
|
||||
|
||||
@include('Shared/Layouts/ViewJavascript')
|
||||
|
||||
@include('Shared.Partials.GlobalMeta')
|
||||
|
||||
@yield('head')
|
||||
|
|
|
|||
|
|
@ -1,28 +1,28 @@
|
|||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0">
|
||||
<link rel="shortcut icon" href="{{ asset('assets/images/touch/favicon.ico') }}">
|
||||
<link rel="apple-touch-icon" sizes="57x57" href="{{ asset("assets/images/touch/apple-touch-icon-57x57.png") }}">
|
||||
<link rel="apple-touch-icon" sizes="114x114" href="{{ asset("assets/images/touch/apple-touch-icon-114x114.png") }}">
|
||||
<link rel="apple-touch-icon" sizes="72x72" href="{{ asset("assets/images/touch/apple-touch-icon-72x72.png") }}">
|
||||
<link rel="apple-touch-icon" sizes="144x144" href="{{ asset("assets/images/touch/apple-touch-icon-144x144.png") }}">
|
||||
<link rel="apple-touch-icon" sizes="60x60" href="{{ asset("assets/images/touch/apple-touch-icon-60x60.png") }}">
|
||||
<link rel="apple-touch-icon" sizes="120x120" href="{{ asset("assets/images/touch/apple-touch-icon-120x120.png") }}">
|
||||
<link rel="apple-touch-icon" sizes="76x76" href="{{ asset("assets/images/touch/apple-touch-icon-76x76.png") }}">
|
||||
<link rel="apple-touch-icon" sizes="152x152" href="{{ asset("assets/images/touch/apple-touch-icon-152x152.png") }}">
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="{{ asset("assets/images/touch/apple-touch-icon-180x180.png") }}">
|
||||
<meta name="apple-mobile-web-app-title" content="Attendize">
|
||||
<link rel="icon" type="image/png" sizes="192x192" href="{{ asset("assets/images/touch/favicon-192x192.png") }}">
|
||||
<link rel="icon" type="image/png" sizes="160x160" href="{{ asset("assets/images/touch/favicon-160x160.png") }}">
|
||||
<link rel="icon" type="image/png" sizes="96x96" href="{{ asset("assets/images/touch/favicon-96x96.png") }}">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="{{ asset("assets/images/touch/favicon-16x16.png") }}">
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="{{ asset("assets/images/touch/favicon-32x32.png") }}">
|
||||
<meta name="msapplication-TileColor" content="#ffffff">
|
||||
<meta name="msapplication-TileImage" content="{{ url("assets/images/touch/mstile-144x144.png") }}">
|
||||
<meta name="msapplication-config" content="{{ url("assets/images/touch/browserconfig.xml") }}">
|
||||
<meta name="application-name" content="Attendize">
|
||||
<meta name="_token" content="{{ csrf_token() }}" />
|
||||
{{--Mobile browser theme colors--}}
|
||||
<meta name="theme-color" content="#0398bf">
|
||||
<meta name="msapplication-navbutton-color" content="#0398bf">
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="#0398bf">
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0">
|
||||
<link rel="shortcut icon" href="{{ asset('assets/images/touch/favicon.ico') }}">
|
||||
<link rel="apple-touch-icon" sizes="57x57" href="{{ asset("assets/images/touch/apple-touch-icon-57x57.png") }}">
|
||||
<link rel="apple-touch-icon" sizes="114x114" href="{{ asset("assets/images/touch/apple-touch-icon-114x114.png") }}">
|
||||
<link rel="apple-touch-icon" sizes="72x72" href="{{ asset("assets/images/touch/apple-touch-icon-72x72.png") }}">
|
||||
<link rel="apple-touch-icon" sizes="144x144" href="{{ asset("assets/images/touch/apple-touch-icon-144x144.png") }}">
|
||||
<link rel="apple-touch-icon" sizes="60x60" href="{{ asset("assets/images/touch/apple-touch-icon-60x60.png") }}">
|
||||
<link rel="apple-touch-icon" sizes="120x120" href="{{ asset("assets/images/touch/apple-touch-icon-120x120.png") }}">
|
||||
<link rel="apple-touch-icon" sizes="76x76" href="{{ asset("assets/images/touch/apple-touch-icon-76x76.png") }}">
|
||||
<link rel="apple-touch-icon" sizes="152x152" href="{{ asset("assets/images/touch/apple-touch-icon-152x152.png") }}">
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="{{ asset("assets/images/touch/apple-touch-icon-180x180.png") }}">
|
||||
<meta name="apple-mobile-web-app-title" content="Attendize">
|
||||
<link rel="icon" type="image/png" sizes="192x192" href="{{ asset("assets/images/touch/favicon-192x192.png") }}">
|
||||
<link rel="icon" type="image/png" sizes="160x160" href="{{ asset("assets/images/touch/favicon-160x160.png") }}">
|
||||
<link rel="icon" type="image/png" sizes="96x96" href="{{ asset("assets/images/touch/favicon-96x96.png") }}">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="{{ asset("assets/images/touch/favicon-16x16.png") }}">
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="{{ asset("assets/images/touch/favicon-32x32.png") }}">
|
||||
<meta name="msapplication-TileColor" content="#ffffff">
|
||||
<meta name="msapplication-TileImage" content="{{ url("assets/images/touch/mstile-144x144.png") }}">
|
||||
<meta name="msapplication-config" content="{{ url("assets/images/touch/browserconfig.xml") }}">
|
||||
<meta name="application-name" content="Attendize">
|
||||
<meta name="_token" content="{{ csrf_token() }}" />
|
||||
{{--Mobile browser theme colors--}}
|
||||
<meta name="theme-color" content="#0398bf">
|
||||
<meta name="msapplication-navbutton-color" content="#0398bf">
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="#0398bf">
|
||||
Loading…
Reference in New Issue