Archives du mot-clef jQuery

WordPress : Affichage des updates protected depuis Twitter

Lorsque j’ai commencé à twitter, le statut de mes updates était public. Je n’ai commencé à les protéger que depuis l’année dernière. Cela ne m’intéressait plus vraiment que des personnes que je ne connaissais pas puissent accéder à des informations sur ma vie. On pourra revenir – ou pas – sur les motivations d’utiliser Twitter pour faire la promotion de son branding personnel, ce n’est pas le débat ici.
Je fais donc en sorte de tenir une following liste limitée tout en bloquant et en refusant des followers. Ce n’est surtout pas pour snober qui que ce soit, mais les relations humaines sont complexes et ne peuvent pas se traduire par à un accès ou non à des messages …
Cependant, il s’avère que certains messages ont leur place sur une timeline publique. C’est une fonctionnalité que n’offre pas Twitter (pour l’instant?), c’est pourquoi j’ai demandé à Damien de développer O2Tweet, un plugin pour WordPress permettant de sélectionner les updates à extraire. Cela se fait grâce à des tags que l’utilisateur peut définir, pour ma part j’utilise celui-ci : ✍

J’ai ensuite réfléchis à l’intégration des updates sur ce blog. Ne voulant pas passer par un widget et donc charger plus encore les sidebars, j’ai adopté la mise en page que vous découvrez. Ce positionnement permet également aux messages d’être mis en avant de manière efficace. Pour faire défiler ces derniers, on en vient naturellement à l’idée du carrousel.

Les updates sont chargés en fin de page et repositionnés dans l’entête avec les CSS. En effet, l’interrogation de l’API qui se fait server side est dépendante de la charge liée à l’utilisation de l’API, il faut donc privilégier le contenu principal.
J’ai repris le code du widget proposé par le plugin O2Tweet pour l’adapter à mes besoins, à savoir une fonction appelée dans le footer.

function getTweets() {
	global $wpdb;
 
	// Fréquence de mise à jour
	$update = get_option('o2t_update');
 
	if ($update > 0) {
		$last_update = get_option('o2t_last_update');
		if (date('U') - $last_update >= $update * 60) {
			o2t_core::update_last_tweets();
		}
	}
 
	// Récupération des updates
	$tweets = $wpdb->get_results('SELECT * FROM ' . $wpdb->o2t . ' ORDER BY created_at DESC LIMIT ' . get_option('o2t_tweets_count'));
	if (sizeof($tweets) > 0) {
		// Affichage
		echo "\n<div id=\"mytweets_wrapper\">";
		echo '<ul id="' . get_option('o2t_ulid') . '" class="' . get_option('o2t_ulclasses') . '">';
		foreach($tweets as $tweet) {
			echo "\n";
			echo '<li>' . $tweet->content . '</li>';
		}
		echo "\n";
		echo '</ul>
		</div>
		<a href="#" id="mytweets_next"></a>';
	}
	else {
		echo "<span id=\"mytweets\">Le prochain Tweet arrive bientôt!</span>";
	}
}
#twitter_updates {
	background-image: url(img/twitter.png);
	background-repeat: no-repeat;
	background-color: #9AE4E8;
	height: 30px;
	background-position: 8px 2px;
	display: block;
	width: 100%;
}
 
#mytweets_wrapper {
	position: absolute;
	top: 0;
	left: 50%;
	margin-left: -472px;
	padding: 0;
	width: 944px; // Largeur du conteneur pour un tweet
	overflow:hidden;
}
 
#mytweets {
	margin: 0;
	padding: 0;
	width: 2832px; // Désolé il faut multiplier tweet_width par le nombre de tweet que l'on veut afficher et l'inscrire à la main
}
 
#mytweets li{
	list-style-type: none;	
	margin: 0;
	padding: 5px 0;
	float: left;
	width: 944px;
}
 
#mytweets_next {
	position: absolute;
	top: 0;
	right: 5px;
	width: 25px;
	height: 25px;
	display: block;
	background-image: url(img/arrow_right_twitter.png);
	background-position: 0 2px;
}

Par défaut, seul le dernier message s’affiche, les autres étant positionnés en dehors du conteneur mytweets_wrapper grâce à l’attribut overflow: hidden; . Pour les faire défiler, voici le code du carrousel :

?View Code JAVASCRIPT
// Vérification de l'exitence de tweets	
if (document.getElementById('mytweets')) {
	var tweet_width = 944; // largeur d'une ligne de tweet
	var mytweet_width_px = jQuery("#mytweets").css('width');
	var cur_pos = 0;
	mytweets_width = 2832; // largeur correspondant à l'ensemble des tweets, désolé il faut multiplier tweet_width par le nombre de tweet que l'on veut afficher et l'inscrire à la main
 
	// Affectation de la fonction de défilement des tweets		
	jQuery("a#mytweets_next").click(function(){
		// Calcul de la position suivante
		cur_pos -= tweet_width;
		// Vérification que l'on n'a pas fait défilé tout les tweets
		if (cur_pos <= -mytweets_width) {
			cur_pos = 0;
		}
		// Défilement
			jQuery("#mytweets").animate({opacity: 0.5}, 200).animate({ 
			opacity: 1.0,
	        marginLeft: cur_pos+"px"
      	}, 1000 );
		return false;
	});			
}

Un livre sur Javascript qui promet

John Resig, bien connu des utilisateurs de jQuery prépare un second livre dont le contenu nous est dévoilé dans la table des manières secrète mise à disposition sur son blog.

Un certain niveau en javascript sera nécessaire, et à la vue du contenu, on imagine qu'on va aller assez loin dans le langage en abordant entre autre le modèle objet, le DOM, la portée des variables, la gestion d'évènement, la compatibilité entre les différents navigateurs (entendez les versions de javascript supportées), les expressions régulières …

Nous aurons également droit à des Best Practices pour développer de manières professionnelles vos applications Web.

Cela s'annonce pas mal non?

Pendant ce temps, chez Mille et une pattes

Photo d'un mur du café la mi graine

Pudding #10

Il n'est jamais trop tard pour bien faire. La preuve, voici un petit pudding pour résumer ce que j'ai pu rater ces derniers jours dernières semaines.

  • Vous avez sans doutes vu passer l'annonce de la sortie de la nouvelle version d'Aptana (non j'en ai pas parlé ici, peut être ). Alors je viens de le télécharger et suis en train de le tester. Tiens au passage j'ai ajouté le plugin Subclipse car je ne travaille pas tout seul!
  • Vous êtes de ceux qui utilisent Filezilla comme client (et serveur peut être) FTP. Vous aimiez beaucoup sa simplicité (trop?) et auriez souhaiter des fonctionnalités telles que le filtrage des noms de fichiers/dossiers. Vous allez être content, Filezilla 3 est sorti. Au passage vous pourrez importer votre Gestionnaire de site via le fichier de configuration XML (il faudra toutefois renseigner à nouveau les paramègres avancés).
  • Tiens pour changer, parlons de jQuery. Depuis hier, il nous est proposé jQuery UI, une série de widget utilisable pour enrichir ses interfaces utilisateurs. Au passage, on a le droit à un petit fix (déjà) et on passe à jQuery 1.2.1 .
  • Arrêt sur Image, l'émission, n'est plus. Qu'à cela ne tienne, on va pouvoir peut être les revoir sur le Web. Lancement prévu en Janvier, en attendant on peut déjà s'abonner pour financer une émission qu'on estime d'intérêt public.
  • Tiens, un petit mot de sport. Après une semaine calamiteuse pour les Bleus de tout horizon, le week end m'a un peu remonté le moral. Enfin, surtout si on est Lyonnais et qu'on suit de loin le basket. Tout d'abord, c'est confirmé, on a en Karim Benzema un attaquant redoutable (exit Fred!) et la victoire 5-1 à Metz apporte un capital confiance avant le déplacement à Barcelone. Puis hier ce sont les hommes de Bernard Laporte qui nous ont offert un festival offensif, même si c'était face à une faible équipe de Namibie vite réduite à 14.
  • Pour finir. Je suis rentré de Paris avec pas mal de photos (pas autant que j'aurais voulu). Si vous voulez savoir à quoi ressemble une réunion à Paris Blogue-t-il, un Yulbiz ou un Apéro Web du jeudi, c'est par là qu'il faut aller.

Bon c'est pas tout à fait fini, mais il est temps de se remettre au travail!

IE 6, submit et disabled


Mémo :
Lorsque vous voulez faire en sorte de désactiver le bouton submit d'un formulaire lorsque celui-ci a été cliqué, n'oubliez pas que sous ie6, cela annule la soumission du formulaire. Tous les codes ci-dessous sont concernés.

?View Code JAVASCRIPT
// Code exécuté au chargement de la page
document.getElementById('id_du_bouton_submit').onclick = function() {
this.value = 'Processing ...';
this.disabled = !this.disabled;
}

Et :

?View Code JAVASCRIPT
// Code exécuté au chargement de la page
document.getElementById('d_du_bouton_submit').onclick = function() {
this.value = 'Processing ...';
this.disabled = !this.disabled;
return true;
}

Et même :

<input type="submit" id="id_du_bouton_submit" name="jolie_bouton_submit" value="soumettre" onclick="this.disabled = !this.disabled; return true;" />

Inutile de tester avec jQuery(et avec bind), le résultat sera le même. Voilà c'est dit.

Pudding #8, juste fais-le

  • O2Sources a un an, depuis hier.
  • J'ai reçu ma carte d'électeur. Cela tombe bien car j'ai au moins un vote de conviction et un vote utile…
  • Mon tutoriel sur la création d'un moteur de recherche AJAX vient d'être publié sur le Journal du Net. J'ai donc décidé de le réécrire sous peu en utilisant cette fois-ci jQuery. Car jQuery ça roxe.
  • J'ai un compte Twitter, les gens pourront enfin savoir quand je vais aux toilettes.
  • Vous connaissez sans doute tous Heroes, la série sensation du moment. Dans un autre registre il y a Jericho
    qui raconte la vie des habitants d'une petite ville des Etats Unis après qu'ils aient aperçu à l'horizon un champignon atomique.
    C'est très très bien écrit. C’est très très bien filmé.
  • Copaing! c'est désormais plus de 2000 membres. Comme toujours c'est gratuit et ça reste un bon moyen pour retrouver ses amis d'enfance.
  • Yannick a apporté quelques mises à jour à son super service web AjaxLoad.

Et c'est tout. :)

Ma carte d'électeur

You know you’ve done too much Javascript when…

- alert( 'Hey how are you?' );

- $.get( 'self.php', {message: 'Hey how are you?'}, function(response){alert(response) ; } ; )

inspired by :

New jQuery API Browser

Je crois que vous n'allez pas finir de m'entendre en parler, mais je suis véritablement emballé par la librairie javascript jQuery. Après la release de la version 1.1, très rapidement suivie de la 1.1.1, voici encore du nouveau avec la documentation de l'API présentée d'une très belle manière et consultable offline.

Cela se passe ici : http://jquery.bassistance.de/api-browser/

Je reviendrais sur jQuery dans des exemples plus concrets. A bientôt!