Skip to content
Code-Schnipsel Gruppen Projekte

Revisionen vergleichen

Änderungen werden so angezeigt, als ob die Quellrevision mit der Zielrevision zusammengeführt würde. Erfahre mehr über den Vergleich von Revisionen.

Quelle

Zielprojekt auswählen
No results found

Ziel

Zielprojekt auswählen
  • quiqqer/frontend-users
1 Ergebnis
Änderungen anzeigen
Commits auf Quelle (3)
werden angezeigt mit 901 Ergänzungen und 798 Löschungen
<?php
/**
* This file contains package_quiqqer_invoice_ajax_frontend_address_getDelete
*/
/**
*
* @param int $addressId
* @return string
*/
QUI::$Ajax->registerFunction(
'package_quiqqer_frontend-users_ajax_frontend_profile_address_getDelete',
function ($addressId) {
$_REQUEST['delete'] = $addressId;
$Address = new QUI\FrontendUsers\Controls\Address\Address();
return QUI\ControlUtils::parse($Address);
},
['addressId'],
['Permission::checkUser']
);
Dieser Diff ist reduziert.
......@@ -108,10 +108,11 @@ define('package/quiqqer/frontend-users/bin/frontend/controls/login/Login', [
this.Loader.show();
}
var Elm = this.getElm();
const Elm = this.getElm(),
HeaderElm = Elm.querySelector('[data-name="header"]');
if (this.getAttribute('header') === false) {
Elm.getElement('h2').destroy();
if (this.getAttribute('header') === false && HeaderElm) {
HeaderElm.destroy();
}
this.$parseQuiControls();
......@@ -128,22 +129,24 @@ define('package/quiqqer/frontend-users/bin/frontend/controls/login/Login', [
}
QUIAjax.get('package_quiqqer_frontend-users_ajax_frontend_login_getControl', function(result) {
var Ghost = new Element('div', {
const Ghost = new Element('div', {
html: result
});
if (self.getAttribute('header') === false) {
Ghost.getElement('h2').destroy();
const HeaderElm = Ghost.querySelector('[data-name="header"]');
if (self.getAttribute('header') === false && HeaderElm) {
HeaderElm.destroy();
}
self.getElm().set(
'html',
Ghost.getElement('.quiqqer-fu-login').get('html')
Ghost.querySelector('.quiqqer-fu-login').get('html')
);
self.Loader.inject(self.$Elm);
Ghost.getElements('style').inject(self.getElm());
Ghost.querySelector('style').inject(self.getElm());
self.$parseQuiControls();
}, {
......@@ -161,7 +164,7 @@ define('package/quiqqer/frontend-users/bin/frontend/controls/login/Login', [
var self = this;
QUI.parse(this.getElm()).then(function() {
var Login = self.getElm().getElement('.quiqqer-fu-login-container');
var Login = self.getElm().querySelector('[data-name="login-container"]');
// already logged in
if (!Login) {
......@@ -174,6 +177,7 @@ define('package/quiqqer/frontend-users/bin/frontend/controls/login/Login', [
Login.setStyle('opacity', 0);
Login.setStyle('display', null);
Login.setStyle('positino', 'relative');
self.getElm().getElements('form[name="quiqqer-fu-login-email"]').addEvent('submit', function(event) {
event.stop();
......@@ -185,15 +189,17 @@ define('package/quiqqer/frontend-users/bin/frontend/controls/login/Login', [
var emailAddress = self.getAttribute('emailAddress');
if (emailAddress) {
self.getElm().getElement('form[name="quiqqer-fu-login-email"]').getElement('input[name="username"]').value = emailAddress;
self.getElm().querySelector('form[name="quiqqer-fu-login-email"]').querySelector(
'input[name="username"]').value = emailAddress;
self.getElm().getElement('form[name="quiqqer-fu-login-email"]').getElement('input[name="password"]').focus();
self.getElm().querySelector('form[name="quiqqer-fu-login-email"]').querySelector(
'input[name="password"]').focus();
}
self.getElm().getElements('.quiqqer-fu-login-social-entry').addEvent('click', self.$auth);
self.getElm().getElements('[data-name="social-login-form"]').addEvent('click', self.$auth);
self.getElm().getElements(
'.quiqqer-fu-login-forget-password-link a'
'[data-name="forgot-password-link"] a'
).addEvent('click', function(event) {
event.stop();
self.openForgottenPassword();
......@@ -213,9 +219,8 @@ define('package/quiqqer/frontend-users/bin/frontend/controls/login/Login', [
self.sendForgottenPassword();
});
// submit events
var container = self.getElm().getElements('.quiqqer-fu-login-social-entry-control');
var container = self.getElm().getElements('[data-name="social-login-controlContainer"]');
var i, len, Control, ControlDom;
for (i = 0, len = container.length; i < len; i++) {
......@@ -225,7 +230,7 @@ define('package/quiqqer/frontend-users/bin/frontend/controls/login/Login', [
//Control.addEvent('');
}
self.getElm().getElements('form.quiqqer-fu-login-social-entry').addEvents({
self.getElm().getElements('[data-name="social-login-form"]').addEvents({
submit: self.$authBySocial
});
......@@ -258,7 +263,7 @@ define('package/quiqqer/frontend-users/bin/frontend/controls/login/Login', [
}
if (submitauth) {
var Form = self.getElm().getElement('form[data-authenticator-hash="' +
var Form = self.getElm().querySelector('form[data-authenticator-hash="' +
self.getAttribute('submitauth') + '"]');
if (Form) {
......@@ -273,7 +278,7 @@ define('package/quiqqer/frontend-users/bin/frontend/controls/login/Login', [
*/
authByEmail: function() {
var self = this,
Form = this.getElm().getElement('form[name="quiqqer-fu-login-email"]');
Form = this.getElm().querySelector('form[name="quiqqer-fu-login-email"]');
if (this.getAttribute('showLoader')) {
this.Loader.show();
......@@ -402,8 +407,8 @@ define('package/quiqqer/frontend-users/bin/frontend/controls/login/Login', [
* @param Form
*/
$showSocialLoader: function(Form) {
var Icon = Form.getElement('.quiqqer-fu-login-social-entry-icon');
var Loader = Form.getElement('.quiqqer-fu-login-social-entry-loader');
var Icon = Form.querySelector('[data-name="social-login-entry-icon"]');
var Loader = Form.querySelector('[data-name="social-login-entry-loader"]');
Loader.setStyle('opacity', 0);
Loader.setStyle('display', 'inline-block');
......@@ -430,8 +435,8 @@ define('package/quiqqer/frontend-users/bin/frontend/controls/login/Login', [
* @param Form
*/
$hideSocialLoader: function(Form) {
var Icon = Form.getElement('.quiqqer-fu-login-social-entry-icon');
var Loader = Form.getElement('.quiqqer-fu-login-social-entry-loader');
var Icon = Form.querySelector('[data-name="social-login-entry-icon"]');
var Loader = Form.querySelector('[data-name="social-login-entry-loader"]');
Icon.setStyle('opacity', 0);
Icon.setStyle('display', 'inline-block');
......@@ -462,11 +467,11 @@ define('package/quiqqer/frontend-users/bin/frontend/controls/login/Login', [
var Target = event.target;
if (!Target.hasClass('quiqqer-fu-login-social-entry')) {
Target = Target.getParent('.quiqqer-fu-login-social-entry');
if (Target.getAttribute('data-name') !== 'social-login-form') {
Target = Target.getAttribute('[data-name="social-login-form"]');
}
var Container = Target.getElement('.quiqqer-fu-login-social-entry-control');
var Container = Target.getElement('[data-name="social-login-controlContainer"]');
var ControlDom = Container.getFirst();
var Control = QUI.Controls.getById(ControlDom.get('data-quiid'));
......@@ -512,18 +517,26 @@ define('package/quiqqer/frontend-users/bin/frontend/controls/login/Login', [
* opens the password forgotten sheet
*/
openForgottenPassword: function() {
var Reset = this.getElm().getElement('.quiqqer-fu-login-forget-password-reset');
var Reset = this.getElm().querySelector('[data-name="password-reset"]');
if (!Reset) {
return;
}
const Login = this.getElm().getElement('.quiqqer-fu-login-container');
// set these styles to make the animation work correctly when using _basic files
Reset.style.position = 'absolute';
Reset.style.left = 0;
Reset.style.top = 0;
Reset.style.width = '100%';
Reset.style.zIndex = 1;
Reset.style.opacity = 0;
const Login = this.getElm().querySelector('[data-name="login-container"]');
Login.style.height = Login.offsetHeight + 'px';
const LoginInner = this.getElm().getElement('.quiqqer-fu-login-container__inner');
const LoginInner = this.getElm().querySelector('[data-name="login-container-inner"]');
// set these styles to make the animation work correctly when using _basic files
Reset.setStyle('opacity', 0);
Reset.setStyle('left', -50);
Reset.setStyle('display', 'block');
......@@ -556,9 +569,7 @@ define('package/quiqqer/frontend-users/bin/frontend/controls/login/Login', [
* @param {Object} error
*/
$onUserLoginError: function(Control, error) {
var ActivationInfoBox = this.$Elm.getElement(
'.quiqqer-fu-login-activation-info'
);
var ActivationInfoBox = this.$Elm.querySelector('[data-name="activation-info"]');
ActivationInfoBox.set('html', '');
......@@ -592,14 +603,14 @@ define('package/quiqqer/frontend-users/bin/frontend/controls/login/Login', [
var email = this.getAttribute('emailAddress');
if (!email) {
var Form = this.getElm().getElement('form[name="quiqqer-fu-login-email"]');
var Form = this.getElm().querySelector('form[name="quiqqer-fu-login-email"]');
if (!Form) {
showResendError();
return;
}
email = Form.getElement('input[name="username"]').value.trim();
email = Form.querySelector('input[name="username"]').value.trim();
}
new ResendActivationLinkBtn({
......@@ -626,16 +637,16 @@ define('package/quiqqer/frontend-users/bin/frontend/controls/login/Login', [
* close the password reset
*/
closeForgottenPassword: function() {
var Reset = this.getElm().getElement('.quiqqer-fu-login-forget-password-reset');
var Reset = this.getElm().querySelector('[data-name="password-reset"]');
if (!Reset) {
return;
}
const Login = this.getElm().getElement('.quiqqer-fu-login-container');
const Login = this.getElm().querySelector('[data-name="login-container"]');
Login.style.height = Login.offsetHeight + 'px';
const LoginInner = this.getElm().getElement('.quiqqer-fu-login-container__inner');
const LoginInner = this.getElm().querySelector('[data-name="login-container-inner"]');
if (LoginInner) {
moofx(LoginInner).animate({
......@@ -669,9 +680,10 @@ define('package/quiqqer/frontend-users/bin/frontend/controls/login/Login', [
sendForgottenPassword: function() {
var self = this,
Elm = this.getElm(),
SubmitBtn = Elm.getElement('.quiqqer-fu-login-forget-password-reset [type="submit"]'),
EmailInput = Elm.getElement('.quiqqer-fu-login-forget-password-reset [name="email"]'),
Section = Elm.getElement('.quiqqer-fu-login-forget-password-reset section');
PasswordReset = Elm.querySelector('[data-name="password-reset"]'),
SubmitBtn = PasswordReset.querySelector('[type="submit"]'),
EmailInput = PasswordReset.querySelector('[name="email"]'),
Section = PasswordReset.querySelector('[data-name="password-reset-inner"]');
if (EmailInput.value === '') {
return Promise.resolve();
......
......@@ -12,15 +12,15 @@ define('package/quiqqer/frontend-users/bin/frontend/controls/profile/ChangePassw
'Locale'
], function (QUIControl, QUIControlUtils, QUIFormUtils, QUILocale) {
"use strict";
], function(QUIControl, QUIControlUtils, QUIFormUtils, QUILocale) {
'use strict';
var lg = 'quiqqer/frontend-users';
return new Class({
Extends: QUIControl,
Type : 'package/quiqqer/frontend-users/bin/frontend/controls/profile/ChangePassword',
Type: 'package/quiqqer/frontend-users/bin/frontend/controls/profile/ChangePassword',
Binds: [
'$onInject',
......@@ -30,12 +30,12 @@ define('package/quiqqer/frontend-users/bin/frontend/controls/profile/ChangePassw
'$hideSuccess'
],
initialize: function (options) {
initialize: function(options) {
this.parent(options);
this.$ErrorContainer = null;
this.$ErrorContainer = null;
this.$SuccessContainer = null;
this.$ProfileControl = null;
this.$ProfileControl = null;
this.addEvents({
onImport: this.$onImport
......@@ -45,9 +45,9 @@ define('package/quiqqer/frontend-users/bin/frontend/controls/profile/ChangePassw
/**
* event: on import
*/
$onImport: function () {
var self = this;
var Elm = this.getElm();
$onImport: function() {
var self = this;
var Elm = this.getElm();
var PasswordOldInput = Elm.getElement('input[name="passwordOld"]');
if (PasswordOldInput) {
......@@ -60,30 +60,30 @@ define('package/quiqqer/frontend-users/bin/frontend/controls/profile/ChangePassw
return;
}
this.$ErrorContainer = Elm.getElement('.quiqqer-frontendUsers-changepassword-error');
this.$SuccessContainer = Elm.getElement('.quiqqer-frontendUsers-changepassword-success');
this.$ErrorContainer = Elm.querySelector('[data-name="msg-error"]');
this.$SuccessContainer = Elm.querySelector('[data-name="msg-success"]');
QUIControlUtils.getControlByElement(
Elm.getParent('.quiqqer-frontendUsers-controls-profile')
).then(function (ProfileControl) {
).then(function(ProfileControl) {
self.$ProfileControl = ProfileControl;
self.$ProfileControl.addEvents({
onSave : function () {
onSave: function() {
QUIFormUtils.setDataToForm({
'passwordOld' : '',
'passwordNew' : '',
'passwordOld': '',
'passwordNew': '',
'passwordNewConfirm': ''
}, Form);
},
onSaveEnd : function () {
onSaveEnd: function() {
self.$showSuccess();
},
onSaveError: function (Control, error) {
onSaveError: function(Control, error) {
self.$showError(error.getMessage());
}
});
}, function () {
}, function() {
// nothing
});
},
......@@ -93,7 +93,7 @@ define('package/quiqqer/frontend-users/bin/frontend/controls/profile/ChangePassw
*
* @param {String} msg
*/
$showError: function (msg) {
$showError: function(msg) {
this.$hideSuccess();
this.$ErrorContainer.set('html', msg);
......@@ -105,7 +105,7 @@ define('package/quiqqer/frontend-users/bin/frontend/controls/profile/ChangePassw
/**
* Show error msg
*/
$hideError: function () {
$hideError: function() {
this.$ErrorContainer.setStyle('display', 'none');
this.$ProfileControl.resize();
},
......@@ -113,7 +113,7 @@ define('package/quiqqer/frontend-users/bin/frontend/controls/profile/ChangePassw
/**
* Show success msg
*/
$showSuccess: function () {
$showSuccess: function() {
this.$hideError();
this.$SuccessContainer.set(
......@@ -128,7 +128,7 @@ define('package/quiqqer/frontend-users/bin/frontend/controls/profile/ChangePassw
/**
* Hide success msg
*/
$hideSuccess: function () {
$hideSuccess: function() {
this.$SuccessContainer.setStyle('display', 'none');
this.$ProfileControl.resize();
}
......
......@@ -11,15 +11,15 @@ define('package/quiqqer/frontend-users/bin/frontend/controls/profile/DeleteAccou
'Locale',
'Ajax'
], function (QUIControl, QUIConfirm, QUILocale, QUIAjax) {
"use strict";
], function(QUIControl, QUIConfirm, QUILocale, QUIAjax) {
'use strict';
var lg = 'quiqqer/frontend-users';
return new Class({
Extends: QUIControl,
Type : 'package/quiqqer/frontend-users/bin/frontend/controls/profile/DeleteAccount',
Type: 'package/quiqqer/frontend-users/bin/frontend/controls/profile/DeleteAccount',
Binds: [
'$onImport',
......@@ -27,11 +27,11 @@ define('package/quiqqer/frontend-users/bin/frontend/controls/profile/DeleteAccou
],
options: {
username : '',
username: '',
deletestarted: 0
},
initialize: function (options) {
initialize: function(options) {
this.parent(options);
this.addEvents({
......@@ -42,24 +42,24 @@ define('package/quiqqer/frontend-users/bin/frontend/controls/profile/DeleteAccou
/**
* event: on import
*/
$onImport: function () {
$onImport: function() {
var Elm = this.getElm();
var SubmitBtn = Elm.getElement('button.quiqqer-frontendUsers-saveButton'),
var SubmitBtn = Elm.querySelector('[type="submit"]'),
confirmed = false;
if (!SubmitBtn) {
return;
}
var self = this;
var self = this;
var username = this.getAttribute('username');
if (!username) {
username = '';
}
SubmitBtn.addEvent('click', function (event) {
SubmitBtn.addEvent('click', function(event) {
if (confirmed || self.getAttribute('deletestarted')) {
return;
}
......@@ -68,50 +68,51 @@ define('package/quiqqer/frontend-users/bin/frontend/controls/profile/DeleteAccou
new QUIConfirm({
maxHeight: 350,
maxWidth: 600,
autoclose: true,
information: QUILocale.get(lg, 'controls.profile.DeleteAccount.confirm.information', {
username: username
}),
title : QUILocale.get(lg, 'controls.profile.DeleteAccount.confirm.title'),
texticon : 'fa fa-trash',
text : QUILocale.get(lg, 'controls.profile.DeleteAccount.confirm.text'),
icon : 'fa fa-trash',
title: QUILocale.get(lg, 'controls.profile.DeleteAccount.confirm.title'),
texticon: 'fa fa-trash',
text: QUILocale.get(lg, 'controls.profile.DeleteAccount.confirm.text'),
icon: 'fa fa-trash',
cancel_button: {
text : QUILocale.get('quiqqer/system', 'cancel'),
text: QUILocale.get('quiqqer/system', 'cancel'),
textimage: 'fa fa-remove'
},
ok_button: {
text : QUILocale.get(lg, 'controls.profile.DeleteAccount.confirm.btn'),
text: QUILocale.get(lg, 'controls.profile.DeleteAccount.confirm.btn'),
textimage: 'fa fa-trash'
},
events: {
onOpen : function (Popup) {
onOpen: function(Popup) {
var SubmitBtn = Popup.getButton('submit');
SubmitBtn.disable();
Popup.Loader.show();
self.$checkDeleteAccount().then(function () {
self.$checkDeleteAccount().then(function() {
SubmitBtn.enable();
Popup.Loader.hide();
}, function (Error) {
}, function(Error) {
Popup.setAttribute(
'information',
QUILocale.get(lg, 'controls.profile.DeleteAccount.confirm.information_error', {
username: username,
error : Error.getMessage()
error: Error.getMessage()
})
);
Popup.Loader.hide();
});
},
onSubmit: function (Popup) {
onSubmit: function(Popup) {
confirmed = true;
Popup.close();
SubmitBtn.click();
......@@ -126,11 +127,11 @@ define('package/quiqqer/frontend-users/bin/frontend/controls/profile/DeleteAccou
*
* @return {Promise}
*/
$checkDeleteAccount: function () {
return new Promise(function (resolve, reject) {
$checkDeleteAccount: function() {
return new Promise(function(resolve, reject) {
QUIAjax.get('package_quiqqer_frontend-users_ajax_frontend_profile_checkDeleteAccount', resolve, {
'package': 'quiqqer/frontend-users',
onError : reject,
onError: reject,
showError: false
});
});
......
......@@ -83,7 +83,7 @@ define('package/quiqqer/frontend-users/bin/frontend/controls/profile/Profile', [
resize: function () {
var self = this,
Elm = this.getElm(),
Animation = Elm.getElement('.quiqqer-frontendUsers-controls-profile-categoryContentAnimation');
Animation = Elm.querySelector('[data-name="content-animated"]');
return new Promise(function (resolve) {
self.$parseContent().then(() => {
......@@ -128,7 +128,7 @@ define('package/quiqqer/frontend-users/bin/frontend/controls/profile/Profile', [
this.$bindCategoriesEvents();
this.openSetting().then(function () {
var Form = Elm.getElement('.quiqqer-frontendUsers-controls-profile-categoryContent');
var Form = Elm.querySelector('[data-name="form"]');
var category = Form.get('data-category');
var settings = Form.get('data-setting');
......@@ -155,7 +155,7 @@ define('package/quiqqer/frontend-users/bin/frontend/controls/profile/Profile', [
this.$parseContent().then(function () {
self.$addFormEvents();
var Form = Elm.getElement('.quiqqer-frontendUsers-controls-profile-categoryContent');
var Form = Elm.querySelector('[data-name="form"]');
if (!Form) {
return;
......@@ -255,9 +255,7 @@ define('package/quiqqer/frontend-users/bin/frontend/controls/profile/Profile', [
category = category || false;
settings = settings || false;
var Animation = Elm.getElement(
'.quiqqer-frontendUsers-controls-profile-categoryContentAnimation'
);
var Animation = Elm.querySelector('[data-name="content-animated"]');
var Animate = new Promise(function (resolve) {
if (!Animation) {
......@@ -280,12 +278,11 @@ define('package/quiqqer/frontend-users/bin/frontend/controls/profile/Profile', [
return new Promise(function (resolve, reject) {
QUIAjax.get('package_quiqqer_frontend-users_ajax_frontend_profile_getControl', function (result) {
var height = self.$Elm.getSize().y;
var Form = self.$Elm.getElement(
'.quiqqer-frontendUsers-controls-profile-categoryContent'
);
var Form = self.$Elm.querySelector('[data-name="form"]');
if (!result) {
result = '<div class="quiqqer-frontendUsers-controls-profile-categoryContentAnimation">' +
result = '<div class="quiqqer-frontendUsers-controls-profile-categoryContentAnimation" ' +
'data-name="content-animated">' +
QUILocale.get(lg, 'controls.profile.Profile.setting_error') +
'</div>';
}
......@@ -296,7 +293,7 @@ define('package/quiqqer/frontend-users/bin/frontend/controls/profile/Profile', [
// build the form
if (!Form) {
var Control = Ghost.getElement(
var Control = Ghost.querySelector(
'[data-qui="package/quiqqer/frontend-users/bin/frontend/controls/profile/Profile"]'
);
......@@ -305,26 +302,14 @@ define('package/quiqqer/frontend-users/bin/frontend/controls/profile/Profile', [
}
self.$Elm.set('html', Control.get('html'));
Animation = Elm.getElement(
'.quiqqer-frontendUsers-controls-profile-categoryContentAnimation'
);
// Form = self.$Elm.getElement(
// '.quiqqer-frontendUsers-controls-profile-categoryContent'
// );
Animation = Elm.querySelector('[data-name="content-animated"]');
self.$bindCategoriesEvents();
}
var styles = Ghost.getElements('style');
var scripts = Ghost.getElements('script');
var Content = Ghost.getElement(
'.quiqqer-frontendUsers-controls-profile-categoryContentAnimation'
);
//Form.setStyle('height', height);
var Content = Ghost.querySelector('[data-name="content-animated"]');
if (!Content) {
return;
......@@ -378,56 +363,45 @@ define('package/quiqqer/frontend-users/bin/frontend/controls/profile/Profile', [
* init category events
*/
$bindCategoriesEvents: function () {
var i, len, Header;
var self = this;
var Elm = this.getElm();
var categories = Elm.getElements('.quiqqer-fupc-category');
let i, len, Header;
const self = this;
const Elm = this.getElm();
const categories = Elm.querySelectorAll('[data-name="nav-category"]');
var toggle = function () {
var Category = this;
if (!this.hasClass('quiqqer-fupc-category')) {
Category = this.getParent('.quiqqer-fupc-category');
if (this.getAttribute('data-name') !== 'nav-category') {
Category = this.getParent('[data-name="nav-category"]');
}
var Opener = Category.getElement('.quiqqer-fupc-category-header-opener');
Opener.removeClass('fa-arrow-circle-o-right');
Opener.removeClass('fa-arrow-circle-o-down');
if (Category.hasClass('quiqqer-fupc-category--open')) {
Category.removeClass('quiqqer-fupc-category--open');
Opener.addClass('fa-arrow-circle-o-right');
if (Category.getAttribute('data-open') === "1") {
Category.setAttribute('data-open', 0);
return;
}
Category.addClass('quiqqer-fupc-category--open');
Opener.addClass('fa-arrow-circle-o-down');
Category.setAttribute('data-open', 1);
};
for (i = 0, len = categories.length; i < len; i++) {
Header = categories[i].getElement('.quiqqer-fupc-category-header');
new Element('span', {
'class': 'fa fa-arrow-circle-o-down quiqqer-fupc-category-header-opener'
}).inject(Header);
Header = categories[i].querySelector('[data-name="header"]');
Header.addEvent('click', toggle);
}
// category settings click
var items = Elm.getElements('.quiqqer-fupc-category-items-item');
const items = Elm.getElements('[data-name="nav-category-item"]');
items.addEvent('click', function (event) {
event.stop();
var Target = event.target;
let Target = event.target;
if (!Target.hasClass('quiqqer-fupc-category-items-item')) {
Target = Target.getParent('.quiqqer-fupc-category-items-item');
if (Target.getAttribute('data-name') !== 'nav-category-item') {
Target = Target.getParent('[data-name="nav-category-item"]');
}
var category = Target.getParent('.quiqqer-fupc-category').get('data-category'),
const category = Target.getParent('[data-name="nav-category"]').get('data-category'),
setting = Target.get('data-setting');
self.$setMenuItemActive(category, setting);
......@@ -437,10 +411,7 @@ define('package/quiqqer/frontend-users/bin/frontend/controls/profile/Profile', [
// mobile
var MobileCategories = Elm.getElement(
'.quiqqer-frontendUsers-controls-profile-categories-mobile select'
);
const MobileCategories = Elm.getElement('[name="profile-categories-mobile"]');
if (MobileCategories) {
if (self.$category && self.$settings) {
MobileCategories.value = self.$category + ':' + self.$settings;
......@@ -468,7 +439,7 @@ define('package/quiqqer/frontend-users/bin/frontend/controls/profile/Profile', [
* @return {Promise}
*/
save: function () {
var self = this;
const self = this;
this.fireEvent('saveBegin', [this]);
......@@ -523,7 +494,7 @@ define('package/quiqqer/frontend-users/bin/frontend/controls/profile/Profile', [
},
/**
* Set an menu item active
* Set a menu item active
*
* @param {String} category
* @param {String} settings
......@@ -537,10 +508,11 @@ define('package/quiqqer/frontend-users/bin/frontend/controls/profile/Profile', [
return;
}
this.$Elm.getElements('.quiqqer-fupc-category-items-item--active')
.removeClass('quiqqer-fupc-category-items-item--active');
this.$Elm.querySelectorAll('[data-active]').forEach((ActiveItem) => {
ActiveItem.removeAttribute('data-active');
});
Item.addClass('quiqqer-fupc-category-items-item--active');
Item.setAttribute('data-active', 1);
}
});
});
......@@ -62,7 +62,7 @@ define('package/quiqqer/frontend-users/bin/frontend/controls/profile/UserAvatar'
);
if (Node) {
Node.getElement('.quiqqer-fupc-category-items-item--active').click();
Node.getElement('[data-active="1"]').click();
}
});
......
.quiqqer-frontendUsers-userdata-email__hidden {
[data-hidden] {
display: none;
}
.quiqqer-frontendUsers-userdata-email-new-hint {
clear: both;
width: 100%;
float: left;
}
\ No newline at end of file
......@@ -17,15 +17,15 @@ define('package/quiqqer/frontend-users/bin/frontend/controls/profile/UserData',
'css!package/quiqqer/frontend-users/bin/frontend/controls/profile/UserData.css'
], function (QUI, QUIControl, QUIControlUtils, QUIFunctionUtils, QUILocale, Registration) {
"use strict";
], function(QUI, QUIControl, QUIControlUtils, QUIFunctionUtils, QUILocale, Registration) {
'use strict';
var lg = 'quiqqer/frontend-users';
return new Class({
Extends: QUIControl,
Type : 'package/quiqqer/frontend-users/bin/frontend/controls/profile/UserData',
Type: 'package/quiqqer/frontend-users/bin/frontend/controls/profile/UserData',
Binds: [
'$onInject',
......@@ -33,7 +33,7 @@ define('package/quiqqer/frontend-users/bin/frontend/controls/profile/UserData',
'$clearEmailErrorMsg'
],
initialize: function (options) {
initialize: function(options) {
this.parent(options);
this.$EmailErrorMsgElm = null;
......@@ -46,37 +46,41 @@ define('package/quiqqer/frontend-users/bin/frontend/controls/profile/UserData',
/**
* event: on import
*/
$onImport: function () {
var self = this;
var Elm = this.getElm();
var ChangeEmailElm = Elm.getElement('.quiqqer-frontendUsers-userdata-email-edit');
var EmailNewElm = Elm.getElement('.quiqqer-frontendUsers-userdata-email-new');
var EmailNewInput = Elm.getElement('input[name="emailNew"]');
var ProfileNode = Elm.getParent('.quiqqer-frontendUsers-controls-profile');
$onImport: function() {
const self = this;
const Elm = this.getElm();
const ChangeEmailElm = Elm.querySelector('[data-name="email-edit"]');
const EmailNewElm = Elm.querySelector('[data-name="email-new"]');
const EmailNewInput = Elm.querySelector('input[name="emailNew"]');
let ProfileNode = Elm.querySelector(
'[data-qui="package/quiqqer/frontend-users/bin/frontend/controls/profile/Profile"]'
);
if (ProfileNode) {
QUIControlUtils.getControlByElement(ProfileNode).then(function (ProfileControl) {
QUIControlUtils.getControlByElement(ProfileNode).then(function(ProfileControl) {
ProfileControl.addEvents({
onSave : function () {
EmailNewElm.addClass('quiqqer-frontendUsers-userdata-email__hidden');
onSave: function() {
EmailNewElm.addAttribute('data-hidden');
// EmailNewElm.addClass('quiqqer-frontendUsers-userdata-email__hidden');
EmailNewInput.value = '';
},
onSaveError: function () {
onSaveError: function() {
EmailNewInput.value = '';
EmailNewInput.focus();
}
});
}, function () {
}, function() {
// do nothing
});
}
ChangeEmailElm.addEvent('click', function () {
EmailNewElm.removeClass('quiqqer-frontendUsers-userdata-email__hidden');
ChangeEmailElm.addEvent('click', function() {
// EmailNewElm.removeClass('quiqqer-frontendUsers-userdata-email__hidden');
EmailNewElm.removeAttribute('data-hidden');
EmailNewInput.focus();
// resize profile
var ProfileNode = self.getElm().getParent(
ProfileNode = self.getElm().getParent(
'[data-qui="package/quiqqer/frontend-users/bin/frontend/controls/profile/Profile"]'
);
......@@ -84,22 +88,22 @@ define('package/quiqqer/frontend-users/bin/frontend/controls/profile/UserData',
return;
}
var Profile = QUI.Controls.getById(ProfileNode.get('data-quiid'));
const Profile = QUI.Controls.getById(ProfileNode.get('data-quiid'));
if (Profile) {
Profile.resize();
}
});
var CheckMail = function (event) {
var email = event.target.value.trim();
const CheckMail = function(event) {
const email = event.target.value.trim();
Promise.all([
Registration.emailSyntaxValidation(email),
Registration.emailValidation(email)
]).then(function (result) {
]).then(function(result) {
var emailSyntaxValid = result[0];
var emailValid = result[1];
var emailValid = result[1];
if (emailSyntaxValid && emailValid) {
self.$clearEmailErrorMsg();
......@@ -131,7 +135,7 @@ define('package/quiqqer/frontend-users/bin/frontend/controls/profile/UserData',
*
* @param {String} msg
*/
$showEmailErrorMsg: function (msg) {
$showEmailErrorMsg: function(msg) {
if (!this.$EmailErrorMsgElm) {
this.$EmailErrorMsgElm = new Element('div', {
'class': 'content-message-error'
......@@ -144,7 +148,7 @@ define('package/quiqqer/frontend-users/bin/frontend/controls/profile/UserData',
/**
* Hide error msg for e-mail change
*/
$clearEmailErrorMsg: function () {
$clearEmailErrorMsg: function() {
if (this.$EmailErrorMsgElm) {
this.$EmailErrorMsgElm.destroy();
this.$EmailErrorMsgElm = null;
......
......@@ -830,11 +830,24 @@
<en><![CDATA[Gravatar]]></en>
</locale>
<locale name="dialog.frontend-users.delete.address">
<locale name="dialog.frontend-users.btn.cancel">
<de><![CDATA[Abbrechen]]></de>
<en><![CDATA[Cancel]]></en>
</locale>
<locale name="dialog.frontend-users.address.delete.title">
<de><![CDATA[Adresse löschen]]></de>
<en><![CDATA[Delete address]]></en>
</locale>
<locale name="dialog.frontend-users.address.delete.message">
<de><![CDATA[Möchten Sie die Adresse wirklichen löschen?]]></de>
<en><![CDATA[Do you really want to delete the address?]]></en>
</locale>
<locale name="dialog.frontend-users.title">
<locale name="dialog.frontend-users.address.delete.btn">
<de><![CDATA[Adresse löschen]]></de>
<en><![CDATA[Delete address]]></en>
</locale>
<locale name="dialog.frontend-users.edit.title">
<de><![CDATA[Neue Adresse anlegen]]></de>
<en><![CDATA[Create new address]]></en>
</locale>
......
<section class="quiqqer-frontend-users-address-create">
<header>
<h1>{locale group="quiqqer/frontend-users" var="dialog.frontend-users.title"}</h1>
</header>
<h2>{locale group="quiqqer/frontend-users" var="dialog.frontend-users.title"}</h2>
{template_event name="quiqqer::frontend-users::user-address-create-begin" User=$User}
......@@ -55,12 +53,14 @@
{locale group="quiqqer/frontend-users" var="street_no"}
{if $settings.street_no.required}*{/if}
</span>
<input type="text" name="street" value="" autocomplete="shipping street-address" {if $settings.street_no.required}required{/if}
placeholder="{locale group='quiqqer/frontend-users' var='street'}"
/>
<input type="text" name="street_number" value=""
placeholder="{locale group='quiqqer/frontend-users' var='house_no'}"
/>
<div class="address-street--2-col">
<input type="text" name="street" value="" autocomplete="shipping street-address" {if $settings.street_no.required}required{/if}
placeholder="{locale group='quiqqer/frontend-users' var='street'}"
/>
<input type="text" name="street_number" value=""
placeholder="{locale group='quiqqer/frontend-users' var='house_no'}"
/>
</div>
</label>
{/if}
......@@ -95,7 +95,7 @@
{/if}
{if $settings.country.show}
<label class="quiqqer-frontendUsers-userdata-create-address-country">
<label class="quiqqer-frontendUsers-userdata-address-country">
<span>
{locale group="quiqqer/frontend-users" var="country"}
{if $settings.country.required}*{/if}
......@@ -142,7 +142,7 @@
{template_event name="quiqqer::frontend-users::user-address-create-end" User=$User}
<button type="submit" name="createSave" value="1" class="quiqqer-frontend-users-address-edit-button">
<button type="submit" name="createSave" value="1" class="btn btn-primary quiqqer-frontend-users-address-edit-button">
{locale group="quiqqer/frontend-users" var="dialog.frontend-users.create.address.btn"}
</button>
......
<section class="quiqqer-frontend-users-address-delete">
<header>
<h1>{locale group="quiqqer/frontend-users" var="ordering.step.title.Address.delete"}</h1>
</header>
<h2>{locale group="quiqqer/frontend-users" var="dialog.frontend-users.address.delete.title"}</h2>
<div class="quiqqer-frontend-users-address-delete-container">
{locale group="quiqqer/order" var="ordering.step.title.Address.delete.message"}
{locale group="quiqqer/frontend-users" var="dialog.frontend-users.address.delete.message"}
{$Address->render()}
<button type="submit" name="step" value="{$this->getName()}"
class="quiqqer-frontend-users-address-delete-container-deleteBtn"
>
{locale group="quiqqer/order" var="ordering.step.title.Address.delete.btn"}
{locale group="quiqqer/frontend-users" var="dialog.frontend-users.address.delete.btn"}
</button>
<input type="hidden" name="addressId" value="{$Address->getUUID()}"/>
......
<section class="quiqqer-frontend-users-address-edit">
<header>
<h1>{locale group="quiqqer/frontend-users" var="dialog.frontend-users.edit.title"}</h1>
</header>
<h2>{locale group="quiqqer/frontend-users" var="dialog.frontend-users.edit.title"}</h2>
{template_event name="quiqqer::frontend-users::user-address-edit-begin" User=$User Address=$Address}
......@@ -104,7 +102,7 @@
{/if}
{if $settings.country.show}
<label>
<label class="quiqqer-frontendUsers-userdata-address-country">
<span>
{locale group="quiqqer/system" var="country"}
{if $settings.country.required}*{/if}
......
.quiqqer-frontendUsers-manager,
.quiqqer-frontend-users-address {
float: left;
position: relative;
width: 100%;
}
.quiqqer-frontend-users-address-description {
border-bottom: 1px solid rgba(0, 0, 0, 0.1);
float: left;
padding-bottom: 10px;
width: 100%;
margin-bottom: 1.5rem;
}
.quiqqer-frontend-users-address-description-text {
float: left;
width: 100%;
}
......@@ -23,7 +18,7 @@
@media screen and (min-width: 768px) {
.quiqqer-frontend-users-address-description-button {
float: right;
margin-left: auto;
}
}
......@@ -33,97 +28,26 @@
}
}
/** container
================================================== */
.quiqqer-frontend-users-address-container {
background: #fff;
border: 1px solid #dedede;
height: 100%;
left: -50px;
outline: none;
opacity: 0;
position: absolute;
top: 0;
width: 100%;
}
.quiqqer-frontend-users-address-container-close {
cursor: pointer;
font-size: 20px;
line-height: 40px;
position: absolute;
right: 0;
text-align: center;
top: 0;
width: 40px;
}
.quiqqer-frontend-users-address-container-header {
float: left;
padding: 20px 40px 0 20px;
width: 100%;
}
.quiqqer-frontend-users-address-container-header header {
font-size: 22px;
padding: 0;
}
.quiqqer-frontend-users-address-container-header header h1 {
font-size: 22px;
}
.quiqqer-frontend-users-address-container-content {
float: left;
height: calc(100% - 40px);
margin-top: 40px;
overflow: auto;
width: 100%;
}
/** Address listing
================================================== */
address {
font-style: normal;
}
address .adr:not(:last-child) {
margin-bottom: 0.75rem;
}
address .fa {
width: 1.5rem;
}
.quiqqer-frontend-users-address-list {
display: flex;
flex-wrap: wrap;
float: left;
padding-bottom: 20px;
width: 100%;
display: grid;
gap: 1rem;
}
.quiqqer-frontend-users-address-list-entry {
--_padding: 0.5rem 1rem;
--_radius: var(--radius, var(--_qui-frontend-users-profile__radius));
--_border: 1px solid #ddd;
--_bg: var(--bg, var(--_qui-frontend-users-profile__bg-color));
min-width: 0;
border-radius: var(--_radius);
display: flex;
flex-direction: column;
margin-top: 10px;
overflow: hidden;
width: calc(50% - 5px);
}
@media screen and (hover: hover) {
.quiqqer-frontend-users-address-list-entry:hover {
background: rgba(0, 0, 0, 0.1);
}
}
.quiqqer-frontend-users-address-list-entry:nth-child(odd) {
margin-right: 5px;
}
.quiqqer-frontend-users-address-list-entry:nth-child(even) {
margin-left: 5px;
font-size: 0.875rem;
border: var(--_border);
}
.quiqqer-frontend-users-address-list-entry [type="radio"] {
......@@ -131,152 +55,67 @@ address .fa {
margin: 7px;
}
.quiqqer-frontend-users-address-list-entry header {
background: rgba(0, 0, 0, 0.1);
padding: 10px;
width: 100%;
.quiqqer-frontend-users-address-list-entry :where(header) {
padding: var(--_padding);
border-bottom: var(--_border);
font-weight: bold;
background: var(--_bg);
}
.quiqqer-frontend-users-address-list-entry header label {
.quiqqer-frontend-users-address-list-entry :where(header label) {
margin: 0;
padding: 0;
}
.quiqqer-frontend-users-address-list-entry address {
flex-grow: 1;
margin-bottom: 10px;
padding: 10px;
}
.quiqqer-frontend-users-address-list-entry-buttons {
padding: 0 10px 10px 0;
text-align: right;
}
/** address edit && create
================================================== */
.quiqqer-frontend-users-address-create,
.quiqqer-frontend-users-address-edit {
max-width: 600px;
width: 100%;
}
.quiqqer-frontend-users-address-create header,
.quiqqer-frontend-users-address-edit header {
margin-bottom: 20px;
padding: 0;
}
.quiqqer-frontend-users-address-create label,
.quiqqer-frontend-users-address-edit label {
clear: both;
display: inline-block;
width: 100%;
}
@media screen and (min-width: 768px) {
.quiqqer-frontend-users-address-create label span,
.quiqqer-frontend-users-address-edit label span {
float: left;
width: 50%
}
.quiqqer-frontend-users-address-create input,
.quiqqer-frontend-users-address-create select,
.quiqqer-frontend-users-address-create .qui-select,
.quiqqer-frontend-users-address-edit input,
.quiqqer-frontend-users-address-edit select,
.quiqqer-frontend-users-address-edit .qui-select {
float: left;
width: 50%
}
}
@media screen and (max-width: 767px) {
.quiqqer-frontend-users-address-edit select {
width: 100%;
}
.quiqqer-frontend-users-address-create select,
.quiqqer-frontend-users-address-create .qui-select,
.quiqqer-frontend-users-address-edit .qui-select {
float: none;
width: 100%;
}
padding: var(--_padding);
font-style: normal;
font-size: 0.875rem;
line-height: 1.5;
}
.quiqqer-frontend-users-address-create [name="street"],
.quiqqer-frontend-users-address-edit [name="street"] {
margin-bottom: 0.5rem;
.quiqqer-frontend-users-address-list-entry address .adr:not(:last-child) {
margin-bottom: 0.5em;
}
@media screen and (min-width: 768px) {
.quiqqer-frontend-users-address-create [name="street"],
.quiqqer-frontend-users-address-edit [name="street"] {
width: 30%;
}
.quiqqer-frontend-users-address-create [name="street_number"],
.quiqqer-frontend-users-address-edit [name="street_number"] {
margin-left: 10px;
width: calc(20% - 10px);
}
.quiqqer-frontend-users-address-create [name="street"],
.quiqqer-frontend-users-address-edit [name="street"],
.quiqqer-frontend-users-address-create [name="street_number"],
.quiqqer-frontend-users-address-edit [name="street_number"] {
float: left;
}
.quiqqer-frontend-users-address-edit-create,
.quiqqer-frontend-users-address-edit-button {
margin-left: 50%;
width: 50%;
}
.quiqqer-frontend-users-address-list-entry address .fa {
width: 1.5rem;
}
@media screen and (max-width: 767px) {
.quiqqer-frontend-users-address-edit-create,
.quiqqer-frontend-users-address-edit-button {
width: 100%;
}
.quiqqer-frontend-users-address-list-entry-buttons {
text-align: right;
border-top: var(--_border);
padding: 0.5rem 1rem;
display: flex;
justify-content: flex-end;
gap: 0.5rem;
flex-wrap: wrap;
}
.quiqqer-frontend-users-address-container-edit,
.quiqqer-frontend-users-address-container-create {
float: left;
padding: 0 20px 20px;
width: 100%;
/*****************/
/* Address popup */
/*****************/
.qui-window-popup--frontendUsers-profile .quiqqer-frontend-users-address-create {
max-width: 500px;
}
/** Rechnungsadresse löschen
================================================== */
.quiqqer-frontend-users-address-delete {
/************************/
/* Address delete popup */
/************************/
.qui-window-popup--frontendUsers-profile-address-delete .quiqqer-frontend-users-address-delete {
margin: 0 auto;
max-width: 600px;
width: 100%;
display: flex;
flex-direction: column;
align-items: center;
}
.quiqqer-frontend-users-address-delete-container-deleteBtn {
padding: 10px !important;
font-size: 14px !important;
}
.quiqqer-frontend-users-address-delete-container address {
margin: 20px auto;
}
/** Rechnungsadresse löschen - js
================================================== */
.quiqqer-frontend-users-address-container-delete {
text-align: center;
.quiqqer-frontend-users-address-delete-container :where(address) {
margin-top: 2rem;
background: var(--_qui-frontend-users-profile__popup__bg-color);
border-radius: var(--_qui-frontend-users-profile__popup__radius);
padding: 1rem;
font-style: normal;
}
.quiqqer-frontend-users-address-container-delete-message {
margin-bottom: 20px;
padding: 0 10px;
}
{template_event name="quiqqer::frontend-users::user-address-top" User=$User}
<section class="quiqqer-frontend-users-address quiqqer-frontendUsers-userdata-section">
<header>
<h2>{locale group="quiqqer/frontend-users" var="profile.address.category.title"}</h2>
</header>
<h2>{locale group="quiqqer/frontend-users" var="profile.address.category.title"}</h2>
<div class="quiqqer-frontend-users-address-description">
<div class="quiqqer-frontend-users-address-description-text">
{locale group="quiqqer/frontend-users" var="control.address.title.Address.description"}
</div>
<button name="create" class="quiqqer-frontend-users-address-description-button">
<button name="create" class="btn btn-secondary quiqqer-frontend-users-address-description-button">
<span class="fa fa-plus"></span>
<span>{locale group="quiqqer/frontend-users" var="control.address.title.Address.addButton"}</span>
</button>
......@@ -22,41 +20,41 @@
{if $User->getId()}
{* Logged in user *}
{foreach $addresses as $Address}
<div class="quiqqer-frontend-users-address-list-entry">
<header>
<label>
<span class="fa fa-address-card-o"></span>
{if $Address->getUUID() == $User->getAttribute('address')}
{locale group="quiqqer/frontend-users" var="control.address.header.defaultAddress.title"}
{else}
{locale group="quiqqer/frontend-users" var="control.address.header.title"}
{/if}
<input type="hidden"
name="address"
value="{$Address->getUUID()}"
>
</label>
</header>
{foreach $addresses as $Address}
<div class="quiqqer-frontend-users-address-list-entry" data-name="address">
<header>
<label>
<span class="fa fa-address-card-o"></span>
{if $Address->getUUID() == $User->getAttribute('address')}
{locale group="quiqqer/frontend-users" var="control.address.header.defaultAddress.title"}
{else}
{locale group="quiqqer/frontend-users" var="control.address.header.title"}
{/if}
<input type="hidden"
name="address"
value="{$Address->getUUID()}"
>
</label>
</header>
{$Address->render()}
{$Address->render()}
<div class="quiqqer-frontend-users-address-list-entry-buttons">
<button type="submit" name="edit" value="{$Address->getUUID()}">
<span class="fa fa-edit"></span>
<span>
{locale group="quiqqer/frontend-users" var="control.address.title.Address.editButton"}
</span>
</button>
<button type="submit" name="delete" value="{$Address->getUUID()}" class="btn btn-danger">
<span class="fa fa-trash"></span>
<span>
{locale group="quiqqer/frontend-users" var="control.address.title.Address.deleteButton"}
</span>
</button>
</div>
</div>
{/foreach}
<div class="quiqqer-frontend-users-address-list-entry-buttons">
<button type="submit" name="edit" value="{$Address->getUUID()}">
<span class="fa fa-edit"></span>
<span>
{locale group="quiqqer/frontend-users" var="control.address.title.Address.editButton"}
</span>
</button>
<button type="submit" name="delete" value="{$Address->getUUID()}" class="btn btn-danger">
<span class="fa fa-trash"></span>
<span>
{locale group="quiqqer/frontend-users" var="control.address.title.Address.deleteButton"}
</span>
</button>
</div>
</div>
{/foreach}
{/if}
</div>
......
......@@ -14,10 +14,10 @@
</div>
{else}
<section class="quiqqer-fu-login-container" style="display: none">
<div class="quiqqer-fu-login-container__inner">
<section class="quiqqer-fu-login-container" style="display: none" data-name="login-container">
<div class="quiqqer-fu-login-container__inner" data-name="login-container-inner">
{if $this->getAttribute('header')}
<h2>{locale group="quiqqer/frontend-users" var="control.login.title"}</h2>
<h2 data-name="header">{locale group="quiqqer/frontend-users" var="control.login.title"}</h2>
{/if}
<div class="quiqqer-fu-login-social">
......@@ -25,20 +25,21 @@
<form action=""
method="POST"
class="quiqqer-fu-login-social-entry"
data-name="social-login-form"
data-authenticator="{$entry.class}"
data-authenticator-hash="{$entry.class|md5}"
>
<span class="quiqqer-fu-login-social-entry-icon">
<span class="quiqqer-fu-login-social-entry-icon" data-name="social-login-entry-icon">
{if $entry.icon}
<span class="{$entry.Login->getAttribute('icon')}"></span>
{elseif $entry.image}
<img src="{$entry.Login->getAttribute('icon')}" alt="" />
{/if}
</span>
<span class="quiqqer-fu-login-social-entry-loader">
<span class="quiqqer-fu-login-social-entry-loader" data-name="social-login-entry-loader">
<span class="fa fa-spin fa-spinner fas fa-circle-notch"></span>
</span>
<div class="quiqqer-fu-login-social-entry-control">
<div class="quiqqer-fu-login-social-entry-control" data-name="social-login-controlContainer">
{$entry.Login->create()}
</div>
</form>
......@@ -53,7 +54,7 @@
{/if}
{/if}
<div class="quiqqer-fu-login-activation-info"></div>
<div class="quiqqer-fu-login-activation-info" data-name="activation-info"></div>
{if $this->getAttribute('mail')}
<form name="quiqqer-fu-login-email" class="quiqqer-fu-login-email">
......@@ -88,7 +89,7 @@
{/if}
{if $showPasswordReset}
<div class="quiqqer-fu-login-forget-password-link">
<div class="quiqqer-fu-login-forget-password-link" data-name="forgot-password-link">
<a href="#">
{locale group="quiqqer/frontend-users" var="control.login.forgotten.password"}
</a>
......@@ -97,8 +98,8 @@
</div>
{if $showPasswordReset}
<div class="quiqqer-fu-login-forget-password-reset" style="display: none;">
<section>
<div class="quiqqer-fu-login-forget-password-reset" style="display: none;" data-name="password-reset">
<section data-name="password-reset-inner">
<h2>{locale group="quiqqer/frontend-users" var="quiqqer.auth.login.password.title"}</h2>
<p>
......
......@@ -39,7 +39,10 @@ public function __construct(array $attributes = [])
$this->setAttributes($attributes);
$this->addCSSFile(dirname(__FILE__) . '/Login.css');
if (!defined('QUIQQER_CONTROL_TEMPLATE_USE_BASIC') || QUIQQER_CONTROL_TEMPLATE_USE_BASIC !== true) {
$this->addCSSFile(dirname(__FILE__) . '/Login.css');
}
$this->addCSSClass('quiqqer-fu-login');
$this->setJavaScriptControl(
......@@ -120,7 +123,7 @@ public function getBody(): string
'showPasswordReset' => $showPasswordReset
]);
return $Engine->fetch(dirname(__FILE__) . '/Login.html');
return $Engine->fetch($this->getTemplateFile());
}
/**
......
<noscript class="quiqqer-fu-login-noscript">
<div class="message-error">
{locale group="quiqqer/frontend-users" var="registrars.email.javascript_required"}
</div>
</noscript>
{if $SessionUser->getId() && $SessionUser->getId() >= 100}
<div class="quiqqer-fu-login-logged-in message-information">
{locale
group="quiqqer/frontend-users"
var="message.already.loged.in"
username=$SessionUser->getName()
}
</div>
{else}
<section class="quiqqer-fu-login-container" style="display: none" data-name="login-container">
<div class="quiqqer-fu-login-container__inner" data-name="login-container-inner">
{if $this->getAttribute('header')}
<h2 data-name="header">{locale group="quiqqer/frontend-users" var="control.login.title"}</h2>
{/if}
<div class="quiqqer-fu-login-social">
{foreach $authenticators as $entry}
<form action=""
method="POST"
class="quiqqer-fu-login-social-entry"
data-name="social-login-form"
data-authenticator="{$entry.class}"
data-authenticator-hash="{$entry.class|md5}"
>
<span class="quiqqer-fu-login-social-entry-icon" data-name="social-login-entry-icon">
{if $entry.icon}
<span class="{$entry.Login->getAttribute('icon')}"></span>
{elseif $entry.image}
<img src="{$entry.Login->getAttribute('icon')}" alt="" />
{/if}
</span>
<span class="quiqqer-fu-login-social-entry-loader" data-name="social-login-entry-loader">
<span class="fa fa-spin fa-spinner fas fa-circle-notch"></span>
</span>
<div class="quiqqer-fu-login-social-entry-control" data-name="social-login-controlContainer">
{$entry.Login->create()}
</div>
</form>
{/foreach}
</div>
{if $this->getAttribute('mail')}
{if count($authenticators)}
<div class="quiqqer-fu-login-between-text">
{locale group="quiqqer/frontend-users" var="control.login.message.between"}
</div>
{/if}
{/if}
<div class="quiqqer-fu-login-activation-info" data-name="activation-info"></div>
{if $this->getAttribute('mail')}
<form name="quiqqer-fu-login-email" class="quiqqer-fu-login-email">
<section class="quiqqer-fu-login-email-mailSection">
<label>
<span class="label">
{locale group="quiqqer/frontend-users" var="control.registration.sign.up.email.title"}
</span>
<span class="field">
<span class="icon fa fa-envelope"></span>
<input type="text" name="username" required autocomplete="email"/>
</span>
</label>
<label>
<span class="label">
{locale group="quiqqer/frontend-users" var="control.registration.sign.up.password.title"}
</span>
<span class="field">
<span class="icon fa fa-key"></span>
<input type="password" name="password" required autocomplete="off"/>
</span>
</label>
<div class="quiqqer-fu-login-email-buttons">
<button type="submit" name="mail-login">
{locale group="quiqqer/frontend-users" var="control.login.button"}
</button>
</div>
</section>
</form>
{/if}
{if $showPasswordReset}
<div class="quiqqer-fu-login-forget-password-link" data-name="forgot-password-link">
<a href="#">
{locale group="quiqqer/frontend-users" var="control.login.forgotten.password"}
</a>
</div>
{/if}
</div>
{if $showPasswordReset}
<div class="quiqqer-fu-login-forget-password-reset" style="display: none;" data-name="password-reset">
<section data-name="password-reset-inner">
<h2>{locale group="quiqqer/frontend-users" var="quiqqer.auth.login.password.title"}</h2>
<p>
{locale group="quiqqer/system" var="quiqqer.auth.login.password.message"}
</p>
<label>
<span>
{locale group="quiqqer/system" var="quiqqer.auth.login.label.email"}
</span>
<input type="email" value="" name="email"/>
</label>
<button type="submit" class="login qui-button btn-green reset-password">
<span>{locale group='quiqqer/core' value='controls.users.auth.quiqqerlogin.btn.password_reset'}</span>
</button>
<button name="cancel" type="reset">
{locale group='quiqqer/core' value='cancel'}
</button>
</section>
</div>
{/if}
</section>
{/if}
.quiqqer-frontendUsers-controls-profile {
float: left;
width: 100%;
--_qui-frontend-users-profile__bg-color: var(--qui-frontend-users-profile__bg-color, #f5f5f5);
--_qui-frontend-users-profile__radius: var(--qui-frontend-users-profile__radius, 0.5rem);
--_qui-frontend-users-profile__content-maxWidth: var(--qui-frontend-users-profile__content-maxWidth, 600px);
--_qui-frontend-users-profile__sidebar-width: var(--qui-frontend-users-profile__sidebar-width, 300px);
--_qui-frontend-users-profile__sidebar-nav-item-outline--hover: var(--qui-frontend-users-profile__sidebar-nav-item-outline--hover, 2px solid currentColor);
--_qui-frontend-users-profile__sidebar-nav-item-bg-color--hover: var(--qui-frontend-users-profile__sidebar-nav-item-bg-color--hover, #f5f5f5);
display: flex;
gap: clamp(2rem, 10vw - 4rem, 4rem);
}
/** categories / tabs
==================================== */
.quiqqer-frontendUsers-controls-profile__sidebar {
min-width: 0;
width: var(--_qui-frontend-users-profile__sidebar-width);
flex-shrink: 0;
}
.quiqqer-frontendUsers-controls-profile-categories {
float: left;
padding-right: 10px;
width: 30%;
.quiqqer-frontendUsers-controls-profile__content {
min-width: 0;
flex-grow: 1;
}
.quiqqer-fupc-category {
float: left;
width: 100%;
@media screen and (max-width: 767px) {
.quiqqer-frontendUsers-controls-profile {
flex-direction: column;
gap: 2rem;
}
.quiqqer-frontendUsers-controls-profile__sidebar,
.quiqqer-frontendUsers-controls-profile__content {
width: 100%
}
}
.quiqqer-fupc-category-header {
padding: 5px;
position: relative;
width: 100%;
/* popup */
.qui-window-popup--frontendUsers-profile {
--_qui-frontend-users-profile__popup__bg-color: var(--qui-frontend-users-profile__popup__bg-color, #f5f5f5);
--_qui-frontend-users-profile__popup__radius: var(--qui-frontend-users-profile__popup__radius, 0.5rem);
}
/* general */
address {
font-style: normal;
}
address :where(.adr:not(:last-child)) {
margin-bottom: 0.5rem;
}
/*********************/
/* categories / tabs */
/*********************/
.quiqqer-fupc-category:not(:last-child) {
margin-bottom: 1rem;
}
.quiqqer-fupc-category-header-opener {
.quiqqer-fupc-category-header {
padding-block: 0.5em;
cursor: pointer;
line-height: 30px;
position: absolute;
right: 0;
font-weight: bold;
display: flex;
align-items: baseline;
}
.quiqqer-fupc-category-header__text {
flex-grow: 1;
}
.quiqqer-fupc-category-header__icon {
text-align: center;
width: 30px;
}
.quiqqer-fupc-category--open .quiqqer-fupc-category-header {
border-bottom: 1px solid #bebebe;
margin-bottom: 5px;
:where([data-open="1"]) .quiqqer-fupc-category-header__icon {
transform: rotate(90deg);
}
.quiqqer-fupc-category-items-item {
clear: both;
display: none;
width: 100%;
text-decoration: none;
font-weight: normal;
padding: 0.25em 0.5em;
border-radius: var(--_qui-frontend-users-profile__radius);
outline-offset: -2px;
color: inherit;
align-items: baseline;
}
.quiqqer-fupc-category-items-item--active {
background: rgba(0, 0, 0, 0.2);
.quiqqer-fupc-category-items-item:where([data-active]) {
background-color: var(--_qui-frontend-users-profile__sidebar-nav-item-bg-color--hover);
}
.quiqqer-fupc-category--open .quiqqer-fupc-category-items-item {
display: block;
}
.quiqqer-fupc-category-items-item:hover {
background: rgba(0, 0, 0, 0.2);
:where([data-open="1"]) .quiqqer-fupc-category-items-item {
display: flex;
}
.quiqqer-fupc-category-items-item-icon {
float: left;
line-height: 30px;
text-align: center;
width: 50px;
margin-right: 0.5em;
flex-shrink: 0;
}
:where(.quiqqer-fupc-category-items-item):hover {
outline: var(--_qui-frontend-users-profile__sidebar-nav-item-outline--hover);
color: inherit;
}
.quiqqer-fupc-category-items-item-text {
float: left;
width: calc(100% - 50px);
flex-grow: 1;
}
.quiqqer-frontendUsers-saveButton {
cursor: pointer;
}
/** category content
==================================== */
/*.quiqqer-frontendUsers-controls-profile-control > header:first-of-type > h2 {*/
/* margin-bottom: 2rem;*/
/*}*/
/* mobile */
.quiqqer-frontendUsers-controls-profile-categories-mobile {
display: none;
}
@media screen and (max-width: 767px) {
.quiqqer-frontendUsers-controls-profile-categories-mobile {
display: block;
}
.quiqqer-frontendUsers-controls-profile-categories-mobile-label {
width: 100%;
}
}
/********************/
/* category content */
/********************/
/* content */
.quiqqer-frontendUsers-profile-section:not(:last-child) {
margin-bottom: 2rem;
}
.quiqqer-frontendUsers-controls-profile-categoryContent {
float: left;
padding-left: 10px;
position: relative;
width: 70%;
max-width: var(--_qui-frontend-users-profile__content-maxWidth);
margin-inline: auto;
}
.quiqqer-frontendUsers-controls-profile-categoryContentAnimation {
float: left;
position: relative;
width: 100%;
}
.quiqqer-frontendUsers-controls-profile-control label {
clear: both;
float: left;
/* form basic styling */
.quiqqer-frontendUsers-controls-profile-control :where(h2) {
margin-top: 0;
}
.quiqqer-frontendUsers-controls-profile-control :where(label) {
margin-bottom: 1rem;
width: 100%;
display: block;
}
@media screen and (min-width: 768px) {
.quiqqer-frontendUsers-label {
float: left;
width: 30%;
}
/* todo fix in qui, no float: left */
.quiqqer-frontendUsers-userdata-address-country,
.quiqqer-frontendUsers-userdata-language,
.quiqqer-frontendUsers-userdata-invoiceaddress {
display: flow-root;
}
/** user
==================================== */
.quiqqer-frontendUsers-controls-profile-control :where(label > span:first-child) {
font-size: 0.875em;
margin-bottom: 0.5em;
opacity: 0.75;
}
.package-intranet-profile-birthday {
float: left;
width: 66%;
.quiqqer-frontendUsers-controls-profile-control :where(input:not([type="checkbox"], [type="radio"]), select, textarea) {
width: 100%;
}
.package-intranet-profile-birthday [name="birth_day"],
.package-intranet-profile-birthday [name="birth_year"] {
float: left;
width: calc(20% - 10px);
/* form basic styling: user data */
.quiqqer-frontendUsers-controls-profile-control :where(.address-street--2-col) {
display: grid;
grid-template-columns: 5fr minmax(5rem, 1fr);
gap: 1rem;
}
.package-intranet-profile-birthday [name="birth_month"] {
float: left;
margin: 0 10px;
width: 60%;
.quiqqer-frontendUsers-controls-profile-control select[name="country"] {
display: none;
}
/** responsive
==================================== */
.quiqqer-frontendUsers-controls-profile-control .qui-select {
width: 100%;
}
.quiqqer-frontendUsers-controls-profile-control :where(.qui-select .drop-icon) {
height: 36px;
}
/**************/
/* responsive */
/**************/
.quiqqer-frontendUsers-controls-profile-categories-mobile {
display: none;
}
@media (max-width: 767px) {
.quiqqer-frontendUsers-userdata-label {
display: block;
.quiqqer-frontendUsers-controls-profile-control input:not([type="checkbox"], [type="radio"]),
.quiqqer-frontendUsers-userdata-address-country-select,
.quiqqer-frontendUsers-controls-profile-categories-mobile select,
.package-intranet-profile-birthday,
.quiqqer-frontendUsers-userdata-email,
.quiqqer-frontendUsers-userdata-field {
width: 100%;
margin-bottom: 0.25rem;
}
/*.quiqqer-frontendUsers-controls-profile-userdata input[name="firstname"],*/
/*.quiqqer-frontendUsers-controls-profile-userdata input[name="lastname"],*/
/*.quiqqer-frontendUsers-controls-profile-userdata input[name="street_no"],*/
/*.quiqqer-frontendUsers-controls-profile-userdata input[name="zip"],*/
/*.quiqqer-frontendUsers-controls-profile-userdata input[name="city"],*/
.quiqqer-frontendUsers-controls-profile-control input,
.quiqqer-frontendUsers-userdata-address-country-select,
.package-intranet-profile-birthday,
.quiqqer-frontendUsers-userdata-email,
.quiqqer-frontendUsers-userdata-field {
display: block;
width: 100%;
}
.quiqqer-frontendUsers-controls-profile-categories-mobile {
clear: both;
display: inline;
float: left;
width: 100%;
}
.quiqqer-frontendUsers-controls-profile-categories-mobile select {
clear: both;
display: block;
width: 100%;
}
......@@ -171,8 +229,7 @@
}
.quiqqer-frontendUsers-controls-profile-categoryContent {
padding: 0;
width: 100%;
max-width: 100%;
}
.quiqqer-frontendUsers-saveButton {
......
{if !$Category}
<p>
{locale group="quiqqer/frontend-users" var="profile.no_categories_available"}
</p>
<div class="quiqqer-frontendUsers-controls-profile__noCategoriesInfo">
<p>
{locale group="quiqqer/frontend-users" var="profile.no_categories_available"}
</p>
</div>
{else}
<div class="quiqqer-frontendUsers-controls-profile__sidebar">
{if $this->getAttribute('menu')}
<div class="quiqqer-frontendUsers-controls-profile-categories">
{foreach $categories as $category}
<div class="quiqqer-fupc-category"
data-category="{$category.name}"
data-name="nav-category"
data-open="1"
>
<div class="quiqqer-fupc-category-header" data-name="header">
<span class="quiqqer-fupc-category-header__text">{$category.title}</span>
<span class="fa-solid fa-angle-right quiqqer-fupc-category-header__icon" data-name="opener"></span>
</div>
<div class="quiqqer-fu-profile-categories-category-items">
{foreach $category.items as $setting}
{assign var=active value=false}
{if $currentCategory == $category.name && $currentSetting == $setting.name}
{assign var=active value=true}
{/if}
<a href="{$Site->getUrlRewritten()}/{$category.name}/{$setting.name}"
class="quiqqer-fupc-category-items-item"
{if $active}data-active{/if}
data-name="nav-category-item"
data-setting="{$setting.name}"
>
{if $setting.icon}
<span class="fa-fw quiqqer-fupc-category-items-item-icon {$setting.icon}"></span>
{/if}
<span>{$setting.title}</span>
</a>
{/foreach}
</div>
</div>
{/foreach}
</div>
{/if}
{if $this->getAttribute('menu')}
<div class="quiqqer-frontendUsers-controls-profile-categories">
{foreach $categories as $category}
<div class="quiqqer-fupc-category quiqqer-fupc-category--open"
data-category="{$category.name}"
>
<div class="quiqqer-fupc-category-header">
{$category.title}
</div>
<div class="quiqqer-fu-profile-categories-category-items">
{foreach $category.items as $setting}
{assign var=active value=""}
{if $currentCategory == $category.name && $currentSetting == $setting.name}
{assign var=active value=" quiqqer-fupc-category-items-item--active"}
{/if}
<a href="{$Site->getUrlRewritten()}/{$category.name}/{$setting.name}"
class="quiqqer-fupc-category-items-item{$active}"
data-setting="{$setting.name}"
>
{if $setting.icon}
<span class="quiqqer-fupc-category-items-item-icon {$setting.icon}"></span>
{/if}
<span>{$setting.title}</span>
</a>
{/foreach}
</div>
{* mobile categories *}
<form action="" method="post" class="quiqqer-frontendUsers-controls-profile-categories-mobile">
<label class="quiqqer-frontendUsers-controls-profile-categories-mobile-label">
<select name="profile-categories-mobile">
{foreach $categories as $category}
<optgroup label="{$category.title}">
{foreach $category.items as $setting}
{assign var=active value=""}
{if $currentCategory == $category.name && $currentSetting == $setting.name}
{assign var=active value="selected"}
{/if}
<option value="{$category.name}:{$setting.name}" {$active} data-test="{$currentCategory} - {$category.name}" >
{$setting.title}
</option>
{/foreach}
</optgroup>
{/foreach}
</select>
</label>
</form>
</div>
{/foreach}
</div>
{/if}
<form action="" method="post">
<label class="quiqqer-frontendUsers-controls-profile-categories-mobile">
<select name="profile-categories">
{foreach $categories as $category}
<optgroup label="{$category.title}">
{foreach $category.items as $setting}
{assign var=active value=""}
{if $currentCategory== $category.name}
{assign var=active value=" selected"}
{/if}
<option value="{$category.name}:{$setting.name}"{$active}>
{$setting.title}
</option>
{/foreach}
</optgroup>
{/foreach}
</select>
</label>
</form>
<form class="quiqqer-frontendUsers-controls-profile-categoryContent"
method="post"
action=""
data-category="{$currentCategory}"
data-setting="{$currentSetting}"
>
<div class="quiqqer-frontendUsers-controls-profile-categoryContentAnimation">
{$Category->create()}
<input type="hidden" name="profile-save" value="1">
<div class="quiqqer-frontendUsers-controls-profile__content">
<form class="quiqqer-frontendUsers-controls-profile-categoryContent"
data-name="form"
method="post"
action=""
data-category="{$currentCategory}"
data-setting="{$currentSetting}"
>
<div class="quiqqer-frontendUsers-controls-profile-categoryContentAnimation" data-name="content-animated">
{$Category->create()}
<input type="hidden" name="profile-save" value="1">
</div>
</form>
</div>
</form>
{/if}
\ No newline at end of file