Selaa lähdekoodia

feature branch

feature-profilechilds
Florian Eisenmenger 3 vuotta sitten
vanhempi
commit
6068e9b1b0
100 muutettua tiedostoa jossa 50190 lisäystä ja 201 poistoa
  1. BIN
      .DS_Store
  2. +1
    -1
      src/client/app/index.php
  3. +4
    -0
      src/client/app/js/app/core/Controller.js
  4. +108
    -14
      src/client/app/js/app/model/Appointment.js
  5. +123
    -1
      src/client/app/js/app/model/Profile.js
  6. +4
    -0
      src/client/app/js/app/model/SessionUser.js
  7. +36
    -2
      src/client/app/js/app/state/AppointmentEditAttendee.js
  8. +0
    -1
      src/client/app/js/app/state/ConfigurationContract.js
  9. +0
    -15
      src/client/app/js/app/state/ConfigurationProfileEdit.js
  10. +205
    -0
      src/client/app/js/app/state/ConfigurationSubProfileEdit.js
  11. +286
    -68
      src/client/app/js/app/state/Home.js
  12. +6
    -17
      src/client/app/tmpl/appointment-detail-attendee-row.html
  13. +9
    -4
      src/client/app/tmpl/appointment-detail-attendee.html
  14. +6
    -1
      src/client/app/tmpl/appointment-edit-attendee-row.html
  15. +9
    -6
      src/client/app/tmpl/appointment-edit-attendee.html
  16. +0
    -15
      src/client/app/tmpl/configuration-profile-edit.html
  17. +18
    -8
      src/client/app/tmpl/configuration-profile.html
  18. +82
    -0
      src/client/app/tmpl/configuration-subprofile-edit.html
  19. +46
    -0
      src/client/app/tmpl/configuration-subprofile-modal-form.html
  20. +53
    -35
      src/client/app/tmpl/home-appointment-item.html
  21. +131
    -0
      src/client/app/tmpl/home-modal-appointment-subprofile.html
  22. +1
    -1
      src/client/dog/assets/css/bootstrap/bootstrap.css
  23. +7
    -0
      src/client/dog/assets/css/bootstrap/bootstrap_.css
  24. +1287
    -0
      src/client/dog/assets/css/bootstrap/index.php
  25. +4
    -4
      src/client/dog/assets/css/landing-2.css
  26. +12
    -8
      src/client/dog/assets/css/style.css
  27. BIN
      src/client/dog/assets/images/DogHeader.png
  28. BIN
      src/client/dog/assets/images/DogHeader1.png
  29. BIN
      src/client/dog/assets/images/DogHeader2.png
  30. BIN
      src/client/dog/assets/images/ProBuddyDOG.gif
  31. BIN
      src/client/dog/assets/images/_DogHeader.png
  32. BIN
      src/client/dog/assets/images/banner_bottom.jpg
  33. BIN
      src/client/dog/assets/images/logoDark.png
  34. BIN
      src/client/dog/assets/images/logoWhite.png
  35. +16
    -0
      src/client/dog/backup/api.php
  36. BIN
      src/client/dog/backup/assets/css/ajax-loader.gif
  37. +7
    -0
      src/client/dog/backup/assets/css/bootstrap/bootstrap.css
  38. +1
    -0
      src/client/dog/backup/assets/css/helpers.css
  39. +92
    -0
      src/client/dog/backup/assets/css/landing-2.css
  40. +77
    -0
      src/client/dog/backup/assets/css/slick-theme.css
  41. +84
    -0
      src/client/dog/backup/assets/css/slick.css
  42. +1913
    -0
      src/client/dog/backup/assets/css/style.css
  43. +1
    -0
      src/client/dog/backup/assets/css/style.css.map
  44. +4
    -0
      src/client/dog/backup/assets/fonts/fontawesome/css/font-awesome.min.css
  45. BIN
      src/client/dog/backup/assets/fonts/fontawesome/fonts/fontawesome-webfont.eot
  46. +2671
    -0
      src/client/dog/backup/assets/fonts/fontawesome/fonts/fontawesome-webfont.svg
  47. BIN
      src/client/dog/backup/assets/fonts/fontawesome/fonts/fontawesome-webfont.ttf
  48. BIN
      src/client/dog/backup/assets/fonts/fontawesome/fonts/fontawesome-webfont.woff
  49. BIN
      src/client/dog/backup/assets/fonts/fontawesome/fonts/fontawesome-webfont.woff2
  50. +28009
    -0
      src/client/dog/backup/assets/fonts/ionicons/cheatsheet.html
  51. +1480
    -0
      src/client/dog/backup/assets/fonts/ionicons/css/ionicons.css
  52. +11
    -0
      src/client/dog/backup/assets/fonts/ionicons/css/ionicons.min.css
  53. BIN
      src/client/dog/backup/assets/fonts/ionicons/fonts/ionicons.eot
  54. +2230
    -0
      src/client/dog/backup/assets/fonts/ionicons/fonts/ionicons.svg
  55. BIN
      src/client/dog/backup/assets/fonts/ionicons/fonts/ionicons.ttf
  56. BIN
      src/client/dog/backup/assets/fonts/ionicons/fonts/ionicons.woff
  57. BIN
      src/client/dog/backup/assets/fonts/slick/slick.eot
  58. +14
    -0
      src/client/dog/backup/assets/fonts/slick/slick.svg
  59. BIN
      src/client/dog/backup/assets/fonts/slick/slick.ttf
  60. BIN
      src/client/dog/backup/assets/fonts/slick/slick.woff
  61. BIN
      src/client/dog/backup/assets/images/1900x1200_img_5.jpg
  62. BIN
      src/client/dog/backup/assets/images/DogHeader.png
  63. BIN
      src/client/dog/backup/assets/images/GIF_right.gif
  64. BIN
      src/client/dog/backup/assets/images/ProBuddyHorseLogo.png
  65. BIN
      src/client/dog/backup/assets/images/ProBuddyHorseLogoWhite.png
  66. BIN
      src/client/dog/backup/assets/images/_DogHeader.png
  67. BIN
      src/client/dog/backup/assets/images/alvaro-reyes-507651-unsplash.jpg
  68. BIN
      src/client/dog/backup/assets/images/bruce-mars-556415-unsplash.jpg
  69. BIN
      src/client/dog/backup/assets/images/daniil-vnoutchkov-FwK07kj-mTc-unsplash.jpg
  70. BIN
      src/client/dog/backup/assets/images/geert-pieters-688278-unsplash.jpg
  71. BIN
      src/client/dog/backup/assets/images/jesper-aggergaard-495757-unsplash.jpg
  72. BIN
      src/client/dog/backup/assets/images/kenny-webster-QrJc1RVI7uM-unsplash.jpg
  73. BIN
      src/client/dog/backup/assets/images/kevin-laminto-621654-unsplash.jpg
  74. BIN
      src/client/dog/backup/assets/images/pblogo-white.png
  75. BIN
      src/client/dog/backup/assets/images/pblogo.png
  76. BIN
      src/client/dog/backup/assets/images/person_1.jpg
  77. BIN
      src/client/dog/backup/assets/images/person_2.jpg
  78. BIN
      src/client/dog/backup/assets/images/person_5.jpg
  79. BIN
      src/client/dog/backup/assets/images/person_6.jpg
  80. BIN
      src/client/dog/backup/assets/images/phone_3.png
  81. BIN
      src/client/dog/backup/assets/images/rawpixel-771284-unsplash.jpg
  82. BIN
      src/client/dog/backup/assets/images/yoga-footer-bg.jpg
  83. BIN
      src/client/dog/backup/assets/images/yoga-head-bg.jpg
  84. +1
    -0
      src/client/dog/backup/assets/images/yoga-loader.svg
  85. +6
    -0
      src/client/dog/backup/assets/js/bootstrap.min.js
  86. +49
    -0
      src/client/dog/backup/assets/js/google-map.js
  87. +205
    -0
      src/client/dog/backup/assets/js/jquery.easing.1.3.js
  88. +9
    -0
      src/client/dog/backup/assets/js/jquery.mb.YTPlayer.min.js
  89. +10253
    -0
      src/client/dog/backup/assets/js/jquery.min.js
  90. +2
    -0
      src/client/dog/backup/assets/js/jquery.stellar.min.js
  91. +7
    -0
      src/client/dog/backup/assets/js/jquery.waypoints.min.js
  92. +230
    -0
      src/client/dog/backup/assets/js/main.js
  93. +360
    -0
      src/client/dog/backup/assets/js/pb.js
  94. +5
    -0
      src/client/dog/backup/assets/js/popper.min.js
  95. +15
    -0
      src/client/dog/backup/assets/js/slick.min.js
  96. BIN
      src/client/dog/backup/heads/001.png
  97. BIN
      src/client/dog/backup/heads/002.png
  98. BIN
      src/client/dog/backup/heads/003.png
  99. BIN
      src/client/dog/backup/heads/004.png
  100. BIN
      src/client/dog/backup/heads/005.png

BIN
.DS_Store Näytä tiedosto


+ 1
- 1
src/client/app/index.php Näytä tiedosto

@@ -2,7 +2,7 @@
require_once __DIR__ . '/../../server/server/config/boot_global.php';
require_once __DIR__ . '/../../server/server/config/boot_local.php';
$version = time();//Francis_Utils_Config::get( 'version' );
$version = 1;//time();//Francis_Utils_Config::get( 'version' );
?>
<!DOCTYPE html>
<html lang="en">


+ 4
- 0
src/client/app/js/app/core/Controller.js Näytä tiedosto

@@ -176,6 +176,10 @@ app.core.Controller = (function(){
{
app.core.StateManager.switchTo( new app.state.ConfigurationProfileEdit(), r.params );
});
rlite.add( 'configuration/subprofile/edit', function( r )
{
app.core.StateManager.switchTo( new app.state.ConfigurationSubProfileEdit(), r.params );
});
rlite.add( 'configuration/profile/delete', function( r )
{
app.core.StateManager.switchTo( new app.state.ConfigurationProfileDelete(), r.params );


+ 108
- 14
src/client/app/js/app/model/Appointment.js Näytä tiedosto

@@ -269,14 +269,14 @@ app.model.Appointment = function( appData, attendees, attendeeProfiles )
* @param profileId
* @returns {boolean}
*/
this.hasProfileIdAccepted = function( profileId )
this.hasProfileIdAccepted = function( profileId, profileChildId = null )
{
return ( "accepted" === this.getAttendeeStatusForProfileId( profileId ) );
return ( "accepted" === this.getAttendeeStatusForProfileId( profileId, profileChildId ) );
};
this.hasProfileIdAttended = function( profileId )
this.hasProfileIdAttended = function( profileId, profileChildId = null )
{
return ( "attended" === this.getAttendeeHasAttendedValueForProfileId( profileId ) );
return ( "attended" === this.getAttendeeHasAttendedValueForProfileId( profileId, profileChildId ) );
};
/**
@@ -290,7 +290,8 @@ app.model.Appointment = function( appData, attendees, attendeeProfiles )
for ( var ai = 0; ai < attendees.length; ai++ )
{
if ( attendees[ ai ].profile_id == profileId && attendees[ ai ].status.length > 0 )
if ( attendees[ ai ].profile_id == profileId &&
attendees[ ai ].status.length > 0 )
{
attendee = this.getProfileById( profileId );
break;
@@ -300,6 +301,24 @@ app.model.Appointment = function( appData, attendees, attendeeProfiles )
return attendee;
};
this.findAttendeeStatusByProfileIdAndChildId = function( profileId, childId = null )
{
let as = null;
for ( var ai = 0; ai < attendees.length; ai++ )
{
if ( attendees[ ai ].profile_id == profileId &&
attendees[ ai ].profile_child_id == childId &&
attendees[ ai ].status.length > 0 )
{
as = attendees[ ai ];
break;
}
}
return as;
};
this.hasContractAttendances = function()
{
var r = false;
@@ -321,6 +340,76 @@ app.model.Appointment = function( appData, attendees, attendeeProfiles )
return attendees;
};
this.getAttendeeDataByStatus = function( status )
{
let ad = [];
for ( let ai = 0; ai < attendees.length; ai++ )
{
if ( attendees[ ai ].status == status )
{
ad.push( attendees[ ai ] );
}
}
return ad;
};
this.getAttendeeProfilesByStatus = function( status )
{
let ad = this.getAttendeeDataByStatus( status ),
ap = [],
p = null;
for ( let ai = 0; ai < ad.length; ai++ )
{
p = this.getProfileById( ad[ ai ].profile_id );
if ( p )
{
ap.push(
{
"profile" : p,
"profileChildId" : ad[ ai ].profile_child_id
}
);
}
}
return ap;
};
this.hasProfileIdStatus = function( profileId, status )
{
var has = false;
for ( var ai = 0; ai < attendees.length; ai++ )
{
if ( attendees[ ai ].status == status && attendees[ ai ].profile_id == profileId )
{
has = true;
break;
}
}
return has;
};
this.hasProfileAndChildIdStatus = function( profileId, childId, status )
{
var has = false;
for ( var ai = 0; ai < attendees.length; ai++ )
{
if ( attendees[ ai ].status == status &&
attendees[ ai ].profile_id == profileId &&
attendees[ ai ].profile_child_id == childId )
{
has = true;
break;
}
}
return has;
};
this.getAttendeesAccepted = function()
{
var attendeesAccepted = [];
@@ -329,7 +418,8 @@ app.model.Appointment = function( appData, attendees, attendeeProfiles )
{
if ( attendees[ ai ].status == "accepted" )
{
attendeesAccepted.push( this.getProfileById( attendees[ ai ].profile_id ) );
//attendeesAccepted.push( this.getProfileById( attendees[ ai ].profile_id ) );
attendeesAccepted.push( attendees[ ai ] );
}
}
@@ -359,7 +449,8 @@ app.model.Appointment = function( appData, attendees, attendeeProfiles )
{
if ( attendees[ ai ].status == "declined" )
{
attendeesDeclined.push( this.getProfileById( attendees[ ai ].profile_id ) );
//attendeesDeclined.push( this.getProfileById( attendees[ ai ].profile_id ) );
attendeesDeclined.push( attendees[ ai ] );
}
}
@@ -389,7 +480,8 @@ app.model.Appointment = function( appData, attendees, attendeeProfiles )
{
if ( attendees[ ai ].status == "waiting" )
{
attendeesWaiting.push( this.getProfileById( attendees[ ai ].profile_id ) );
//attendeesWaiting.push( this.getProfileById( attendees[ ai ].profile_id ) );
attendeesWaiting.push( attendees[ ai ] );
}
}
@@ -428,7 +520,8 @@ app.model.Appointment = function( appData, attendees, attendeeProfiles )
{
if ( attendees[ ai ].has_attended == "attended" )
{
attendeesAttended.push( this.getProfileById( attendees[ ai ].profile_id ) );
//attendeesAttended.push( this.getProfileById( attendees[ ai ].profile_id ) );
attendeesAttended.push( attendees[ ai ].profile_id );
}
}
@@ -444,7 +537,8 @@ app.model.Appointment = function( appData, attendees, attendeeProfiles )
if ( attendees[ ai ].status == "accepted" &&
attendees[ ai ].has_attended == "declined" )
{
attendeesNotAttended.push( this.getProfileById( attendees[ ai ].profile_id ) );
//attendeesNotAttended.push( this.getProfileById( attendees[ ai ].profile_id ) );
attendeesNotAttended.push( attendees[ ai ].profile_id );
}
}
@@ -565,13 +659,13 @@ app.model.Appointment = function( appData, attendees, attendeeProfiles )
* @param profileId
* @returns {*}
*/
this.getAttendeeStatusForProfileId = function( profileId )
this.getAttendeeStatusForProfileId = function( profileId, profileChildId = null )
{
var status = null;
for ( var ai = 0; ai < attendees.length; ai++ )
{
if ( attendees[ ai ].profile_id == profileId )
if ( attendees[ ai ].profile_id == profileId && profileChildId == attendees[ ai ].profile_child_id )
{
status = attendees[ ai ].status;
break;
@@ -581,11 +675,11 @@ app.model.Appointment = function( appData, attendees, attendeeProfiles )
return status;
};
this.setAttendeeStatusForProfileId = function( profileId, status )
this.setAttendeeStatusForProfileId = function( profileId, status, profileChildId = null )
{
for ( var ai = 0; ai < attendees.length; ai++ )
{
if ( attendees[ ai ].profile_id == profileId )
if ( attendees[ ai ].profile_id == profileId && attendees[ ai ].profile_child_id == profileChildId )
{
attendees[ ai ].status = status;
break;


+ 123
- 1
src/client/app/js/app/model/Profile.js Näytä tiedosto

@@ -31,6 +31,7 @@ app.model.Profile = function( data, groupsData )
groups = [],
teamProps = data.team_prop_js || {},
teamCategoryIds = data.team_category_ids_js || [],
childProfiles = data.child_profile_js || [],
createdDt = data.created_dt,
// Note: Emails are optional
email = null;
@@ -393,7 +394,7 @@ app.model.Profile = function( data, groupsData )
return lastName;
};
this.getName = function( groupId )
this.getName = function( groupId, childId = null )
{
var name = '';
@@ -434,6 +435,12 @@ app.model.Profile = function( data, groupsData )
}
}
if ( name && name.length > 0 && childId )
{
let child = this.getChildProfileById( childId );
}
if ( name.length === 0 )
{
return _lc( 'UNKNOWN_NAME' );
@@ -573,5 +580,120 @@ app.model.Profile = function( data, groupsData )
}
}
return cn;
};
this.hasMultipleChilds = function()
{
return ( this.getChildProfiles().length > 0 );
};
this.getChildProfiles = function()
{
let cp = [];
for ( let cpi = 0; cpi < childProfiles.length; cpi++ )
{
if ( false === childProfiles[ cpi ].deleted )
{
cp.push( childProfiles[ cpi ] );
}
}
return cp;
};
this.getChildProfileById = function( id )
{
let cp = null;
for ( let cpi = 0; cpi < childProfiles.length; cpi++ )
{
if ( id == childProfiles[ cpi ].id )
{
cp = childProfiles[ cpi ];
break;
}
}
return cp;
};
this.getChildProfileHtmlTagById = function ( id )
{
let html = '',
cp = this.getChildProfileById( id );
if ( cp )
{
html += '<i class="' + this.getChildProfileIconByType( cp.type ) + '"></i> ' + cp.name;
}
return html;
};
this.getChildProfileNameByType = function( type )
{
let typeName = '';
switch( type )
{
case 'child':
typeName = 'Kind'
break;
case 'person':
typeName = 'Person'
break;
case 'cat':
typeName = 'Katze'
break;
case 'horse':
typeName = 'Pferd'
break;
case 'dog':
typeName = 'Hund'
break;
default:
case 'other':
typeName = 'keine Angabe'
break;
}
return typeName;
};
this.getChildProfileIconByType = function( type )
{
let iconCss = '';
switch( type )
{
case 'child':
iconCss = 'fas fa-child';
break;
case 'person':
iconCss = 'fas fa-user';
break;
case 'cat':
iconCss = 'fas fa-cat';
break;
case 'horse':
iconCss = 'fas fa-horse';
break;
case 'dog':
iconCss = 'fas fa-dog';
break;
default:
case 'other':
iconCss = 'fas fa-question-circle';
break;
}
return iconCss;
}
};

+ 4
- 0
src/client/app/js/app/model/SessionUser.js Näytä tiedosto

@@ -55,6 +55,10 @@ app.model.SessionUser = (function()
}
}
},
udpateUserProfile : function( ud )
{
userProfile = new app.model.Profile( ud );
},
setUserProfile : function( newProfile )
{
userProfile = newProfile;


+ 36
- 2
src/client/app/js/app/state/AppointmentEditAttendee.js Näytä tiedosto

@@ -28,19 +28,50 @@ app.state.AppointmentEditAttendee = function()
function( res )
{
appointment = new app.model.Appointment( res.appointment, res.attendee_data, res.attendee_profiles );
app.core.Rpc.call(
'Team',
'getMembers',
{ teamId : appointment.getTeamId() },
function( res2 )
{
let childs, m, notDecided = [];
for ( var tmi = 0; tmi < res2.members.length; tmi++ )
{
m = new app.model.Profile( res2.members[ tmi ] );
if ( null === appointment.findAttendeeStatusByProfileIdAndChildId( m.getId() ) )
{
notDecided.push(
{
profile : m,
child : null
}
);
}
childs = m.getChildProfiles();
if ( childs && childs.length > 0 )
{
for ( let ci = 0; ci < childs.length; ci++ )
{
if ( null === appointment.findAttendeeStatusByProfileIdAndChildId( m.getId(), childs[ ci ].id ) )
{
notDecided.push(
{
profile: m,
child : m.getChildProfileById( childs[ ci ].id )
}
);
}
}
}
/*
if ( null == appointment.getAttendeeByProfileId( res2.members[ tmi ].id ) )
{
notDecidedMember.push( new app.model.Profile( res2.members[ tmi ] ));
}
*/
}
app.core.View.setContent(
@@ -48,7 +79,7 @@ app.state.AppointmentEditAttendee = function()
'appointment-edit-attendee',
{
a: appointment,
members : notDecidedMember
notDecided : notDecided
}
)
);
@@ -90,6 +121,7 @@ app.state.AppointmentEditAttendee = function()
statusChanges.push({
appointmentId : appointmentId,
profileId : $checkbox.attr( 'data-profile-id' ),
profileChildId : $checkbox.attr( 'data-child-profile-id' ),
status : 'accepted',
isLastInBatch : false
});
@@ -100,6 +132,7 @@ app.state.AppointmentEditAttendee = function()
statusChanges.push({
appointmentId : appointmentId,
profileId : $checkbox.attr( 'data-profile-id' ),
profileChildId : $checkbox.attr( 'data-child-profile-id' ),
status : 'declined',
isLastInBatch : false
});
@@ -119,6 +152,7 @@ app.state.AppointmentEditAttendee = function()
appointmentId : appointmentId,
processSerial : isSerial,
profileId : $select.attr( 'data-profile-id' ),
profileChildId : $select.attr( 'data-child-profile-id' ),
status : $select.val(),
isLastInBatch : false
});


+ 0
- 1
src/client/app/js/app/state/ConfigurationContract.js Näytä tiedosto

@@ -22,7 +22,6 @@ app.state.ConfigurationContract = function()
null,
function( res )
{
console.log( res );
if ( res && res.hasOwnProperty( 'contractData' ) )
{
for ( let ci = 0; ci < res.contractData.length; ci++ )


+ 0
- 15
src/client/app/js/app/state/ConfigurationProfileEdit.js Näytä tiedosto

@@ -48,21 +48,6 @@ app.state.ConfigurationProfileEdit = function()
birthday = $form.find( '[data-id="input-birthday"]' ).first().val();
}
// Special group properties
if ( profile.isInGroupCategory( 'DOGSCHOOL' ) )
{
if ( null === teamProps )
{
teamProps = {};
}
if ( !teamProps.hasOwnProperty( 'DOGSCHOOL' ) )
{
teamProps[ 'DOGSCHOOL' ] = {};
}
teamProps[ 'DOGSCHOOL' ][ 'dogname'] = $form.find( '[data-id="input-dogschool-dogname"]' ).first().val();
}
app.core.Rpc.call(
'Profile',
'update',


+ 205
- 0
src/client/app/js/app/state/ConfigurationSubProfileEdit.js Näytä tiedosto

@@ -0,0 +1,205 @@
/**
* (c) by aheadware.com
*/
var app = app || {};
app.state = app.state || {};
app.state.ConfigurationSubProfileEdit = function()
{
var state = app.core.StateManager.createState( 'configuration-subprofile-edit' );
state.onEnter = function( p )
{
let $content = app.core.View.getContent();
app.gui.PageLoader.show();
app.core.Rpc.call(
'Account',
'getAccountRelatedData',
null,
function( res )
{
var profile = new app.model.Profile( res.profile, res.own_teams );
app.core.View.setContent(
app.core.View.getTemplate(
'configuration-subprofile-edit',
{
p : profile
}
)
);
$content.find( '[data-id="btn-add-subprofile"]' ).click( function()
{
var fnAddSubProfile = function()
{
var $modalContent = app.core.View.getModalContent(),
$form = $modalContent.find( '[data-id="form-subprofile"]' ).first(),
isValid = app.util.Form.bootstrapValidate( $form );
if ( isValid )
{
app.core.View.closeModal();
app.gui.PageLoader.show();
app.core.Rpc.call(
'Profile',
'addSubProfile',
{
subProfileName : $form.find( '[data-id="input-subprofile-name"]' ).first().val(),
subProfileType : $form.find( '[data-id="select-subprofile-type"]' ).first().val()
},
function( res )
{
if ( res && res.hasOwnProperty( 'profile' ) )
{
app.model.SessionUser.udpateUserProfile( res.profile );
}
app.core.View.toastSuccess( 'Unterprofil erfolgreich erstellt.' );
app.core.Controller.reload();
}
);
}
}.bind( this );
app.core.View.showModal(
{
'title' : 'Neues Unterprofil hinzufügen',
'body' : app.core.View.getTemplate( 'configuration-subprofile-modal-form', { sp : null } ),
'okButtonText' : "Speichern",
'onConfirm' : fnAddSubProfile
}
);
});
$content.find( '[data-type="editSubProfile"]' ).click( function()
{
const childProfileId = $(this).attr( 'data-subprofile-id' ),
childProfile = profile.getChildProfileById( childProfileId );
var fnUpdateSubprofile = function()
{
var $modalContent = app.core.View.getModalContent(),
$form = $modalContent.find( '[data-id="form-subprofile"]' ).first(),
isValid = app.util.Form.bootstrapValidate( $form );
if ( isValid )
{
app.core.View.closeModal();
app.gui.PageLoader.show();
app.core.Rpc.call(
'Profile',
'updateSubProfile',
{
subProfileId : childProfileId,
subProfileName : $form.find( '[data-id="input-subprofile-name"]' ).first().val(),
subProfileType : $form.find( '[data-id="select-subprofile-type"]' ).first().val()
},
function( res )
{
if ( res && res.hasOwnProperty( 'profile' ) )
{
app.model.SessionUser.udpateUserProfile( res.profile );
}
app.core.View.toastSuccess( 'Unterprofil erfolgreich aktualisiert.' );
app.core.Controller.reload();
}
);
}
}.bind( this );
app.core.View.showModal(
{
'title' : 'Unterprofil bearbeiten',
'body' : app.core.View.getTemplate( 'configuration-subprofile-modal-form', { sp : childProfile } ),
'okButtonText' : "Speichern",
'onConfirm' : fnUpdateSubprofile
}
);
});
$content.find( '[data-type="deleteSubProfile"]' ).click( function()
{
const subProfileId = $( this ).attr( 'data-subprofile-id' );
app.core.View.confirm(
"Soll dieses Unterprofil wirklich gelöscht werden? Alle Profildaten inkl. der Terminzusagen werden unwiderrufbar gelöscht.",
function()
{
app.gui.PageLoader.show();
app.core.Rpc.call(
'Profile',
'deleteSubProfile',
{
subProfileId : subProfileId
},
function( res )
{
app.core.View.toastSuccess( 'Unterprofile erfolgreich gelöscht' );
app.core.Controller.reload();
}
);
},
"Ja, löschen"
);
return false;
});
$content.find( '[data-id="btn-save"]' ).click( function()
{
let $form = $content.find('[data-id="form-profile"]').first(),
birthday = null,
teamProps = profile.getTeamProp(),
isValid = app.util.Form.bootstrapValidate($form);
if (isValid)
{
app.gui.PageLoader.show();
let newChildProfile = null,
newChildProfileName = $.trim( $form.find('[data-id="input-new-childprofile-name"]').first().val() ),
newChildProfileType = $form.find('[data-id="select-new-chiildprofile-type"]').first().val()
if ( newChildProfileName.length > 0 )
{
newChildProfile = {
"name" : newChildProfileName,
"type" : newChildProfileType
};
}
app.core.Rpc.call(
'Profile',
'update',
{
status : $form.find( '[data-id="input-status"]' ).first().val(),
firstName: $form.find('[data-id="input-firstname"]').first().val(),
lastName : $form.find('[data-id="input-lastname"]').first().val(),
birthday : birthday,
childProfiles : [],
newChildProfile : newChildProfile,
teamProps : teamProps
},
function( res )
{
app.gui.PageLoader.hide();
app.core.View.toastSuccess( _lc( 'PROFILE_SUCCESSFULLY_UPDATED' ) );
app.core.Controller.redirect( '#/configuration/profile' );
}
);
}
});
app.gui.PageLoader.hide();
}
);
};
return state;
};

+ 286
- 68
src/client/app/js/app/state/Home.js Näytä tiedosto

@@ -23,6 +23,28 @@ app.state.Home = function()
};
};
state.getMemberByGroupAndProfileId = function( groupId, profileId )
{
let self = this,
profile = null;
if ( false === self.teamMembers.hasOwnProperty( groupId ) )
{
return profile;
}
for( let pi = 0; pi < self.teamMembers[ groupId ].length; pi++ )
{
if ( self.teamMembers[ groupId ][ pi ].getId() == profileId )
{
profile = self.teamMembers[ groupId][ pi ];
break;
}
}
return profile;
};
state.getMembersForAppointment = function( app, status )
{
let self = this,
@@ -60,6 +82,141 @@ app.state.Home = function()
return appMembers;
};
state.onSetAttendanceStatusResult = function( res )
{
if ( false === res.hasOwnProperty( 'err' ) )
{
app.core.View.toastSuccess( _lc( 'SAVED' ) );
renderAppointmentItem( new app.model.Appointment( res.appointment, res.attendee_data ) );
}
else
{
if ( res.err == 'max_reached' )
{
$rsvpContainer.find( '[data-type="section-rsvp-icon-loading"]' ).first().hide();
$rsvpContainer.find( '[data-type="section-rsvp-icon-unchecked"]' ).first().show();
app.core.View.confirm(
_lc( 'MAX_REACHED_DO_YOU_WANT_ON_BE_ADDED_TO_THE_WAITLIST' ),
function() {
$rsvpContainer.find( '[data-type="section-rsvp-icon-unchecked"]' ).first().hide();
$rsvpContainer.find( '[data-type="section-rsvp-icon-loading"]' ).first().show();
app.core.Rpc.call(
'Appointment',
'setAttendanceStatus',
{
appointmentId : appId,
status : 'waiting'
},
function( res )
{
var newAppointment = new app.model.Appointment( res.appointment, res.attendee_data );
app.core.View.toastWarning(
_lc(
'SUCCESSFULLY_ADDED_TO_WAITING_LIST',
[
newAppointment.getWaitingPositionForProfileId( app.model.SessionUser.getUserProfile().getId() )
]
)
);
renderAppointmentItem( newAppointment );
}
);
},
_lc( 'BTN_OK' ),
);
}
else if ( "deadline_over" === res.err )
{
app.core.View.toastError( _lc( 'DEADLINE_IS_OVER' ) );
renderAppointmentItem( getAppointment( appId ) );
}
else
{
app.core.View.toastError( _lc( 'GENERAL_SERVER_ERROR' ) );
renderAppointmentItem( getAppointment( appId ) );
}
}
};
state.callSetAttendanceStatus = function( appId, status, profileChildId = null )
{
app.core.Rpc.call(
'Appointment',
'setAttendanceStatus',
{
appointmentId : appId,
status : status,
profileChildId : profileChildId
},
function( res )
{
if ( false === res.hasOwnProperty( 'err' ) )
{
app.core.View.toastSuccess( _lc( 'SAVED' ) );
renderAppointmentItem( new app.model.Appointment( res.appointment, res.attendee_data ) );
}
else
{
if ( res.err == 'max_reached' )
{
$rsvpContainer.find( '[data-type="section-rsvp-icon-loading"]' ).first().hide();
$rsvpContainer.find( '[data-type="section-rsvp-icon-unchecked"]' ).first().show();
app.core.View.confirm(
_lc( 'MAX_REACHED_DO_YOU_WANT_ON_BE_ADDED_TO_THE_WAITLIST' ),
function() {
$rsvpContainer.find( '[data-type="section-rsvp-icon-unchecked"]' ).first().hide();
$rsvpContainer.find( '[data-type="section-rsvp-icon-loading"]' ).first().show();
app.core.Rpc.call(
'Appointment',
'setAttendanceStatus',
{
appointmentId : appId,
status : 'waiting'
},
function( res )
{
var newAppointment = new app.model.Appointment( res.appointment, res.attendee_data );
app.core.View.toastWarning(
_lc(
'SUCCESSFULLY_ADDED_TO_WAITING_LIST',
[
newAppointment.getWaitingPositionForProfileId( app.model.SessionUser.getUserProfile().getId() )
]
)
);
renderAppointmentItem( newAppointment );
}
);
},
_lc( 'BTN_OK' ),
);
}
else if ( "deadline_over" === res.err )
{
app.core.View.toastError( _lc( 'DEADLINE_IS_OVER' ) );
renderAppointmentItem( getAppointment( appId ) );
}
else
{
app.core.View.toastError( _lc( 'GENERAL_SERVER_ERROR' ) );
renderAppointmentItem( getAppointment( appId ) );
}
}
},
function( res )
{
renderAppointmentItem( getAppointment( appId ) );
}
);
};
state.onEnter = function( p )
{
var $content = app.core.View.getContent(),
@@ -127,6 +284,88 @@ app.state.Home = function()
filter.isModified = false;
}
function callSetAttendanceStatus( appId, status, profileChildId = null )
{
app.core.Rpc.call(
'Appointment',
'setAttendanceStatus',
{
appointmentId : appId,
status : status,
profileChildId : profileChildId
},
function( res )
{
if ( false === res.hasOwnProperty( 'err' ) )
{
app.core.View.toastSuccess( _lc( 'SAVED' ) );
renderAppointmentItem( new app.model.Appointment( res.appointment, res.attendee_data ) );
}
else
{
if ( res.err == 'max_reached' )
{
$rsvpContainer.find( '[data-type="section-rsvp-icon-loading"]' ).first().hide();
$rsvpContainer.find( '[data-type="section-rsvp-icon-unchecked"]' ).first().show();
app.core.View.confirm(
_lc( 'MAX_REACHED_DO_YOU_WANT_ON_BE_ADDED_TO_THE_WAITLIST' ),
function() {
$rsvpContainer.find( '[data-type="section-rsvp-icon-unchecked"]' ).first().hide();
$rsvpContainer.find( '[data-type="section-rsvp-icon-loading"]' ).first().show();
app.core.Rpc.call(
'Appointment',
'setAttendanceStatus',
{
appointmentId : appId,
status : 'waiting'
},
function( res )
{
var newAppointment = new app.model.Appointment( res.appointment, res.attendee_data );
app.core.View.toastWarning(
_lc(
'SUCCESSFULLY_ADDED_TO_WAITING_LIST',
[
newAppointment.getWaitingPositionForProfileId( app.model.SessionUser.getUserProfile().getId() )
]
)
);
renderAppointmentItem( newAppointment );
}
);
},
_lc( 'BTN_OK' ),
);
}
else if ( "deadline_over" === res.err )
{
app.core.View.toastError( _lc( 'DEADLINE_IS_OVER' ) );
renderAppointmentItem( getAppointment( appId ) );
}
else if ( "deadline_reject_over" === res.err )
{
app.core.View.toastError( 'Die Absagefrist ist verstrichen. Bitte nehme direkten Kontakt auf.' );
renderAppointmentItem( getAppointment( appId ) );
}
else
{
app.core.View.toastError( _lc( 'GENERAL_SERVER_ERROR' ) );
renderAppointmentItem( getAppointment( appId ) );
}
}
},
function( res )
{
renderAppointmentItem( getAppointment( appId ) );
}
);
};
function renderAppointmentItem( appointment )
{
updateAppointment( appointment );
@@ -371,7 +610,7 @@ app.state.Home = function()
);
});
$content.on( 'click', '[data-type="rsvp-button-accept"]', function()
$content.on( 'click', '[data-type="rsvp-button-accept-multiple"], [data-type="rsvp-button-recall-multiple"]', function()
{
var $btn = $(this),
appId = $btn.attr('data-appointment-id'),
@@ -379,87 +618,66 @@ app.state.Home = function()
appointment = getAppointment(appId),
profileStatus = appointment.getAttendeeStatusForProfileId( app.model.SessionUser.getUserProfile().getId() );
if ( "accepted" === profileStatus )
{
return false;
}
$rsvpContainer.find( '[data-type="section-rsvp-icon-accepted"]' ).first().hide();
$rsvpContainer.find( '[data-type="section-rsvp-icon-unchecked"]' ).first().hide();
$rsvpContainer.find( '[data-type="section-rsvp-icon-loading"]' ).first().show();
app.core.Rpc.call(
'Appointment',
'setAttendanceStatus',
{
appointmentId : appId,
status : "accepted"
},
function( res )
app.core.View.showModal(
{
if ( false === res.hasOwnProperty( 'err' ) )
{
app.core.View.toastSuccess( _lc( 'SAVED' ) );
renderAppointmentItem( new app.model.Appointment( res.appointment, res.attendee_data ) );
}
else
'title' : appointment.getSubject() + ', am ' + appointment.getMomentStart().format( 'DD.MM.' ) + ' um ' + appointment.getMomentStart().format( 'HH:mm' ) + 'Uhr',
'body' : app.core.View.getTemplate( 'home-modal-appointment-subprofile', { a : appointment, currentProfile: app.model.SessionUser.getUserProfile() } ),
'cancelButtonText' : null,
'okButtonText' : 'Schließen',
'onShow' : function()
{
if ( res.err == 'max_reached' )
const $modalRoot = app.core.View.getModalContent();
$modalRoot.on( 'click', '[data-type="rsvp-button-accept"]', function()
{
$rsvpContainer.find( '[data-type="section-rsvp-icon-loading"]' ).first().hide();
$rsvpContainer.find( '[data-type="section-rsvp-icon-unchecked"]' ).first().show();
app.core.View.confirm(
_lc( 'MAX_REACHED_DO_YOU_WANT_ON_BE_ADDED_TO_THE_WAITLIST' ),
function() {
callSetAttendanceStatus( appId, "accepted", $(this).attr( 'data-child-profile-id' ) );
app.core.View.closeModal();
});
$rsvpContainer.find( '[data-type="section-rsvp-icon-unchecked"]' ).first().hide();
$rsvpContainer.find( '[data-type="section-rsvp-icon-loading"]' ).first().show();
app.core.Rpc.call(
'Appointment',
'setAttendanceStatus',
{
appointmentId : appId,
status : 'waiting'
},
function( res )
{
var newAppointment = new app.model.Appointment( res.appointment, res.attendee_data );
app.core.View.toastWarning(
_lc(
'SUCCESSFULLY_ADDED_TO_WAITING_LIST',
[
newAppointment.getWaitingPositionForProfileId( app.model.SessionUser.getUserProfile().getId() )
]
)
);
renderAppointmentItem( newAppointment );
}
);
},
_lc( 'BTN_OK' ),
);
}
else if ( "deadline_over" === res.err )
$modalRoot.on( 'click', '[data-type="rsvp-button-recall"]', function()
{
app.core.View.toastError( _lc( 'DEADLINE_IS_OVER' ) );
renderAppointmentItem( getAppointment( appId ) );
}
else
{
app.core.View.toastError( _lc( 'GENERAL_SERVER_ERROR' ) );
renderAppointmentItem( getAppointment( appId ) );
}
callSetAttendanceStatus( appId, "declined", $(this).attr( 'data-child-profile-id' ) );
app.core.View.closeModal();
});
},
'onHide' : function()
{
const $modalRoot = app.core.View.getModalContent();
$modalRoot.off( 'click', '[data-type="rsvp-button-accept"]' );
},
'onConfirm' : function()
{
app.core.View.closeModal();
renderAppointmentItem( appointment );
}
},
function( res )
{
renderAppointmentItem( getAppointment( appId ) );
}
);
});
$content.on( 'click', '[data-type="rsvp-button-accept"]', function()
{
var $btn = $(this),
appId = $btn.attr('data-appointment-id'),
$rsvpContainer = $content.find( '[data-type="appointment-rsvp-container"][data-appointment-id="' + appId + '"]' ).first(),
appointment = getAppointment(appId),
profileStatus = appointment.getAttendeeStatusForProfileId( app.model.SessionUser.getUserProfile().getId() );
if ( "accepted" === profileStatus )
{
return false;
}
$rsvpContainer.find( '[data-type="section-rsvp-icon-unchecked"]' ).first().hide();
$rsvpContainer.find( '[data-type="section-rsvp-icon-loading"]' ).first().show();
callSetAttendanceStatus( appId, 'accepted', null );
});
$content.on( 'click', '[data-type="btn-appointment-edit"]', function()
{
var appToEdit = getAppointment( $(this).attr( 'data-appointment-id' ) );


+ 6
- 17
src/client/app/tmpl/appointment-detail-attendee-row.html Näytä tiedosto

@@ -6,15 +6,13 @@
src="<%= at.getProfileImg( a.getTeamId() ) %>">
</td>
<td class="align-middle">
<div>
<%=raw at.getName( a.getTeamId() ) %>
<% if ( childProfile ) { %>
&nbsp;<small>[<%=raw at.getChildProfileHtmlTagById( childProfile.id ) %>]</small>
<% } %>
</div>
<% if ( a.hasStarted() ) { %>
<div>
<%=raw at.getName( a.getTeamId() ) %>
<% if ( g.getCategory() === "DOGSCHOOL" ) { %>
<%= at.getCustomGroupProperty( 'DOGSCHOOL', 'dogname' ) %>
<% } %>
</div>
<div class="appointment-original-status">
<small>
<%= _lc( 'ATTENDANCE' ) %>
@@ -26,17 +24,8 @@
</small>
</div>
<% } else { %>
<div>
<%=raw at.getName( a.getTeamId() ) %>
</div>
<div class="appointment-original-status">
<small>
<% if ( g.getCategory() === "DOGSCHOOL" ) { %>
<i class="fas fa-paw"></i> <%= at.getCustomGroupProperty( 'DOGSCHOOL', 'dogname' ) %>
<% } %>
</small>
</div>
<% } %>
</td>
<td class="align-middle">


+ 9
- 4
src/client/app/tmpl/appointment-detail-attendee.html Näytä tiedosto

@@ -2,6 +2,7 @@
<% mStart = a.getMomentStart(); %>
<% mEnd = a.getMomentEnd(); %>
<% mDeadline = a.getMomentDeadline(); %>
<% var prfl; %>
<div class="row">
<div class="col-sm-12">
<div class="card">
@@ -19,7 +20,8 @@
<table class="table table-profiles">
<tbody>
<% for ( var aai = 0; aai < attendeesAttended.length; aai++ ) { %>
<%=raw app.core.View.getTemplate( 'appointment-detail-attendee-row', { a: a, at : attendeesAttended[ aai ], g : g } ) %>
<% prfl = a.getProfileById( attendeesAttended[ aai ].profile_id ); %>
<%=raw app.core.View.getTemplate( 'appointment-detail-attendee-row', { a: a, at :prfl, g : g, childProfile : prfl.getChildProfileById( attendeesAttended[ aai ].profile_child_id ) } ) %>
<% } %>
</tbody>
</table>
@@ -44,7 +46,8 @@
<table class="table table-profiles">
<tbody>
<% for ( var aai = 0; aai < attendeesAccepted.length; aai++ ) { %>
<%=raw app.core.View.getTemplate( 'appointment-detail-attendee-row', { a: a, at : attendeesAccepted[ aai ], g : g } ) %>
<% prfl = a.getProfileById( attendeesAccepted[ aai ].profile_id ); %>
<%=raw app.core.View.getTemplate( 'appointment-detail-attendee-row', { a: a, at : prfl, g : g, childProfile : prfl.getChildProfileById( attendeesAccepted[ aai ].profile_child_id ) } ) %>
<% } %>
</tbody>
</table>
@@ -69,7 +72,8 @@
<table class="table table-profiles">
<tbody>
<% for ( var awi = 0; awi < attendeesWaiting.length; awi++ ) { %>
<%=raw app.core.View.getTemplate( 'appointment-detail-attendee-waiting-row', { a: a, at : attendeesWaiting[ awi ], g : g, waitingPos : (awi + 1) } ) %>
<% prfl = a.getProfileById( attendeesWaiting[ awi ].profile_id ); %>
<%=raw app.core.View.getTemplate( 'appointment-detail-attendee-waiting-row', { a: a, at : prfl, g : g, waitingPos : (awi + 1), childProfile : prfl.getChildProfileById( attendeesWaiting[ awi ].profile_child_id ) } ) %>
<% } %>
</tbody>
</table>
@@ -91,7 +95,8 @@
<table class="table table-profiles">
<tbody>
<% for ( var adi = 0; adi < attendeesDeclined.length; adi++ ) { %>
<%=raw app.core.View.getTemplate( 'appointment-detail-attendee-row', { a: a, at : attendeesDeclined[ adi ], g : g } ) %>
<% prfl = a.getProfileById( attendeesDeclined[ adi ].profile_id ); %>
<%=raw app.core.View.getTemplate( 'appointment-detail-attendee-row', { a: a, at : prfl, g : g, childProfile : prfl.getChildProfileById( attendeesDeclined[ adi ].profile_child_id ) } ) %>
<% } %>
</tbody>
</table>


+ 6
- 1
src/client/app/tmpl/appointment-edit-attendee-row.html Näytä tiedosto

@@ -1,6 +1,9 @@
<tr>
<td>
<%=raw attendee.getName() %>
<% if ( childProfile ) { %>
&nbsp;<small>[<%=raw attendee.getChildProfileHtmlTagById( childProfile.id ) %>]</small>
<% } %>
<% if ( attendee.getContractInGroup( a.getTeamId() ) ) { %>
<br /><small>Vetrag: <%= attendee.getContractInGroup( a.getTeamId() ) %></small>
<% } %>
@@ -19,9 +22,10 @@
<% if ( false === a.hasStarted() ) { %>
<td class="text-center">
<select class="form-control form-control-sm"
data-type="select-attendee-status"
a-type="select-attendee-status"
data-appointment-id="<%= a.getId() %>"
data-profile-id="<%= attendee.getId() %>"
data-child-profile-id="<%= childProfile ? childProfile.id : '0' %>"
data-orig-status="<%= currentStatus %>">
<option value="no-change">
<%= _lc( 'STATUS_NO_CHANGE' ) %>
@@ -46,6 +50,7 @@
data-type="checkbox-attendee-final-status"
data-appointment-id="<%= a.getId() %>"
data-profile-id="<%= attendee.getId() %>"
data-child-profile-id="<%= childProfile ? childProfile.id : '0' %>"
data-orig-status="<%= a.hasProfileIdAttended( attendee.getId() ) ? 'checked' : 'not-checked' %>"
class="custom-control-input"
<%= a.hasProfileIdAttended( attendee.getId() ) ? 'checked="checked"' : '' %>


+ 9
- 6
src/client/app/tmpl/appointment-edit-attendee.html Näytä tiedosto

@@ -21,20 +21,23 @@
</tr>
</thead>
<tbody>
<% var aa = a.getAttendeesAccepted(); %>
<% var aa = a.getAttendeesAccepted(), prfl; %>
<% for ( var aai = 0; aai < aa.length; aai++ ) { %>
<%=raw app.core.View.getTemplate( 'appointment-edit-attendee-row', { attendee : aa[ aai ], a: a, currentStatus : 'accepted' } ) %>
<% prfl = a.getProfileById( aa[ aai ].profile_id ); %>
<%=raw app.core.View.getTemplate( 'appointment-edit-attendee-row', { attendee : prfl, a: a, currentStatus : 'accepted', childProfile : prfl.getChildProfileById( aa[ aai ].profile_child_id ) } ) %>
<% } %>
<% var aw = a.getAttendeesWaiting(); %>
<% for ( var awi = 0; awi < aw.length; awi++ ) { %>
<%=raw app.core.View.getTemplate( 'appointment-edit-attendee-row', { attendee : aw[ awi ], a: a, currentStatus : 'waiting' } ) %>
<% prfl = a.getProfileById( aw[ awi ].profile_id ); %>
<%=raw app.core.View.getTemplate( 'appointment-edit-attendee-row', { attendee : prfl, a: a, currentStatus : 'waiting', childProfile : prfl.getChildProfileById( aw[ awi ].profile_child_id ) } ) %>
<% } %>
<% var ad = a.getAttendeesDeclined(); %>
<% for ( var adi = 0; adi < ad.length; adi++ ) { %>
<%=raw app.core.View.getTemplate( 'appointment-edit-attendee-row', { attendee : ad[ adi ], a: a, currentStatus : 'declined' } ) %>
<% prfl = a.getProfileById( ad[ adi ].profile_id ); %>
<%=raw app.core.View.getTemplate( 'appointment-edit-attendee-row', { attendee : prfl, a: a, currentStatus : 'declined', childProfile : prfl.getChildProfileById( ad[ adi ].profile_child_id ) } ) %>
<% } %>
<% for ( var ndmi = 0; ndmi < members.length; ndmi++ ) { %>
<%=raw app.core.View.getTemplate( 'appointment-edit-attendee-row', { attendee : members[ ndmi ], a: a, currentStatus : 'no-reaction' } ) %>
<% for ( var ndmi = 0; ndmi < notDecided.length; ndmi++ ) { %>
<%=raw app.core.View.getTemplate( 'appointment-edit-attendee-row', { attendee : notDecided[ ndmi ].profile, a: a, currentStatus : 'no-reaction', childProfile : notDecided[ ndmi ].child } ) %>
<% } %>
</tbody>
</table>


+ 0
- 15
src/client/app/tmpl/configuration-profile-edit.html Näytä tiedosto

@@ -58,21 +58,6 @@
</div>
</div>
</div>
<% if ( p.isInGroupCategory( 'DOGSCHOOL' ) ) { %>
<div class="form-group">
<label for="input-dogschool-dogname">
<%= _lc( 'PROFILE_DOGNAME' ) %> <small>- <%= _lc( 'PROFILE_DOGNAME_USAGE' ) %></small>
</label>
<input type="text"
maxlength="32"
name="dogschool-dogname"
data-id="input-dogschool-dogname"
id="input-dogschool-dogname"
class="form-control"
value="<%= p.getCustomGroupProperty( 'DOGSCHOOL', 'dogname' ) ? p.getCustomGroupProperty( 'DOGSCHOOL', 'dogname' ) : '' %>"
/>
</div>
<% } %>
<div class="form-group">
<div class="form-row">
<div class="col">


+ 18
- 8
src/client/app/tmpl/configuration-profile.html Näytä tiedosto

@@ -16,14 +16,6 @@
<div style="font-size: 1.4rem">
<%=raw p.getName() %>
</div>
<% if ( p.isInGroupCategory( 'DOGSCHOOL' ) ) { %>
<div class="profile-header">
<%= _lc( 'PROFILE_DOGNAME' ) %>
</div>
<div class="profile-content">
<%= p.getCustomGroupProperty( 'DOGSCHOOL', 'dogname' ) ? p.getCustomGroupProperty( 'DOGSCHOOL', 'dogname' ) : '---' %>
</div>
<% } %>
<div class="profile-header">
<%= _lc( 'PROFILE_STATUS' ) %>
</div>
@@ -36,6 +28,21 @@
<div class="profile-content">
<%= ( null != p.getMomentBirthday() ) ? p.getMomentBirthday().format( 'DD.MM.YYYY' ) : '---' %>
</div>
<div class="profile-header">
Unterprofile
</div>
<div class="profile-content">
<% let cp = p.getChildProfiles(); %>
<% if ( !cp || 0 === cp.length ) { %>
- keine -
<% } else { %>
<% for ( let cpi = 0; cpi < cp.length; cpi++ ) { %>
<% if ( false === cp[ cpi ].deleted ) { %>
<i class="<%= p.getChildProfileIconByType( cp[ cpi ].type ) %>"></i>&nbsp;<%= cp[ cpi ].name %><br />
<% } %>
<% } %>
<% } %>
</div>
</div>
</div>
</div>
@@ -49,6 +56,9 @@
class="btn btn-sm btn-primary">
<%= _lc( 'BTN_UPDATE_PROFILE_IMG' ) %>
</button>
<a href="#/configuration/subprofile/edit" class="btn btn-sm btn-primary">
Unterprofile bearbeiten
</a>
<a href="#/configuration/profile/delete" class="float-right btn btn-sm btn-danger">
<%= _lc( 'BTN_DELETE_PROFILE' ) %>
</a>


+ 82
- 0
src/client/app/tmpl/configuration-subprofile-edit.html Näytä tiedosto

@@ -0,0 +1,82 @@
<h4><a href="#/configuration/profile"><i class="fas fa-chevron-left"></i></a>&nbsp;Unterprofile</h4>
<% var mBirthday = p.getMomentBirthday(); %>
<div class="row">
<div class="col-sm-12">
<div class="card">
<form data-id="form-profile"
class="needs-validation"
novalidate>
<div class="card-body">
<div class="form-group">
<p>
<strong>Unterprofile</strong><br />
<small><i class="fa fa-info-circle"></i> Du kannst beliebig viele Unterprofile errichten. Unterprofile sind beispielsweise für Personen mit Kindern oder mehreren Haustieren nützlich.<br /><u>Beispiel:</u> Du verwendest <strong>Pro</strong>Buddy mit deiner Hundeschule und hast zwei Hunde. Dann kannst du mit deinem Account für jeden Hund individuell zu- bzw. absagen.</small>
</p>
<label>Deine derzeitigen Unterprofile</label>
<% let cp = p.getChildProfiles(); %>
<% if ( 0 === cp.length ) { %>
<p>
<i>- keine -</i>
</p>
<% } else { %>
<div class="table-responsive">
<table class="table table-striped">
<thead>
<tr>
<th class="text-center">ID</th>
<th>Name</th>
<th>Typ</th>
<th class="text-center">&nbsp;</th>
</tr>
</thead>
<tbody>
<% for ( let cpi = 0; cpi < cp.length; cpi++ ) { %>
<tr>
<td class="text-center"
style="vertical-align: middle">
<%= cp[ cpi ].id %>
</td>
<td style="vertical-align: middle">
<%= cp[ cpi ].name %>
</td>
<td style="vertical-align: middle">
<i class="<%= p.getChildProfileIconByType( cp[ cpi ].type ) %>"></i> <%= p.getChildProfileNameByType( cp[ cpi ].type ) %>
</td>
<td class="text-right">
<button type="button"
data-subprofile-id="<%= cp[ cpi ].id %>"
data-type="editSubProfile"
class="btn btn-primary btn-sm">
<i class="fas fa-pencil-alt"></i>
</button>
<button type="button"
data-subprofile-id="<%= cp[ cpi ].id %>"
data-type="deleteSubProfile"
class="btn btn-danger btn-sm">
<i class="far fa-trash-alt"></i>
</button>
</td>
</tr>
<% } %>
</tbody>
</table>
</div>
<% } %>
</div>
</div>
<div class="card-footer">
<a href="#/configuration/profile"
class="btn btn-sm btn-secondary">
<%= _lc( 'BTN_CANCEL' ) %>
</a>
<button type="button"
data-id="btn-add-subprofile"
class="btn btn-sm btn-primary">
Neues Unterprofil anlegen
</button>
</div>
</form>
</div>
</div>
</div>

+ 46
- 0
src/client/app/tmpl/configuration-subprofile-modal-form.html Näytä tiedosto

@@ -0,0 +1,46 @@
<form data-id="form-subprofile"
class="needs-validation"
novalidate>
<div class="form-group">
<label for="input-subprofile-name">
Name
</label>
<input type="text"
minlength="3"
maxlength="32"
data-id="input-subprofile-name"
id="input-subprofile-name"
class="form-control"
value="<%= sp ? sp.name : '' %>"
placeholder="Name Unterprofile"
required />
<div class="invalid-feedback">
<%= _lc( 'VALIDATION_INPUT_REQUIRED' ) %>
</div>
</div>
<div class="form-group">
<label for="input-subprofile-name">
Typ
</label>
<select class="form-control"
name="new-subprofile-type"
data-id="select-subprofile-type"
id="select-subprofile-type">
<option value="person"
<%= ( sp && sp.type === 'person' ) ? 'selected="selected"' : '' %>>Person</option>
<option value="child"
<%= ( sp && sp.type === 'child' ) ? 'selected="selected"' : '' %>>Kind</option>
<option value="dog"
<%= ( sp && sp.type === 'dog' ) ? 'selected="selected"' : '' %>>Hund</option>
<option value="cat"
<%= ( sp && sp.type === 'cat' ) ? 'selected="selected"' : '' %>>Katze</option>
<option value="horse"
<%= ( sp && sp.type === 'horse' ) ? 'selected="selected"' : '' %>>Pferd</option>
<option value="other"
<%= ( sp && sp.type === 'other' ) ? 'selected="selected"' : '' %>>Anderes</option>
</select>
<div class="invalid-feedback">
<%= _lc( 'VALIDATION_INPUT_REQUIRED' ) %>
</div>
</div>
</form>

+ 53
- 35
src/client/app/tmpl/home-appointment-item.html Näytä tiedosto

@@ -7,6 +7,7 @@
<% var group = app.model.SessionUser.getGroupById( a.getTeamId() ); %>
<% var categoryNames = a.getCategoryNames(); %>
<% var homeState = app.core.StateManager.getCurrentState(); %>
<% var multiple = ( true === currentProfile.hasMultipleChilds() ) ? '-multiple' : '' %>
<div class="appointment-item">
<div data-type="appointment-short-info"
data-appointment-id="<%= a.getId() %>"
@@ -69,9 +70,9 @@
<% } else { %>
<section data-type="section-rsvp-icon-unchecked"
style="display: <%= ( a.hasProfileIdAccepted( currentProfile.getId() ) || a.isProfileIdWaiting( currentProfile.getId() ) ) ? 'none' : 'block' %>">
style="display: <%= ( a.hasProfileIdStatus( currentProfile.getId(), "accepted" ) || a.hasProfileIdStatus( currentProfile.getId(), "waiting" ) ) ? 'none' : 'block' %>">
<button type="button"
data-type="rsvp-button-accept"
data-type="rsvp-button-accept<%= multiple %>"
data-appointment-id="<%= a.getId() %>"
class="btn btn-rsvp-not-selected btn-circle btn-xl">
<i class="fas fa-thumbs-up"></i>
@@ -86,9 +87,9 @@
</section>
<section data-type="section-rsvp-icon-accepted"
style="display: <%= a.hasProfileIdAccepted( currentProfile.getId() ) ? 'block' : 'none' %>">
style="display: <%= a.hasProfileIdStatus( currentProfile.getId(), "accepted" ) ? 'block' : 'none' %>">
<div style="position:relative; width:52px; height:40px;">
<div data-type="rsvp-button-recall"
<div data-type="rsvp-button-recall<%= multiple %>"
data-appointment-id="<%= a.getId() %>"
style="position: absolute;width:40px; height:40px;top:0;right:0">
<svg class="rsvp-checkmark"
@@ -102,9 +103,9 @@
</section>
<section data-type="section-rsvp-icon-waiting"
style="display: <%= a.isProfileIdWaiting( currentProfile.getId() ) ? 'block' : 'none' %>">
style="display: <%= a.hasProfileIdStatus( currentProfile.getId(), "waiting" ) ? 'block' : 'none' %>">
<div style="position:relative; width:52px; height:40px;">
<div data-type="rsvp-button-recall"
<div data-type="rsvp-button-recall<%= multiple %>"
data-appointment-id="<%= a.getId() %>"
style="position: absolute;width:40px; height:40px;top:0;right:0">
<svg class="rsvp-checkmark rsvp-chcekmark-waiting"
@@ -200,19 +201,25 @@
<td>
<%= _lc( 'ACCEPTANCE' ) %>&nbsp;(<%= a.getNumAttendeesAccepted() %>)
</td>
<% let ma; %>
<% ma = homeState.getMembersForAppointment( a, 'accepted' ); %>
<% console.log( ma ) %>
<% let ad, m, cp; %>
<% ad = a.getAttendeeDataByStatus( "accepted" ); %>
<td>
<% if ( ma.length > 0 ) { %>
<% for ( let mi = 0; mi < ma.length; mi++ ) { %>
<%= mi > 0 ? ' - ' : '' %>
<%= ma[ mi ].getName( a.getTeamId() ) %>
<% if ( ad.length > 0 ) { %>
<% for ( let ai = 0; ai < ad.length; ai++ ) { %>
<%= ai > 0 ? ' - ' : '' %>
<% m = homeState.getMemberByGroupAndProfileId( a.getTeamId(), ad[ ai ].profile_id ); %>
<% cp = m ? m.getChildProfileById( ad[ ai ].profile_child_id ) : null; %>
<% if ( m ) { %>
<%= m.getName( a.getTeamId() ) %>
<% if ( cp ) { %>
[<%=raw m.getChildProfileHtmlTagById( cp.id ) %>]
<% } %>
<% } else { %>
<i>Gelöscht</i>
<% } %>
<% } %>
<% } %>
</td>
</tr>
@@ -220,17 +227,23 @@
<td>
<%= _lc( 'WAITINGLIST' ) %>&nbsp;(<%= a.hasWaitingList() ? a.getNumAttendeesWaiting() : '0' %>)
</td>
<% ma = homeState.getMembersForAppointment( a, 'waiting' ); %>
<% ad = a.getAttendeeDataByStatus( "waiting" ); %>
<td>
<% if ( ma.length > 0 ) { %>
<% for ( let mi = 0; mi < ma.length; mi++ ) { %>
<%= mi > 0 ? ' - ' : '' %>
<%= ma[ mi ].getName( a.getTeamId() ) %>
<% if ( ad.length > 0 ) { %>
<% for ( let ai = 0; ai < ad.length; ai++ ) { %>
<%= ai > 0 ? ' - ' : '' %>
<% m = homeState.getMemberByGroupAndProfileId( a.getTeamId(), ad[ ai ].profile_id ); %>
<% cp = m ? m.getChildProfileById( ad[ ai ].profile_child_id ) : null; %>
<% if ( m ) { %>
<%= m.getName( a.getTeamId() ) %>
<% if ( cp ) { %>
[<%=raw m.getChildProfileHtmlTagById( cp.id ) %>]
<% } %>
<% } else { %>
<i>Gelöscht</i>
<% } %>
<% } %>
<% } %>
</td>
</tr>
@@ -238,17 +251,22 @@
<td>
Absagen&nbsp;(<%= a.getProfileIdsDeclined().length %>)
</td>
<% ma = homeState.getMembersForAppointment( a, 'declined' ); %>
<% ad = a.getAttendeeDataByStatus( "declined" ); %>
<td>
<% if ( ma.length > 0 ) { %>
<% for ( let mi = 0; mi < ma.length; mi++ ) { %>
<%= mi > 0 ? ' - ' : '' %>
<%= ma[ mi ].getName( a.getTeamId() ) %>
<% if ( ad.length > 0 ) { %>
<% for ( let ai = 0; ai < ad.length; ai++ ) { %>
<%= ai > 0 ? ' - ' : '' %>
<% m = homeState.getMemberByGroupAndProfileId( a.getTeamId(), ad[ ai ].profile_id ); %>
<% cp = m ? m.getChildProfileById( ad[ ai ].profile_child_id ) : null; %>
<% if ( m ) { %>
<%= m.getName( a.getTeamId() ) %>
<% if ( cp ) { %>
[<%=raw m.getChildProfileHtmlTagById( cp.id ) %>]
<% } %>
<% } else { %>
<i>Gelöscht</i>
<% } %>
<% } %>
<% } %>
</td>
</tr>


+ 131
- 0
src/client/app/tmpl/home-modal-appointment-subprofile.html Näytä tiedosto

@@ -0,0 +1,131 @@
<% let childProfiles = currentProfile.getChildProfiles(); %>
<div class="row">
<div class="col" style="line-height: 68px">
<%= currentProfile.getName() %>
</div>
<div data-type="appointment-rsvp-container"
data-appointment-id="<%= a.getId() %>"
class="col-appointment-response">
<div class="container-rsvp-icon">
<section data-type="section-rsvp-icon-unchecked"
style="display: <%= ( a.hasProfileIdAccepted( currentProfile.getId() ) || a.isProfileIdWaiting( currentProfile.getId() ) ) ? 'none' : 'block' %>">
<button type="button"
data-type="rsvp-button-accept"
data-appointment-id="<%= a.getId() %>"
class="btn btn-rsvp-not-selected btn-circle btn-xl">
<i class="fas fa-thumbs-up"></i>
</button>
</section>
<section data-type="section-rsvp-icon-loading"
style="display: none">
<div class="rsvp-loading-icon">
<i class="fas fa-circle-notch fa-spin"></i>
</div>
</section>
<section data-type="section-rsvp-icon-accepted"
style="display: <%= a.hasProfileIdAccepted( currentProfile.getId() ) ? 'block' : 'none' %>">
<div style="position:relative; width:52px; height:40px;">
<div data-type="rsvp-button-recall"
data-appointment-id="<%= a.getId() %>"
style="position: absolute;width:40px; height:40px;top:0;right:0">
<svg class="rsvp-checkmark"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 52 52">
<circle class="rsvp-checkmark__circle" cx="26" cy="26" r="25" fill="none"/>
<path class="rsvp-checkmark__check" fill="none" d="M14.1 27.2l7.1 7.2 16.7-16.8"/>
</svg>
</div>
</div>
</section>
<section data-type="section-rsvp-icon-waiting"
style="display: <%= a.isProfileIdWaiting( currentProfile.getId() ) ? 'block' : 'none' %>">
<div style="position:relative; width:52px; height:40px;">
<div data-type="rsvp-button-recall"
data-appointment-id="<%= a.getId() %>"
style="position: absolute;width:40px; height:40px;top:0;right:0">
<svg class="rsvp-checkmark rsvp-chcekmark-waiting"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 52 52">
<circle class="rsvp-checkmark__circle rsvp-checkmark__circle-waiting" cx="26" cy="26" r="25" fill="none"/>
<path class="rsvp-checkmark__check" fill="none" d="M14.1 27.2l7.1 7.2 16.7-16.8"/>
</svg>
</div>
</div>
</section>
</div>
</div>
</div>
<% for ( let ci = 0; ci < childProfiles.length; ci++ ) { %>
<hr style="margin-top: 0; margin-bottom: 0" />
<div class="row">
<div class="col" style="line-height: 68px">
<i class="<%= currentProfile.getChildProfileIconByType(childProfiles[ ci ].type ) %>"></i>&nbsp;<%= childProfiles[ ci ].name %>
</div>
<div data-type="appointment-rsvp-container"
data-appointment-id="<%= a.getId() %>"
class="col-appointment-response">
<div class="container-rsvp-icon">
<section data-type="section-rsvp-icon-unchecked"
style="display: <%= ( a.hasProfileIdAccepted( currentProfile.getId(), childProfiles[ ci ].id ) || a.isProfileIdWaiting( currentProfile.getId(), childProfiles[ ci ].id ) ) ? 'none' : 'block' %>">
<button type="button"
data-type="rsvp-button-accept"
data-appointment-id="<%= a.getId() %>"
data-child-profile-id="<%= childProfiles[ ci ].id %>"
class="btn btn-rsvp-not-selected btn-circle btn-xl">
<i class="fas fa-thumbs-up"></i>
</button>
</section>
<section data-type="section-rsvp-icon-loading"
style="display: none">
<div class="rsvp-loading-icon">
<i class="fas fa-circle-notch fa-spin"></i>
</div>
</section>
<section data-type="section-rsvp-icon-accepted"
style="display: <%= a.hasProfileIdAccepted( currentProfile.getId(), childProfiles[ ci ].id ) ? 'block' : 'none' %>">
<div style="position:relative; width:52px; height:40px;">
<div data-type="rsvp-button-recall"
data-appointment-id="<%= a.getId() %>"
data-child-profile-id="<%= childProfiles[ ci ].id %>"
style="position: absolute;width:40px; height:40px;top:0;right:0">
<svg class="rsvp-checkmark"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 52 52">
<circle class="rsvp-checkmark__circle" cx="26" cy="26" r="25" fill="none"/>
<path class="rsvp-checkmark__check" fill="none" d="M14.1 27.2l7.1 7.2 16.7-16.8"/>
</svg>
</div>
</div>
</section>
<section data-type="section-rsvp-icon-waiting"
style="display: <%= a.isProfileIdWaiting( currentProfile.getId(), childProfiles[ ci ].id ) ? 'block' : 'none' %>">
<div style="position:relative; width:52px; height:40px;">
<div data-type="rsvp-button-recall"
data-appointment-id="<%= a.getId() %>"
style="position: absolute;width:40px; height:40px;top:0;right:0">
<svg class="rsvp-checkmark rsvp-chcekmark-waiting"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 52 52">
<circle class="rsvp-checkmark__circle rsvp-checkmark__circle-waiting" cx="26" cy="26" r="25" fill="none"/>
<path class="rsvp-checkmark__check" fill="none" d="M14.1 27.2l7.1 7.2 16.7-16.8"/>
</svg>
</div>
</div>
</section>
</div>
</div>
</div>
<% } %>

+ 1
- 1
src/client/dog/assets/css/bootstrap/bootstrap.css
File diff suppressed because it is too large
Näytä tiedosto


+ 7
- 0
src/client/dog/assets/css/bootstrap/bootstrap_.css
File diff suppressed because it is too large
Näytä tiedosto


+ 1287
- 0
src/client/dog/assets/css/bootstrap/index.php
File diff suppressed because it is too large
Näytä tiedosto


+ 4
- 4
src/client/dog/assets/css/landing-2.css Näytä tiedosto

@@ -7,10 +7,10 @@ body {
.pb_icon-gradient:before {
background: #2B2D42;
background: -moz-linear-gradient(45deg, #2B2D42 0%, #D2D2D2 100%);
background: -webkit-linear-gradient(45deg, #2B2D42 0%, #D2D2D2 100%);
background: -o-linear-gradient(45deg, #2B2D42 0%, #D2D2D2 100%);
background: linear-gradient(45deg, #2B2D42 0%, #D2D2D2 100%);
background: -moz-linear-gradient(90deg, #2b2d42 25%, #ffffff 100%);
background: -webkit-linear-gradient(90deg, #2b2d42 25%, #ffffff 100%);
background: -o-linear-gradient(90deg, #2b2d42 25%, #ffffff 100%);
background: linear-gradient(90deg, #2b2d42 25%, #ffffff 100%);
/* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */
-webkit-background-clip: text;
-webkit-text-fill-color: transparent; }


+ 12
- 8
src/client/dog/assets/css/style.css Näytä tiedosto

@@ -319,11 +319,13 @@
.pb_md_py_cover .heading,
.pb_lg_py_cover .heading,
.pb_xl_py_cover .heading {
font-size: 62px;
font-size: 80px;
color: white;
font-weight: 300;
font-weight: 800;
margin-top: 20px;
margin-bottom: 0px; }
margin-bottom: 0px;
text-shadow: #393939 0.01em 0.01em 0.01em;
font-family: arial black; }
@media (max-width: 767px) {
.pb_sm_py_cover .heading,
.pb_md_py_cover .heading,
@@ -334,7 +336,7 @@
.pb_md_py_cover .sub-heading,
.pb_lg_py_cover .sub-heading,
.pb_xl_py_cover .sub-heading {
font-size: 20px;
font-size: 24px;
color: rgba(255, 255, 255, 0.8);
max-width: 600px;
float: left; }
@@ -490,11 +492,13 @@
.pb_cover_v2 .heading,
.pb_cover_v3 .heading,
.pb_cover_v4 .heading {
font-size: 62px;
font-size: 80px;
color: white;
font-weight: 300;
font-weight: 800;
margin-top: 20px;
margin-bottom: 0px; }
margin-bottom: 0px;
text-shadow: #393939 0.01em 0.01em 0.01em;
font-family: arial black;}
@media (max-width: 767px) {
.pb_cover .heading,
.pb_cover_v1 .heading,
@@ -507,7 +511,7 @@
.pb_cover_v2 .sub-heading,
.pb_cover_v3 .sub-heading,
.pb_cover_v4 .sub-heading {
font-size: 20px;
font-size: 28px;
color: rgba(255, 255, 255, 0.8);
max-width: 600px;
float: left; }


BIN
src/client/dog/assets/images/DogHeader.png Näytä tiedosto

Before After
Leveys: 1600  |  Korkeus: 1200  |  Koko: 1.8 MiB

BIN
src/client/dog/assets/images/DogHeader1.png Näytä tiedosto

Before After
Leveys: 1600  |  Korkeus: 1200  |  Koko: 1.8 MiB

BIN
src/client/dog/assets/images/DogHeader2.png Näytä tiedosto

Before After
Leveys: 1600  |  Korkeus: 1200  |  Koko: 1.7 MiB

BIN
src/client/dog/assets/images/ProBuddyDOG.gif Näytä tiedosto

Before After
Leveys: 810  |  Korkeus: 1440  |  Koko: 11 MiB

BIN
src/client/dog/assets/images/_DogHeader.png Näytä tiedosto

Before After
Leveys: 1600  |  Korkeus: 1200  |  Koko: 679 KiB

BIN
src/client/dog/assets/images/banner_bottom.jpg Näytä tiedosto

Before After
Leveys: 1600  |  Korkeus: 1200  |  Koko: 154 KiB

BIN
src/client/dog/assets/images/logoDark.png Näytä tiedosto

Before After
Leveys: 300  |  Korkeus: 120  |  Koko: 11 KiB

BIN
src/client/dog/assets/images/logoWhite.png Näytä tiedosto

Before After
Leveys: 300  |  Korkeus: 120  |  Koko: 8.1 KiB

+ 16
- 0
src/client/dog/backup/api.php Näytä tiedosto

@@ -0,0 +1,16 @@
<?php
/********************************************************************************
* (c)1337 aheadware.com - All rights reserved
********************************************************************************/
require_once __DIR__ . '/../../server/server/config/boot_global.php';
require_once __DIR__ . '/../../server/server/config/boot_local.php';
try
{
$app = new TB_Server_Core_App();
$app->run();
}
catch ( Exception $e )
{
TB_Server_Utils_Log::get()->log( $e );
}

BIN
src/client/dog/backup/assets/css/ajax-loader.gif Näytä tiedosto

Before After
Leveys: 32  |  Korkeus: 32  |  Koko: 4.1 KiB

+ 7
- 0
src/client/dog/backup/assets/css/bootstrap/bootstrap.css
File diff suppressed because it is too large
Näytä tiedosto


+ 1
- 0
src/client/dog/backup/assets/css/helpers.css
File diff suppressed because it is too large
Näytä tiedosto


+ 92
- 0
src/client/dog/backup/assets/css/landing-2.css Näytä tiedosto

@@ -0,0 +1,92 @@
body {
overflow-x: hidden; }
.bg-light {
background-color: #f2f4f9 !important; }
.pb_icon-gradient:before {
background: #2B2D42;
background: -moz-linear-gradient(45deg, #2B2D42 0%, #D2D2D2 100%);
background: -webkit-linear-gradient(45deg, #2B2D42 0%, #D2D2D2 100%);
background: -o-linear-gradient(45deg, #2B2D42 0%, #D2D2D2 100%);
background: linear-gradient(45deg, #2B2D42 0%, #D2D2D2 100%);
/* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */
-webkit-background-clip: text;
-webkit-text-fill-color: transparent; }
.pb_slant-light,
.pb_slant-white {
position: relative; }
.pb_slant-light:after,
.pb_slant-white:after {
content: "";
position: absolute;
bottom: -100px;
left: -50px;
height: 200px;
width: 130%;
background-color: #f2f4f9;
-webkit-transform: rotate(-4deg);
-ms-transform: rotate(-4deg);
transform: rotate(-4deg);
z-index: 10; }
.pb_slant-light.pb_slant-reverse:after,
.pb_slant-white.pb_slant-reverse:after {
-webkit-transform: rotate(4deg);
-ms-transform: rotate(4deg);
transform: rotate(4deg);
left: -100px;
bottom: -140px; }
.pb_slant-white:after {
background-color: #fff; }
.pb_section {
padding: 10em 0; }
.pb_cover_v3 a, .pb_xl_py_cover a {
color: rgba(255, 255, 255, 0.5);
border-bottom: 2px solid transparent; }
.pb_cover_v3 a:hover, .pb_xl_py_cover a:hover {
color: white;
border-bottom: 2px solid white; }
.pb_cover_v3 .btn, .pb_xl_py_cover .btn {
color: white; }
.pb_accordion .item > a[aria-expanded="true"] {
color: #2B2D42;
border-bottom: 1px solid transparent;
}
a {
color: #2B2D42;
}
.pb_navbar.scrolled.pb_scrolled-light ul li a.active {
color: #1d82ff !important;
}
.pb_navbar.scrolled.pb_scrolled-light ul li.cta-btn > a > span {
border: none;
background: #87AD71;
color: #fff;
}
.pb_navbar.awake a.navbar-brand > img.logo-dark {
display: block;
}
.pb_navbar.awake a.navbar-brand > img.logo-white {
display: none;
}
.pb_navbar a.navbar-brand > img.logo-dark {
display: none;
}
.pb_navbar a.navbar-brand > img.logo-white {
display: block;
}

+ 77
- 0
src/client/dog/backup/assets/css/slick-theme.css Näytä tiedosto

@@ -0,0 +1,77 @@
@charset "UTF-8";
/* Slider */
.slick-loading .slick-list {
background: #fff url("./ajax-loader.gif") center center no-repeat; }
/* Icons */
@font-face {
font-family: "slick";
src: url("../fonts/slick/slick.eot");
src: url("../fonts/slick/slick.eot?#iefix") format("embedded-opentype"), url("../fonts/slick/slick.woff") format("woff"), url("../fonts/slick/slick.ttf") format("truetype"), url("../fonts/slick/slick.svg#slick") format("svg");
font-weight: normal;
font-style: normal; }
/* Arrows */
.slick-prev,
.slick-next {
border: 1px solid red !important;
position: absolute;
display: block;
height: 20px;
width: 20px;
line-height: 0px;
font-size: 0px;
cursor: pointer;
background: transparent;
color: transparent;
top: 50%;
-webkit-transform: translate(0, -50%);
-ms-transform: translate(0, -50%);
transform: translate(0, -50%);
padding: 0;
border: none;
outline: none; }
.slick-prev:hover, .slick-prev:focus,
.slick-next:hover,
.slick-next:focus {
outline: none;
background: transparent;
color: transparent; }
.slick-prev:hover:before, .slick-prev:focus:before,
.slick-next:hover:before,
.slick-next:focus:before {
opacity: 1; }
.slick-prev.slick-disabled:before,
.slick-next.slick-disabled:before {
opacity: 0.25; }
.slick-prev:before,
.slick-next:before {
font-family: "slick";
font-size: 20px;
line-height: 1;
color: white;
opacity: 0.75;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale; }
.slick-prev {
left: -25px; }
[dir="rtl"] .slick-prev {
left: auto;
right: -25px; }
.slick-prev:before {
content: "←"; }
[dir="rtl"] .slick-prev:before {
content: "→"; }
.slick-next {
right: -25px; }
[dir="rtl"] .slick-next {
left: -25px;
right: auto; }
.slick-next:before {
content: "→"; }
[dir="rtl"] .slick-next:before {
content: "←"; }
/* Dots */

+ 84
- 0
src/client/dog/backup/assets/css/slick.css Näytä tiedosto

@@ -0,0 +1,84 @@
/* Slider */
.slick-slider {
position: relative;
display: block;
-webkit-box-sizing: border-box;
box-sizing: border-box;
-webkit-touch-callout: text;
-webkit-user-select: text;
-khtml-user-select: text;
-moz-user-select: text;
-ms-user-select: text;
user-select: text;
-ms-touch-action: pan-y;
touch-action: pan-y;
-webkit-tap-highlight-color: transparent; }
.slick-list {
position: relative;
overflow: hidden;
display: block;
margin: 0;
padding: 0; }
.slick-list:focus {
outline: none; }
.slick-list.dragging {
cursor: pointer;
cursor: hand; }
.slick-slider .slick-track,
.slick-slider .slick-list {
-webkit-transform: translate3d(0, 0, 0);
-moz-transform: translate3d(0, 0, 0);
-ms-transform: translate3d(0, 0, 0);
-o-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0); }
.slick-track {
position: relative;
left: 0;
top: 0;
display: block;
margin-left: auto;
margin-right: auto; }
.slick-track:before, .slick-track:after {
content: "";
display: table; }
.slick-track:after {
clear: both; }
.slick-loading .slick-track {
visibility: hidden; }
.slick-slide {
float: left;
height: 100%;
min-height: 1px;
display: none; }
.slick-slide:focus {
outline: none; }
[dir="rtl"] .slick-slide {
float: right; }
.slick-slide img {
display: block; }
.slick-slide.slick-loading img {
display: none; }
.slick-slide.dragging img {
pointer-events: none; }
.slick-initialized .slick-slide {
display: block; }
.slick-loading .slick-slide {
visibility: hidden; }
.slick-vertical .slick-slide {
display: block;
height: auto;
border: 1px solid transparent; }
.slick-arrow.slick-hidden {
display: none; }
.slick-list.draggable {
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none; }

+ 1913
- 0
src/client/dog/backup/assets/css/style.css
File diff suppressed because it is too large
Näytä tiedosto


+ 1
- 0
src/client/dog/backup/assets/css/style.css.map
File diff suppressed because it is too large
Näytä tiedosto


+ 4
- 0
src/client/dog/backup/assets/fonts/fontawesome/css/font-awesome.min.css
File diff suppressed because it is too large
Näytä tiedosto


BIN
src/client/dog/backup/assets/fonts/fontawesome/fonts/fontawesome-webfont.eot Näytä tiedosto


+ 2671
- 0
src/client/dog/backup/assets/fonts/fontawesome/fonts/fontawesome-webfont.svg
File diff suppressed because it is too large
Näytä tiedosto


BIN
src/client/dog/backup/assets/fonts/fontawesome/fonts/fontawesome-webfont.ttf Näytä tiedosto


BIN
src/client/dog/backup/assets/fonts/fontawesome/fonts/fontawesome-webfont.woff Näytä tiedosto


BIN
src/client/dog/backup/assets/fonts/fontawesome/fonts/fontawesome-webfont.woff2 Näytä tiedosto


+ 28009
- 0
src/client/dog/backup/assets/fonts/ionicons/cheatsheet.html
File diff suppressed because it is too large
Näytä tiedosto


+ 1480
- 0
src/client/dog/backup/assets/fonts/ionicons/css/ionicons.css
File diff suppressed because it is too large
Näytä tiedosto


+ 11
- 0
src/client/dog/backup/assets/fonts/ionicons/css/ionicons.min.css
File diff suppressed because it is too large
Näytä tiedosto


BIN
src/client/dog/backup/assets/fonts/ionicons/fonts/ionicons.eot Näytä tiedosto


+ 2230
- 0
src/client/dog/backup/assets/fonts/ionicons/fonts/ionicons.svg
File diff suppressed because it is too large
Näytä tiedosto


BIN
src/client/dog/backup/assets/fonts/ionicons/fonts/ionicons.ttf Näytä tiedosto


BIN
src/client/dog/backup/assets/fonts/ionicons/fonts/ionicons.woff Näytä tiedosto


BIN
src/client/dog/backup/assets/fonts/slick/slick.eot Näytä tiedosto


+ 14
- 0
src/client/dog/backup/assets/fonts/slick/slick.svg Näytä tiedosto

@@ -0,0 +1,14 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg">
<metadata>Generated by Fontastic.me</metadata>
<defs>
<font id="slick" horiz-adv-x="512">
<font-face font-family="slick" units-per-em="512" ascent="480" descent="-32"/>
<missing-glyph horiz-adv-x="512" />
<glyph unicode="&#8594;" d="M241 113l130 130c4 4 6 8 6 13 0 5-2 9-6 13l-130 130c-3 3-7 5-12 5-5 0-10-2-13-5l-29-30c-4-3-6-7-6-12 0-5 2-10 6-13l87-88-87-88c-4-3-6-8-6-13 0-5 2-9 6-12l29-30c3-3 8-5 13-5 5 0 9 2 12 5z m234 143c0-40-9-77-29-110-20-34-46-60-80-80-33-20-70-29-110-29-40 0-77 9-110 29-34 20-60 46-80 80-20 33-29 70-29 110 0 40 9 77 29 110 20 34 46 60 80 80 33 20 70 29 110 29 40 0 77-9 110-29 34-20 60-46 80-80 20-33 29-70 29-110z"/>
<glyph unicode="&#8592;" d="M296 113l29 30c4 3 6 7 6 12 0 5-2 10-6 13l-87 88 87 88c4 3 6 8 6 13 0 5-2 9-6 12l-29 30c-3 3-8 5-13 5-5 0-9-2-12-5l-130-130c-4-4-6-8-6-13 0-5 2-9 6-13l130-130c3-3 7-5 12-5 5 0 10 2 13 5z m179 143c0-40-9-77-29-110-20-34-46-60-80-80-33-20-70-29-110-29-40 0-77 9-110 29-34 20-60 46-80 80-20 33-29 70-29 110 0 40 9 77 29 110 20 34 46 60 80 80 33 20 70 29 110 29 40 0 77-9 110-29 34-20 60-46 80-80 20-33 29-70 29-110z"/>
<glyph unicode="&#8226;" d="M475 256c0-40-9-77-29-110-20-34-46-60-80-80-33-20-70-29-110-29-40 0-77 9-110 29-34 20-60 46-80 80-20 33-29 70-29 110 0 40 9 77 29 110 20 34 46 60 80 80 33 20 70 29 110 29 40 0 77-9 110-29 34-20 60-46 80-80 20-33 29-70 29-110z"/>
<glyph unicode="&#97;" d="M475 439l0-128c0-5-1-9-5-13-4-4-8-5-13-5l-128 0c-8 0-13 3-17 11-3 7-2 14 4 20l40 39c-28 26-62 39-100 39-20 0-39-4-57-11-18-8-33-18-46-32-14-13-24-28-32-46-7-18-11-37-11-57 0-20 4-39 11-57 8-18 18-33 32-46 13-14 28-24 46-32 18-7 37-11 57-11 23 0 44 5 64 15 20 9 38 23 51 42 2 1 4 3 7 3 3 0 5-1 7-3l39-39c2-2 3-3 3-6 0-2-1-4-2-6-21-25-46-45-76-59-29-14-60-20-93-20-30 0-58 5-85 17-27 12-51 27-70 47-20 19-35 43-47 70-12 27-17 55-17 85 0 30 5 58 17 85 12 27 27 51 47 70 19 20 43 35 70 47 27 12 55 17 85 17 28 0 55-5 81-15 26-11 50-26 70-45l37 37c6 6 12 7 20 4 8-4 11-9 11-17z"/>
</font></defs></svg>

BIN
src/client/dog/backup/assets/fonts/slick/slick.ttf Näytä tiedosto


BIN
src/client/dog/backup/assets/fonts/slick/slick.woff Näytä tiedosto


BIN
src/client/dog/backup/assets/images/1900x1200_img_5.jpg Näytä tiedosto

Before After
Leveys: 1900  |  Korkeus: 1200  |  Koko: 16 KiB

BIN
src/client/dog/backup/assets/images/DogHeader.png Näytä tiedosto

Before After
Leveys: 1600  |  Korkeus: 1200  |  Koko: 1.8 MiB

BIN
src/client/dog/backup/assets/images/GIF_right.gif Näytä tiedosto

Before After
Leveys: 485  |  Korkeus: 928  |  Koko: 474 KiB

BIN
src/client/dog/backup/assets/images/ProBuddyHorseLogo.png Näytä tiedosto

Before After
Leveys: 860  |  Korkeus: 200  |  Koko: 14 KiB

BIN
src/client/dog/backup/assets/images/ProBuddyHorseLogoWhite.png Näytä tiedosto

Before After
Leveys: 860  |  Korkeus: 200  |  Koko: 14 KiB

BIN
src/client/dog/backup/assets/images/_DogHeader.png Näytä tiedosto

Before After
Leveys: 1600  |  Korkeus: 1200  |  Koko: 679 KiB

BIN
src/client/dog/backup/assets/images/alvaro-reyes-507651-unsplash.jpg Näytä tiedosto

Before After
Leveys: 1296  |  Korkeus: 864  |  Koko: 72 KiB

BIN
src/client/dog/backup/assets/images/bruce-mars-556415-unsplash.jpg Näytä tiedosto

Before After
Leveys: 1427  |  Korkeus: 985  |  Koko: 135 KiB

BIN
src/client/dog/backup/assets/images/daniil-vnoutchkov-FwK07kj-mTc-unsplash.jpg Näytä tiedosto

Before After
Leveys: 3000  |  Korkeus: 2000  |  Koko: 258 KiB

BIN
src/client/dog/backup/assets/images/geert-pieters-688278-unsplash.jpg Näytä tiedosto

Before After
Leveys: 1368  |  Korkeus: 912  |  Koko: 187 KiB

BIN
src/client/dog/backup/assets/images/jesper-aggergaard-495757-unsplash.jpg Näytä tiedosto

Before After
Leveys: 1500  |  Korkeus: 1000  |  Koko: 100 KiB

BIN
src/client/dog/backup/assets/images/kenny-webster-QrJc1RVI7uM-unsplash.jpg Näytä tiedosto

Before After
Leveys: 2255  |  Korkeus: 1504  |  Koko: 238 KiB

BIN
src/client/dog/backup/assets/images/kevin-laminto-621654-unsplash.jpg Näytä tiedosto

Before After
Leveys: 1291  |  Korkeus: 862  |  Koko: 187 KiB

BIN
src/client/dog/backup/assets/images/pblogo-white.png Näytä tiedosto

Before After
Leveys: 539  |  Korkeus: 178  |  Koko: 13 KiB

BIN
src/client/dog/backup/assets/images/pblogo.png Näytä tiedosto

Before After
Leveys: 539  |  Korkeus: 178  |  Koko: 26 KiB

BIN
src/client/dog/backup/assets/images/person_1.jpg Näytä tiedosto

Before After
Leveys: 300  |  Korkeus: 300  |  Koko: 1.7 KiB

BIN
src/client/dog/backup/assets/images/person_2.jpg Näytä tiedosto

Before After
Leveys: 300  |  Korkeus: 300  |  Koko: 1.8 KiB

BIN
src/client/dog/backup/assets/images/person_5.jpg Näytä tiedosto

Before After
Leveys: 300  |  Korkeus: 300  |  Koko: 1.8 KiB

BIN
src/client/dog/backup/assets/images/person_6.jpg Näytä tiedosto

Before After
Leveys: 300  |  Korkeus: 300  |  Koko: 1.7 KiB

BIN
src/client/dog/backup/assets/images/phone_3.png Näytä tiedosto

Before After
Leveys: 535  |  Korkeus: 1039  |  Koko: 330 KiB

BIN
src/client/dog/backup/assets/images/rawpixel-771284-unsplash.jpg Näytä tiedosto

Before After
Leveys: 1750  |  Korkeus: 1167  |  Koko: 160 KiB

BIN
src/client/dog/backup/assets/images/yoga-footer-bg.jpg Näytä tiedosto

Before After
Leveys: 1364  |  Korkeus: 1000  |  Koko: 194 KiB

BIN
src/client/dog/backup/assets/images/yoga-head-bg.jpg Näytä tiedosto

Before After
Leveys: 1500  |  Korkeus: 1000  |  Koko: 82 KiB

+ 1
- 0
src/client/dog/backup/assets/images/yoga-loader.svg Näytä tiedosto

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" width="64" height="64"><title>yoga</title><g class="nc-icon-wrapper" stroke-linecap="square" stroke-linejoin="miter" stroke-width="2" fill="#111111" stroke="#111111"><circle cx="32" cy="9" r="6" fill="none" stroke="#111111" stroke-miterlimit="10"/> <line data-color="color-2" x1="2" y1="59" x2="62" y2="59" fill="none" stroke-miterlimit="10"/> <path d="M20,50.92,16.813,49.9A4.046,4.046,0,0,1,14,46.046h0A4.047,4.047,0,0,1,18.046,42H24V28l-6.007,5.242a3,3,0,0,1-3.657.254L8.05,29.305a2.655,2.655,0,0,1-.737-3.683h0a2.657,2.657,0,0,1,3.393-.905l5.031,2.5,7.27-6.461A3,3,0,0,1,25,20H39a3,3,0,0,1,1.993.758l7.27,6.461,5.031-2.5a2.657,2.657,0,0,1,3.393.905h0a2.655,2.655,0,0,1-.737,3.683L49.664,33.5a3,3,0,0,1-3.657-.254L40,28V42h6.051A3.949,3.949,0,0,1,50,45.949h0a3.948,3.948,0,0,1-2.952,3.821L30.015,54.214a3.33,3.33,0,0,1-4-2.17h0a3.33,3.33,0,0,1,1.99-4.171L33,46" fill="none" stroke="#111111" stroke-miterlimit="10"/></g></svg>

+ 6
- 0
src/client/dog/backup/assets/js/bootstrap.min.js
File diff suppressed because it is too large
Näytä tiedosto


+ 49
- 0
src/client/dog/backup/assets/js/google-map.js Näytä tiedosto

@@ -0,0 +1,49 @@
var google;
function init() {
// Basic options for a simple Google Map
// For more options see: https://developers.google.com/maps/documentation/javascript/reference#MapOptions
// var myLatlng = new google.maps.LatLng(40.71751, -73.990922);
var myLatlng = new google.maps.LatLng(40.69847032728747, -73.9514422416687);
// 39.399872
// -8.224454
var mapOptions = {
// How zoomed in you want the map to start at (always required)
zoom: 7,
// The latitude and longitude to center the map (always required)
center: myLatlng,
// How you would like to style the map.
scrollwheel: false,
styles: [{"featureType": "all","elementType": "geometry.fill","stylers": [{"weight": "2.00"}]},{"featureType": "all","elementType": "geometry.stroke","stylers": [{"color": "#9c9c9c"}]},{"featureType": "all","elementType": "labels.text","stylers": [{"visibility": "on"}]},{"featureType": "landscape","elementType": "all","stylers": [{"color": "#f2f2f2"}]},{"featureType": "landscape","elementType": "geometry.fill","stylers": [{"color": "#ffffff"}]},{"featureType": "landscape.man_made","elementType": "geometry.fill","stylers": [{"color": "#ffffff"}]},{"featureType": "poi","elementType": "all","stylers": [{"visibility": "off"}]},{"featureType": "road","elementType": "all","stylers": [{"saturation": -100},{"lightness": 45}]},{"featureType": "road","elementType": "geometry.fill","stylers": [{"color": "#eeeeee"}]},{"featureType": "road","elementType": "labels.text.fill","stylers": [{"color": "#7b7b7b"}]},{"featureType": "road","elementType": "labels.text.stroke","stylers": [{"color": "#ffffff"}]},{"featureType": "road.highway","elementType": "all","stylers": [{"visibility": "simplified"}]},{"featureType": "road.arterial","elementType": "labels.icon","stylers": [{"visibility": "off"}]},{"featureType": "transit","elementType": "all","stylers": [{"visibility": "off"}]},{"featureType": "water","elementType": "all","stylers": [{"color": "#46bcec"},{"visibility": "on"}]},{"featureType": "water","elementType": "geometry.fill","stylers": [{"color": "#c8d7d4"}]},{"featureType": "water","elementType": "labels.text.fill","stylers": [{"color": "#070707"}]},{"featureType": "water","elementType": "labels.text.stroke","stylers": [{"color": "#ffffff"}]}]
};
// Get the HTML DOM element that will contain your map
// We are using a div with id="map" seen below in the <body>
var mapElement = document.getElementById('map');
// Create the Google Map using out element and options defined above
var map = new google.maps.Map(mapElement, mapOptions);
var addresses = ['New York'];
for (var x = 0; x < addresses.length; x++) {
$.getJSON('http://maps.googleapis.com/maps/api/geocode/json?address='+addresses[x]+'&sensor=false', null, function (data) {
var p = data.results[0].geometry.location
var latlng = new google.maps.LatLng(p.lat, p.lng);
new google.maps.Marker({
position: latlng,
map: map,
icon: 'img/loc.png'
});
});
}
}
google.maps.event.addDomListener(window, 'load', init);

+ 205
- 0
src/client/dog/backup/assets/js/jquery.easing.1.3.js Näytä tiedosto

@@ -0,0 +1,205 @@
/*
* jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/
*
* Uses the built in easing capabilities added In jQuery 1.1
* to offer multiple easing options
*
* TERMS OF USE - jQuery Easing
*
* Open source under the BSD License.
*
* Copyright © 2008 George McGinley Smith
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* Neither the name of the author nor the names of contributors may be used to endorse
* or promote products derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
// t: current time, b: begInnIng value, c: change In value, d: duration
jQuery.easing['jswing'] = jQuery.easing['swing'];
jQuery.extend( jQuery.easing,
{
def: 'easeOutQuad',
swing: function (x, t, b, c, d) {
//alert(jQuery.easing.default);
return jQuery.easing[jQuery.easing.def](x, t, b, c, d);
},
easeInQuad: function (x, t, b, c, d) {
return c*(t/=d)*t + b;
},
easeOutQuad: function (x, t, b, c, d) {
return -c *(t/=d)*(t-2) + b;
},
easeInOutQuad: function (x, t, b, c, d) {
if ((t/=d/2) < 1) return c/2*t*t + b;
return -c/2 * ((--t)*(t-2) - 1) + b;
},
easeInCubic: function (x, t, b, c, d) {
return c*(t/=d)*t*t + b;
},
easeOutCubic: function (x, t, b, c, d) {
return c*((t=t/d-1)*t*t + 1) + b;
},
easeInOutCubic: function (x, t, b, c, d) {
if ((t/=d/2) < 1) return c/2*t*t*t + b;
return c/2*((t-=2)*t*t + 2) + b;
},
easeInQuart: function (x, t, b, c, d) {
return c*(t/=d)*t*t*t + b;
},
easeOutQuart: function (x, t, b, c, d) {
return -c * ((t=t/d-1)*t*t*t - 1) + b;
},
easeInOutQuart: function (x, t, b, c, d) {
if ((t/=d/2) < 1) return c/2*t*t*t*t + b;
return -c/2 * ((t-=2)*t*t*t - 2) + b;
},
easeInQuint: function (x, t, b, c, d) {
return c*(t/=d)*t*t*t*t + b;
},
easeOutQuint: function (x, t, b, c, d) {
return c*((t=t/d-1)*t*t*t*t + 1) + b;
},
easeInOutQuint: function (x, t, b, c, d) {
if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b;
return c/2*((t-=2)*t*t*t*t + 2) + b;
},
easeInSine: function (x, t, b, c, d) {
return -c * Math.cos(t/d * (Math.PI/2)) + c + b;
},
easeOutSine: function (x, t, b, c, d) {
return c * Math.sin(t/d * (Math.PI/2)) + b;
},
easeInOutSine: function (x, t, b, c, d) {
return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;
},
easeInExpo: function (x, t, b, c, d) {
return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;
},
easeOutExpo: function (x, t, b, c, d) {
return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;
},
easeInOutExpo: function (x, t, b, c, d) {
if (t==0) return b;
if (t==d) return b+c;
if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;
return c/2 * (-Math.pow(2, -10 * --t) + 2) + b;
},
easeInCirc: function (x, t, b, c, d) {
return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b;
},
easeOutCirc: function (x, t, b, c, d) {
return c * Math.sqrt(1 - (t=t/d-1)*t) + b;
},
easeInOutCirc: function (x, t, b, c, d) {
if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b;
return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b;
},
easeInElastic: function (x, t, b, c, d) {
var s=1.70158;var p=0;var a=c;
if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3;
if (a < Math.abs(c)) { a=c; var s=p/4; }
else var s = p/(2*Math.PI) * Math.asin (c/a);
return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
},
easeOutElastic: function (x, t, b, c, d) {
var s=1.70158;var p=0;var a=c;
if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3;
if (a < Math.abs(c)) { a=c; var s=p/4; }
else var s = p/(2*Math.PI) * Math.asin (c/a);
return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;
},
easeInOutElastic: function (x, t, b, c, d) {
var s=1.70158;var p=0;var a=c;
if (t==0) return b; if ((t/=d/2)==2) return b+c; if (!p) p=d*(.3*1.5);
if (a < Math.abs(c)) { a=c; var s=p/4; }
else var s = p/(2*Math.PI) * Math.asin (c/a);
if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b;
},
easeInBack: function (x, t, b, c, d, s) {
if (s == undefined) s = 1.70158;
return c*(t/=d)*t*((s+1)*t - s) + b;
},
easeOutBack: function (x, t, b, c, d, s) {
if (s == undefined) s = 1.70158;
return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
},
easeInOutBack: function (x, t, b, c, d, s) {
if (s == undefined) s = 1.70158;
if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;
return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
},
easeInBounce: function (x, t, b, c, d) {
return c - jQuery.easing.easeOutBounce (x, d-t, 0, c, d) + b;
},
easeOutBounce: function (x, t, b, c, d) {
if ((t/=d) < (1/2.75)) {
return c*(7.5625*t*t) + b;
} else if (t < (2/2.75)) {
return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
} else if (t < (2.5/2.75)) {
return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
} else {
return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
}
},
easeInOutBounce: function (x, t, b, c, d) {
if (t < d/2) return jQuery.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b;
return jQuery.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b;
}
});
/*
*
* TERMS OF USE - EASING EQUATIONS
*
* Open source under the BSD License.
*
* Copyright © 2001 Robert Penner
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* Neither the name of the author nor the names of contributors may be used to endorse
* or promote products derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/

+ 9
- 0
src/client/dog/backup/assets/js/jquery.mb.YTPlayer.min.js
File diff suppressed because it is too large
Näytä tiedosto


+ 10253
- 0
src/client/dog/backup/assets/js/jquery.min.js
File diff suppressed because it is too large
Näytä tiedosto


+ 2
- 0
src/client/dog/backup/assets/js/jquery.stellar.min.js
File diff suppressed because it is too large
Näytä tiedosto


+ 7
- 0
src/client/dog/backup/assets/js/jquery.waypoints.min.js
File diff suppressed because it is too large
Näytä tiedosto


+ 230
- 0
src/client/dog/backup/assets/js/main.js Näytä tiedosto

@@ -0,0 +1,230 @@
$(document).ready(function($) {
"use strict";
var loader = function() {
setTimeout(function() {
if($('#pb_loader').length > 0) {
$('#pb_loader').removeClass('show');
}
}, 2400);
};
loader();
// scroll
var scrollWindow = function() {
$(window).scroll(function(){
var $w = $(this),
st = $w.scrollTop(),
navbar = $('.pb_navbar'),
sd = $('.js-scroll-wrap');
if (st > 150) {
if ( !navbar.hasClass('scrolled') ) {
navbar.addClass('scrolled');
}
}
if (st < 150) {
if ( navbar.hasClass('scrolled') ) {
navbar.removeClass('scrolled sleep');
}
}
if ( st > 350 ) {
if ( !navbar.hasClass('awake') ) {
navbar.addClass('awake');
}
if(sd.length > 0) {
sd.addClass('sleep');
}
}
if ( st < 350 ) {
if ( navbar.hasClass('awake') ) {
navbar.removeClass('awake');
navbar.addClass('sleep');
}
if(sd.length > 0) {
sd.removeClass('sleep');
}
}
});
};
scrollWindow();
// slick sliders
var slickSliders = function() {
$('.single-item').slick({
slidesToShow: 1,
slidesToScroll: 1,
dots: true,
infinite: true,
autoplay: false,
autoplaySpeed: 2000,
nextArrow: '<span class="next"><i class="ion-ios-arrow-right"></i></span>',
prevArrow: '<span class="prev"><i class="ion-ios-arrow-left"></i></span>',
arrows: true,
draggable: false,
adaptiveHeight: true
});
$('.single-item-no-arrow').slick({
slidesToShow: 1,
slidesToScroll: 1,
dots: true,
infinite: true,
autoplay: true,
autoplaySpeed: 2000,
nextArrow: '<span class="next"><i class="ion-ios-arrow-right"></i></span>',
prevArrow: '<span class="prev"><i class="ion-ios-arrow-left"></i></span>',
arrows: false,
draggable: false
});
$('.multiple-items').slick({
slidesToShow: 3,
slidesToScroll: 1,
dots: true,
infinite: true,
autoplay: true,
autoplaySpeed: 2000,
arrows: true,
nextArrow: '<span class="next"><i class="ion-ios-arrow-right"></i></span>',
prevArrow: '<span class="prev"><i class="ion-ios-arrow-left"></i></span>',
draggable: false,
responsive: [
{
breakpoint: 1125,
settings: {
slidesToShow: 2,
slidesToScroll: 1,
infinite: true,
dots: true
}
},
{
breakpoint: 900,
settings: {
slidesToShow: 2,
slidesToScroll: 2
}
},
{
breakpoint: 580,
settings: {
slidesToShow: 1,
slidesToScroll: 1
}
}
]
});
$('.js-pb_slider_content').slick({
slidesToShow: 1,
slidesToScroll: 1,
arrows: false,
fade: true,
asNavFor: '.js-pb_slider_nav',
adaptiveHeight: false
});
$('.js-pb_slider_nav').slick({
slidesToShow: 3,
slidesToScroll: 1,
asNavFor: '.js-pb_slider_content',
dots: false,
centerMode: true,
centerPadding: "0px",
focusOnSelect: true,
arrows: false
});
$('.js-pb_slider_content2').slick({
slidesToShow: 1,
slidesToScroll: 1,
arrows: false,
fade: true,
asNavFor: '.js-pb_slider_nav2',
adaptiveHeight: false
});
$('.js-pb_slider_nav2').slick({
slidesToShow: 3,
slidesToScroll: 1,
asNavFor: '.js-pb_slider_content2',
dots: false,
centerMode: true,
centerPadding: "0px",
focusOnSelect: true,
arrows: false
});
};
slickSliders();
// navigation
var OnePageNav = function() {
var navToggler = $('.navbar-toggler');
$(".smoothscroll[href^='#'], #probootstrap-navbar ul li a[href^='#']").on('click', function(e) {
$(this).blur();
e.preventDefault();
var hash = this.hash,
pos = ( hash === '#section-register' ) ? $(hash).offset().top - 200 : $(hash).offset().top;
$('html, body').animate({
scrollTop: pos
}, 700, 'easeInOutExpo', function(){
//window.location.hash = hash;
});
});
$("#probootstrap-navbar ul li a[href^='#']").on('click', function(e){
if ( navToggler.is(':visible') ) {
navToggler.click();
}
});
$('body').on('activate.bs.scrollspy', function () {
console.log('nice');
})
};
OnePageNav();
var offCanvasNav = function() {
var toggleNav = $('.js-pb_nav-toggle'),
offcanvasNav = $('.js-pb_offcanvas-nav_v1');
if( toggleNav.length > 0 ) {
toggleNav.click(function(e){
$(this).toggleClass('active');
offcanvasNav.addClass('active');
e.preventDefault();
});
}
offcanvasNav.click(function(e){
if (offcanvasNav.hasClass('active')) {
offcanvasNav.removeClass('active');
toggleNav.removeClass('active');
}
e.preventDefault();
});
};
offCanvasNav();
/*
var ytpPlayer = function() {
if ($('.ytp_player').length > 0) {
$('.ytp_player').mb_YTPlayer();
}
}
ytpPlayer();
*/
setTimeout( function()
{
pbInit();
}, 250 );
});

+ 360
- 0
src/client/dog/backup/assets/js/pb.js Näytä tiedosto

@@ -0,0 +1,360 @@
window.PB_CONFIG = null;
window.PB_USERPROFILE = null;
function pbRegister( data )
{
var xhr = new XMLHttpRequest(),
request = {
auth : {
version : window.PB_CONFIG.version,
sessionToken : null
},
c : 'Auth',
a: 'registerTrainer',
params : data
};
xhr.onload = function() {
var response = xhr.responseText ? xhr.responseText : null;
if ( response )
{
try
{
response = JSON.parse(response);
}
catch( err ) {}
if ( response && response.hasOwnProperty( 'data' ) && response.hasOwnProperty( 'code' ) )
{
if ( response.code == 200 )
{
$( '[data-type="register-section"]' ).hide();
$( '[data-id="checkmark-container"]' ).first().html(
' <div data-type="rsvp-button-recall">\n' +
' <svg class="rsvp-checkmark"\n' +
' xmlns="http://www.w3.org/2000/svg"\n' +
' viewBox="0 0 52 52">\n' +
' <circle class="rsvp-checkmark__circle" cx="26" cy="26" r="25" fill="none"/>\n' +
' <path class="rsvp-checkmark__check" fill="none" d="M14.1 27.2l7.1 7.2 16.7-16.8"/>\n' +
' </svg>\n' +
' </div>'
);
// Show next steps
if ( response.data.session === null )
{
// Show validation info
$( '[data-id="registration-new-user"]' ).first().show();
}
else
{
// Show login
$( '[data-id="registration-existing-user"]' ).first().show();
}
}
else
{
$( '[data-id="error-general"]' ).first().show();
}
}
$( '[data-id="btn-register"]' ).first().attr( 'disabled', false );
}
};
xhr.onabort = function() {
$( '[data-id="btn-register"]' ).first().enable();
};
xhr.onerror = function() {
$( '[data-id="btn-register"]' ).first().enable();
};
xhr.open( 'POST', 'api.php' );
xhr.setRequestHeader( "Content-Type", "application/json" );
xhr.send( JSON.stringify( request ) );
}
function pbRegisterWizard( onOk, onErr )
{
var xhr = new XMLHttpRequest(),
request = {
auth : {
version : window.PB_CONFIG.version,
sessionToken : null
},
c : 'Auth',
a: 'registerTrainer',
params : window.WIZARD_DATA
},
onSuccess = onOk || null,
onError = onErr || null;
xhr.onload = function()
{
var response = xhr.responseText ? xhr.responseText : null;
if ( response )
{
try
{
response = JSON.parse(response);
} catch (err) {}
if ( response && response.hasOwnProperty( 'data' ) && response.hasOwnProperty( 'code' ) )
{
if ( response.code == 200 )
{
onSuccess && onSuccess( response );
}
}
}
};
xhr.onabort = function() {
onError && onError();
};
xhr.onerror = function() {
onError && onError();
};
xhr.open( 'POST', 'api.php' );
xhr.setRequestHeader( "Content-Type", "application/json" );
xhr.send( JSON.stringify( request ) );
}
function pbInitWizard()
{
window.WIZARD_INDEX = 0;
window.WIZARD_DATA = {};
window.WIZARD_DATA.industry = 'DOGSCHOOL';
window.WIZARD_DATA.affiliateId = 'retrust';
var $bWizard = $( '[data-id="wizard-carousel"]' ).first(),
$wizardProgress = $( '[data-id="wizard-progress"]' ).first();
$wizardProgress.css( 'width', '0%' );
$bWizard.carousel({
interval: false,
keyboard : false,
touch: false
});
$bWizard.on( 'slide.bs.carousel', function( e )
{
var nextH = $(e.relatedTarget).height();
$(this).find('.carousel-item.active').parent().animate({
height: nextH
}, 500);
});
}
function pbWizardUpdateProgress()
{
var $wizardProgress = $( '[data-id="wizard-progress"]' ).first(),
totalSteps = $( '[data-type="wizard-step"]' ).length,
progress = ~~( window.WIZARD_INDEX / totalSteps * 100);
$wizardProgress.css( 'width', progress + '%' );
}
function pbWizardNext( step )
{
window.WIZARD_INDEX++;
var $bWizard = $( '[data-id="wizard-carousel"]' ).first();
switch ( step )
{
case 'school':
var $form = $( '[data-id="wizardform-school"]' ).first(),
heightAdd = $form.hasClass( 'was-validated' ) ? 0 : 70;
$form.removeClass( 'was-validated' );
var isValid = $form.get(0).checkValidity();
$form.addClass( 'was-validated' );
if ( false === isValid )
{
if ( heightAdd > 0 )
{
setTimeout( function()
{
$( '.carousel-inner' ).animate( { height: $( '.carousel-inner' ).innerHeight() + heightAdd }, 300 );
}, 100 );
}
return;
}
break;
case 'register':
var $form = $( '[data-id="wizardform-account"]' ).first(),
heightAdd = $form.hasClass( 'was-validated' ) ? 0 : 70;
$form.removeClass( 'was-validated' );
var isValid = $form.get(0).checkValidity();
$form.addClass( 'was-validated' );
if ( false === isValid )
{
if ( heightAdd > 0 )
{
setTimeout( function()
{
$( '.carousel-inner' ).animate( { height: $( '.carousel-inner' ).innerHeight() + heightAdd }, 300 );
}, 100 );
}
return;
}
window.WIZARD_DATA.teamname = $.trim( $( '[data-id="input-register-teamname"]' ).first().val() );
window.WIZARD_DATA.courseCategories = [];
$( '[data-type="checkbox-coursecategories"]' ).each( function()
{
if ( $(this).prop( 'checked' ) )
{
window.WIZARD_DATA.courseCategories.push( $(this).attr( 'data-value' ) );
}
});
window.WIZARD_DATA.createDemoAppointments = $( '[data-id="register-demo-appointments"]' ).first().prop( 'checked' ) ? 1 : 0;
window.WIZARD_DATA.firstname = $.trim( $( '[data-id="input-register-firstname"]' ).first().val() );
window.WIZARD_DATA.lastname = $.trim( $( '[data-id="input-register-lastname"]' ).first().val() );
window.WIZARD_DATA.email = $.trim( $( '[data-id="input-register-email"]' ).first().val() );
window.WIZARD_DATA.password = $.trim( $( '[data-id="input-register-password"]' ).first().val() );
window.WIZARD_DATA.subscribedNews = $.trim( $( '[data-id="register-accept-newsletter"]' ).first().prop( 'checked' ) ? 1 : 0 );
pbRegisterWizard(
// onSuccess
function( res )
{
$( '[data-id="btnLaunchApp"]' ).first().attr( 'href', window.PB_CONFIG.url + '/#/auth/sso/' + res.data.session.token + '/dog' );
$( '[data-id="register-container"]' ).first().html(
' <div class="register-success">\n' +
' <svg class="rsvp-checkmark"\n' +
' xmlns="http://www.w3.org/2000/svg"\n' +
' viewBox="0 0 52 52">\n' +
' <circle class="rsvp-checkmark__circle" cx="26" cy="26" r="25" fill="none"/>\n' +
' <path class="rsvp-checkmark__check" fill="none" d="M14.1 27.2l7.1 7.2 16.7-16.8"/>\n' +
' </svg>\n' +
' </div>'
);
window.WIZARD_INDEX++;
pbWizardUpdateProgress();
setTimeout( function()
{
pbWizardNext( 'done' );
}, 1400 );
},
// onError
function()
{
$( '[data-id="section-wizard-form"]' ).hide();
$( '[data-id="registration-error"]' ).show();
}
);
break;
}
pbWizardUpdateProgress();
$bWizard.carousel( 'next' );
$('html, body').animate({
scrollTop: ( $( '#section-register' ).offset().top - 200 )
}, 700, 'easeInOutExpo', function(){
//window.location.hash = hash;
});
}
function pbWizardPrev()
{
window.WIZARD_INDEX--;
var $bWizard = $( '[data-id="wizard-carousel"]' ).first();
pbWizardUpdateProgress();
$bWizard.carousel( 'prev' );
}
function pbInit()
{
var xhr = new XMLHttpRequest(),
request = {
auth : {
version : 0,
sessionToken : null
},
c : 'Auth',
a: 'getSession',
params : { includeConfig: true }
};
xhr.onload = function() {
var response = xhr.responseText ? xhr.responseText : null;
if ( response )
{
try
{
response = JSON.parse(response);
}
catch( err ) {}
if ( response.hasOwnProperty( 'data' ) )
{
if ( response.data.hasOwnProperty( 'config' ) )
{
window.PB_CONFIG = response.data.config;
}
if ( response.data.hasOwnProperty( 'userProfile' ) )
{
window.PB_USERPROFILE = response.data.userProfile;
}
}
}
};
xhr.onabort = function() {};
xhr.onerror = function() {};
xhr.open( 'POST', 'api.php' );
xhr.setRequestHeader( "Content-Type", "application/json" );
xhr.send( JSON.stringify( request ) );
// Form
$( '[data-id="btn-register"]' ).first().click( function()
{
var $form = $( '[data-id="form-register"]' ).first();
$form.removeClass( 'was-validated' );
var isValid = $form.get(0).checkValidity();
$form.addClass( 'was-validated' );
$( '[data-id="error-email-exists"]' ).first().hide();
$( '[data-id="error-general"]' ).first().hide();
if ( isValid )
{
$(this).attr( 'disabled', true );
var data = {};
data.teamname = $.trim( $( '[data-id="input-register-teamname"]' ).first().val() );
data.teamCategory = $.trim( $( '[data-id="input-team-category"]' ).first().val() );
data.affiliateId = $.trim( $( '[data-id="input-affiliate-id"]' ).first().val() );
data.email = $.trim( $( '[data-id="input-register-email"]' ).first().val() );
data.password = $.trim( $( '[data-id="input-register-password"]' ).first().val() );
data.firstname = $.trim( $( '[data-id="input-register-firstname"]' ).first().val() );
data.lastname = $.trim( $( '[data-id="input-register-lastname"]' ).first().val() );
data.subscribedNews = $.trim( $( '[data-id="register-accept-newsletter"]' ).first().prop( 'checked' ) ? 1 : 0 );
pbRegister( data );
}
});
pbInitWizard();
}

+ 5
- 0
src/client/dog/backup/assets/js/popper.min.js
File diff suppressed because it is too large
Näytä tiedosto


+ 15
- 0
src/client/dog/backup/assets/js/slick.min.js
File diff suppressed because it is too large
Näytä tiedosto


BIN
src/client/dog/backup/heads/001.png Näytä tiedosto

Before After
Leveys: 141  |  Korkeus: 174  |  Koko: 42 KiB

BIN
src/client/dog/backup/heads/002.png Näytä tiedosto

Before After
Leveys: 124  |  Korkeus: 117  |  Koko: 31 KiB

BIN
src/client/dog/backup/heads/003.png Näytä tiedosto

Before After
Leveys: 370  |  Korkeus: 373  |  Koko: 212 KiB

BIN
src/client/dog/backup/heads/004.png Näytä tiedosto

Before After
Leveys: 174  |  Korkeus: 172  |  Koko: 43 KiB

BIN
src/client/dog/backup/heads/005.png Näytä tiedosto

Before After
Leveys: 265  |  Korkeus: 274  |  Koko: 130 KiB

Some files were not shown because too many files changed in this diff

Ladataan…
Peruuta
Tallenna