Datepicker in a User Custom field

Is it possible to add a class to a custom user field to use a datepicker.

Thanks

Edit - The Final Solution:

<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">


<script type="text/discourse-plugin" version="0.8">
$( document ).ajaxComplete(function() {
    api.onPageChange((url) =>{
        if (url.match(/\/preferences\/profile/)) {
        	$( function() {
        		var control = $("label:contains('Quit Smoking Date')").next('div.controls');
        		$(control).find('input').addClass('quitDate');
        		$( ".quitDate" ).datepicker();
        	});
	 }
    });
});
</script>

5 « J'aime »

It should already work with this class : div.public-user-field.nameofthefield

For example a custom field Book : div.public-user-field.book

1 « J'aime »

And if it is “Quit Smoking Date”? What then?

I got what I wanted to work using this:

A jQuery date picker in the user field input.

<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">


<script type="text/discourse-plugin" version="0.8">
$( document ).ajaxComplete(function() {
    api.onPageChange(() =>{
	$( function() {
		var control = $("label:contains('Quit Smoking Date')").next('div.controls');
		$(control).find('input').addClass('quitDate');
		$( ".quitDate" ).datepicker();
	});
    });
});
</script>

It would be nice to be able to detect the profile page URL using this but I couldn’t get it to work

api.onPageChange((url) => {
        if (url === '/' || url === '/latest' || url === '/top') {

quit-date-calendar

2 « J'aime »

Hey @Vaping_Community :slightly_smiling_face: Glad to see you figured out a solution!

For detecting the profile preferences page, this should work:

<script type="text/discourse-plugin" version="0.8">
    api.onPageChange((url) =>{
        if (url.match(/\/preferences\/profile/)) {
        	$(function() {
        		var control = $("label:contains('Quit Smoking Date')").next('div.controls');
        		$(control).find('input').addClass('quitDate');
        		$(".quitDate").datepicker();
        	});
        }
    });
</script>
6 « J'aime »

I will give this a try today, thank you very much :+1:

2 « J'aime »

Works Perfect, good job! :smile:

1 « J'aime »

Y a-t-il un plugin que je dois installer pour que cela fonctionne ? Je l’ai ajouté à l’en-tête de mon thème mais cela ne semble pas fonctionner pour moi.

Le code à jour pour la page de profil est :

<script type="text/discourse-plugin" version="1.4.0">
    api.onPageChange((url) =>{
        if (url.match(/\/preferences\/profile/)) {
            var userField = document.querySelector('.user-field-test-selector');
            
            if (userField) {
                var input = userField.querySelector('input');
                if (input) {
                    input.classList.add('testSelector');
                    input.type = 'date'; // Utilisation de l'entrée de date HTML5 native
                }
            }
        }
    });
</script>

Remplacez user-field-test-selector par le nom de classe correspondant :


input.classList.add('testSelector'); est facultatif et à ajouter uniquement si vous en avez besoin pour des modifications ultérieures, je pense.

Un autre script devrait être créé pour la fenêtre modale de création de compte.

1 « J'aime »

Serait-il possible de limiter cela à l’année seulement ? Nous souhaitons connaître l’âge approximatif de nos utilisateurs pour le suivi et la gestion de la diversité, mais nous ne voulons pas conserver leur date de naissance complète.

Est-il également possible d’utiliser ce type de méthode pour avoir un champ déroulant consultable (c’est-à-dire avec des centaines d’options) ?

1 « J'aime »

Des idées sur la façon d’attacher une classe au champ que je cible ? À défaut, est-il possible de remplacer la classe QueryySelector par un div id ?