<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>LoïcG &#187; prototype.js</title>
	<atom:link href="http://blog.loicg.net/tag/prototypejs/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.loicg.net</link>
	<description>Carnet d&#039;un développeur web</description>
	<lastBuildDate>Sat, 04 Feb 2012 17:31:19 +0000</lastBuildDate>
	<language>fr</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Champ de saisie de date (Javascript inside)</title>
		<link>http://blog.loicg.net/webdev/champ-de-saisie-de-date-javascript-inside/</link>
		<comments>http://blog.loicg.net/webdev/champ-de-saisie-de-date-javascript-inside/#comments</comments>
		<pubDate>Mon, 28 Jul 2008 11:55:44 +0000</pubDate>
		<dc:creator>Loïc</dc:creator>
				<category><![CDATA[WebDev]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[prototype.js]]></category>

		<guid isPermaLink="false">http://blog.loicg.net/?p=295</guid>
		<description><![CDATA[Voici une classe héritée de l&#8217; ajax.InPlaceEditor incluse dans Scriptaculous. Le script suivant est à coller dans extensions.js : Ajax.InPlaceDateEditor = Class.create(); Object.extend(Ajax.InPlaceDateEditor.prototype, Ajax.InPlaceEditor.prototype); Object.extend(Ajax.InPlaceDateEditor.prototype, { initialize: function(element, url, options) { this.url = url; if($(element).firstChild) { var monSplit=$(element).innerHTML.split("-"); if(monSplit[0]&#62;1000) $(element).firstChild.replaceData(0,$(element).firstChild.nodeValue.length,monSplit[2]+'-'+monSplit[1]+'-'+monSplit[0]); } this.element = element = $(element); this.prepareOptions(); this._controls = { }; //arguments.callee.dealWithDeprecatedOptions(options); // DEPRECATION LAYER!!! [...]]]></description>
			<content:encoded><![CDATA[<p>Voici une classe héritée de l&#8217; ajax.InPlaceEditor incluse dans Scriptaculous.<span id="more-295"></span></p>
<p>Le script suivant est à coller dans extensions.js :</p>
<pre lang="JAVASCRIPT">Ajax.InPlaceDateEditor = Class.create();
Object.extend(Ajax.InPlaceDateEditor.prototype, Ajax.InPlaceEditor.prototype);
Object.extend(Ajax.InPlaceDateEditor.prototype, {
	initialize: function(element, url, options) {
    this.url = url;

	if($(element).firstChild)
	{
		var monSplit=$(element).innerHTML.split("-");
		if(monSplit[0]&gt;1000)
			$(element).firstChild.replaceData(0,$(element).firstChild.nodeValue.length,monSplit[2]+'-'+monSplit[1]+'-'+monSplit[0]);
    }
	this.element = element = $(element);

    this.prepareOptions();
    this._controls = { };
    //arguments.callee.dealWithDeprecatedOptions(options); // DEPRECATION LAYER!!! //ET ALORS ? J'men fous !!!
    Object.extend(this.options, options || { });
    if (!this.options.formId &amp;&amp; this.element.id) {
      this.options.formId = this.element.id + '-inplaceeditor';
      if ($(this.options.formId))
        this.options.formId = '';
    }
    if (this.options.externalControl)
      this.options.externalControl = $(this.options.externalControl);
    if (!this.options.externalControl)
      this.options.externalControlOnly = false;
    this._originalBackground = this.element.getStyle('background-color') || 'transparent';
    this.element.title = this.options.clickToEditText;
    this._boundCancelHandler = this.handleFormCancellation.bind(this);
    this._boundComplete = (this.options.onComplete || Prototype.emptyFunction).bind(this);
    this._boundFailureHandler = this.handleAJAXFailure.bind(this);
    this._boundSubmitHandler = this.handleFormSubmission.bind(this);
    this._boundWrapperHandler = this.wrapUp.bind(this);
    this.registerListeners();
  },
  createEditField: function() {
    var text = (this.options.loadTextURL ? this.options.loadingText : this.getText());
    var fld;
	fld = document.createElement('input');
	fld.type = 'text';
	fld.id=this.element.id;
	var size = this.options.size || this.options.cols || 0;
	if (0 &lt; size) fld.size = size;

    fld.name = this.options.paramName;
    fld.value = text; // No HTML breaks conversion anymore
    fld.className = 'editor_field';
    if (this.options.submitOnBlur)
      fld.onblur = this._boundSubmitHandler;
	fld.onClick=window.open('./calendrier/pop.calendrier.php?frm='+this.options.formId+'&amp;ch='+fld.id,'calendrier','width=400,height=200,scrollbars=0').focus();

    this._controls.editor = fld;
    if (this.options.loadTextURL)
      this.loadExternalText();
    this._form.appendChild(this._controls.editor);
  }
});
</pre>
<p>Voici quelques infos concernant son utilisation :</p>
<p>Ce code nécessite ce <a href="http://blog.loicg.net/wp-content/uploads/2008/07/calendrier.zip">Calendrier</a> à placer à la racine de votre projet, dont je ne trouve plus le site de l&#8217;auteur &#8230; (il faut mettre au moins une URL dans les commentaires)</p>
<p><br class="spacer_" /></p>
<p>Pour &laquo;&nbsp;préparer&nbsp;&raquo; le champ de saisie, il faut créer un span définit comme ceci dans votre page :</p>
<p><code><span id="monId">mon Texte</span></code></p>
<ul>
<li>monId : L&#8217;ID sera envoyé à votre page de traitement lors de la validation du mini formulaire</li>
<li>mon texte : sera envoyé sous le nom &laquo;&nbsp;value&nbsp;&raquo;</li>
</ul>
<p><br class="spacer_" /></p>
<p>De plus, il faut maintenant &laquo;&nbsp;préparer&nbsp;&raquo; votre span pour le rendre éditable, en collant ceci la même page :</p>
<p><br class="spacer_" /></p>
<pre lang="JAVASCRIPT">$('monId').(function(el){
                        var nom = el.id;
                        new Ajax.InPlaceEditor(el, './mesActions.php',
                           { callback: function(form, value) {
                            return 'champ='+nom+'&amp;value=' + encodeURIComponent(value);
                            }
                           });
                    });
</pre>
<ul>
<li>mesActions.php étant la page qui traitera les informations</li>
</ul>
<ul>
<li>Champ est ici le nom d&#8217;un champ dans ma base de données.</li>
<li>Value est la valeur saisie dans la case de texte qui apparait. </li>
</ul>
<p>La méthode d&#8217;envoi est du POST.</p>
<p><br class="spacer_" /></p>
<p>Maintenant, passons à la partie traitement de cette info, avec le fichier mesActions.php :</p>
<pre lang="PHP">
</pre>
<p><br class="spacer_" /></p>
<p>J&#8217;avoue que ce code n&#8217;est pas très utile, mais il peut vous servir de base de travail pour la suite&#8230;</p>
<p><br class="spacer_" /></p>
<p>En espérant que ce code vous sera utile (ou pas)&#8230;</p>
<p>Pour les questions/précisions, n&#8217;hésitez pas à abuser des commentaires <img src='http://blog.loicg.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.loicg.net/webdev/champ-de-saisie-de-date-javascript-inside/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Raccourcis clavier à la &#171;&#160;Google Reader&#160;&#187; (Javascript inside)</title>
		<link>http://blog.loicg.net/webdev/raccourcis-claviers-a-la-google-reader-javascript-inside/</link>
		<comments>http://blog.loicg.net/webdev/raccourcis-claviers-a-la-google-reader-javascript-inside/#comments</comments>
		<pubDate>Wed, 16 Jul 2008 06:09:06 +0000</pubDate>
		<dc:creator>Loïc</dc:creator>
				<category><![CDATA[WebDev]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[prototype.js]]></category>

		<guid isPermaLink="false">http://blog.loicg.net/?p=92</guid>
		<description><![CDATA[Voici un petit bout de code en javascript permettant de créer un système de raccourcis clavier à la &#171;&#160;Google Reader&#160;&#187;. Attention, ce script nécessite la librairie Prototype.js pour sa gestion des évênements. var raccourci; //genre de flag pour dire si le raccourci est prêt ou pas var mesURL=new Array(); //mes URLS mesURL["F"]="http://www.google.fr"; //raccourci "F" mesURL["I"]="http://www.google.com"; [...]]]></description>
			<content:encoded><![CDATA[<p>Voici un petit bout de code en javascript permettant de créer un système de raccourcis clavier à la &laquo;&nbsp;Google Reader&nbsp;&raquo;.<br />
 Attention, ce script nécessite la librairie <a title="Bibliothèque Javascript" href="http://www.prototypejs.org/">Prototype.js</a> pour sa gestion des évênements.</p>
<pre lang="JAVASCRIPT">var raccourci; //genre de flag pour dire si le raccourci est prêt ou pas
var mesURL=new Array(); //mes URLS
mesURL["F"]="http://www.google.fr"; //raccourci "F"
mesURL["I"]="http://www.google.com"; //raccourci "I"
mesURL["D"]="http://www.google.de"; //raccourci "D"

function onRaccourciClavier(e)
{
  if(e.element().tagName !="INPUT" &amp;&amp; e.element().tagName !="SELECT") //check si on est pas dans un input ou selectbox
  {
    if(String.fromCharCode(e.keyCode)=="G" &amp;&amp; raccourci!="G") raccourci="G";
    else
    {
      var monURL = mesURL[String.fromCharCode(e.keyCode)];
      if(raccourci=="G" &amp;&amp; monURL) window.location=monURL;
      raccourci="";
    }
  }
}

Event.observe(window,'keyup', onRaccourciClavier);
</pre>
<p>Ce snippet fonctionne comme les raccourcis &laquo;&nbsp;menu&nbsp;&raquo; de Google Reader. C&#8217;est à dire qu&#8217;il réagit à une suite de 2 touches, dont la première est le G.<br />
 Par exemple, la combinaison GF ouvrira Google en Français&#8230;.</p>
<p>Ce code prends également en compte le fait qu&#8217;un champ de saisie de texte soit sélectionné ou pas.</p>
<p>Code préparé en quelques minutes sur une idée de <a title="on Twitter" href="http://twitter.com/pickupjojo/statuses/858974909">Pickupjojo</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.loicg.net/webdev/raccourcis-claviers-a-la-google-reader-javascript-inside/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using memcached (Feed is rejected)
Page Caching using memcached (User agent is rejected)
Database Caching 10/23 queries in 0.028 seconds using memcached

Served from: blog.loicg.net @ 2012-02-07 13:45:07 -->
