[SPIP Zone] BUG + patch [Spip-zone-commit] r28737 - in /_plugins_/_stable_/palette: javascript/palette2.js.html plugin.xml

Ce commit crée un bug (bien malgrès son auteur) :

Sous firefox, voici le résultat :

Erreur : function (container, callback) {var fb = this;$(container).html("<div
class=\"farbtastic\"><div class=\"color\"></div><div
class=\"wheel\"></div><div class=\"overlay\"></div><div class=\"h-marker
marker\"></div><div class=\"sl-marker marker\"></div></div>");var e =
$(".farbtastic", container);fb.wheel = $(".wheel",
container).get(0);fb.radius = 84;fb.square = 100;fb.width = 194;if
(navigator.appVersion.match(/MSIE [0-6]\./)) {$("*", e).each(function () {if
(this.currentStyle.backgroundImage != "none") {var image =
this.currentStyle.backgroundImage;image =
this.currentStyle.backgroundImage.substring(5, image.length - 2);
$(this).css({backgroundImage: "none",
filter: "progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true,
sizingMethod=crop, src='" + image + "')"});}});}fb.linkTo = function
(callback) {if (typeof fb.callback == "object")
{$(fb.callback).unbind("keyup", fb.updateValue);}fb.color = null;if (typeof
callback == "function") {fb.callback = callback;} else if (typeof callback
== "object" || typeof callback == "string") {fb.callback =
$(callback);fb.callback.bind("keyup", fb.updateValue);if
(fb.callback.get(0).value) {fb.setColor(fb.callback.get(0).value);}}return
this;};fb.updateValue = function (event) {if (this.value && this.value !=
fb.color) {fb.setColor(this.value);}};fb.setColor = function (color) {var
unpack = fb.unpack(color);if (fb.color != color && unpack) {fb.color =
color;fb.rgb = unpack;fb.hsl = fb.RGBToHSL(fb.rgb);fb.updateDisplay();}return
this;};fb.setHSL = function (hsl) {fb.hsl = hsl;fb.rgb =
fb.HSLToRGB(hsl);fb.color = fb.pack(fb.rgb);fb.updateDisplay();return
this;};fb.widgetCoords = function (event) {var x, y;var el = event.target ||
event.srcElement;var reference = fb.wheel;if (typeof
event.offsetX != "undefined") {var pos = {x: event.offsetX, y:
event.offsetY};var e = el;while (e) {e.mouseX = pos.x;e.mouseY = pos.y;pos.x
+= e.offsetLeft;pos.y += e.offsetTop;e = e.offsetParent;}var e =
reference;var offset = {x: 0, y: 0};while (e) {if (typeof
e.mouseX != "undefined") {x = e.mouseX - offset.x;y = e.mouseY -
offset.y;break;}offset.x += e.offsetLeft;offset.y += e.offsetTop;e =
e.offsetParent;}e = el;while (e) {e.mouseX = undefined;e.mouseY = undefined;e
= e.offsetParent;}} else {var pos = fb.absolutePosition(reference);x =
(event.pageX || 0 * (event.clientX + $("html").get(0).scrollLeft)) - pos.x;y
= (event.pageY || 0 * (event.clientY + $("html").get(0).scrollTop)) -
pos.y;}return {x: x - fb.width / 2, y: y - fb.width / 2};};fb.mousedown =
function (event) {if (!document.dragging) {$(document).bind("mousemove",
fb.mousemove).bind("mouseup", fb.mouseup);document.dragging = true;}var pos =
fb.widgetCoords(event);fb.circleDrag = Math.max(Math.abs(pos.x),
Math.abs(pos.y)) * 2 > fb.square;fb.mousemove(event);return
false;};fb.mousemove = function (event) {var pos = fb.widgetCoords(event);if
(fb.circleDrag) {var hue = Math.atan2(pos.x, - pos.y) / 6.28;if (hue < 0)
{hue += 1;}fb.setHSL([hue, fb.hsl[1], fb.hsl[2]]);} else {var sat =
Math.max(0, Math.min(1, - (pos.x / fb.square) + 0.5));var lum = Math.max(0,
Math.min(1, - (pos.y / fb.square) + 0.5));fb.setHSL([fb.hsl[0], sat,
lum]);}return false;};fb.mouseup = function ()
{$(document).unbind("mousemove", fb.mousemove);$(document).unbind("mouseup",
fb.mouseup);document.dragging = false;};fb.updateDisplay = function () {var
angle = fb.hsl[0] * 6.28;$(".h-marker", e).css({left:
Math.round(Math.sin(angle) * fb.radius + fb.width / 2) + "px", top:
Math.round(- Math.cos(angle) * fb.radius + fb.width / 2) + "px"});
$(".sl-marker", e).css({left: Math.round(fb.square * (0.5 - fb.hsl[1]) +
fb.width / 2) + "px", top: Math.round(fb.square * (0.5 - fb.hsl[2]) +
fb.width / 2) + "px"});$(".color", e).css("backgroundColor",
fb.pack(fb.HSLToRGB([fb.hsl[0], 1, 0.5])));if (typeof fb.callback
== "object") {$(fb.callback).css({backgroundColor: fb.color, color: fb.hsl[2]

0.5 ? "#000" : "#fff"});$(fb.callback).each(function () {if (this.value &&

this.value != fb.color) {this.value = fb.color;}});} else if (typeof
fb.callback == "function") {fb.callback.call(fb,
fb.color);}};fb.absolutePosition = function (el) {var r = {x: el.offsetLeft,
y: el.offsetTop};if (el.offsetParent) {var tmp =
fb.absolutePosition(el.offsetParent);r.x += tmp.x;r.y += tmp.y;}return
r;};fb.pack = function (rgb) {var r = Math.round(rgb[0] * 255);var g =
Math.round(rgb[1] * 255);var b = Math.round(rgb[2] * 255);return "#" + (r <
16 ? "0" : "") + r.toString(16) + (g < 16 ? "0" : "") + g.toString(16) + (b <
16 ? "0" : "") + b.toString(16);};fb.unpack = function (color) {if
(color.length == 7) {return [parseInt("0x" + color.substring(1, 3)) / 255,
parseInt("0x" + color.substring(3, 5)) / 255, parseInt("0x" +
color.substring(5, 7)) / 255];} else if (color.length == 4) {return
[parseInt("0x" + color.substring(1, 2)) / 15, parseInt("0x" +
color.substring(2, 3)) / 15, parseInt("0x" + color.substring(3, 4)) /
15];}};fb.HSLToRGB = function (hsl) {var m1, m2, r, g, b;var h = hsl[0], s =
hsl[1], l = hsl[2];m2 = (l <= 0.5) ? l * (s + 1) : l + s - l * s;m1 = l * 2 -
m2;return [this.hueToRGB(m1, m2, h + 0.33333), this.hueToRGB(m1, m2, h),
this.hueToRGB(m1, m2, h - 0.33333)];};fb.hueToRGB = function (m1, m2, h) {h =
(h < 0) ? h + 1 : (h > 1) ? h - 1 : h;if (h * 6 < 1) {return m1 + (m2 - m1) *
h * 6;}if (h * 2 < 1) {return m2;}if (h * 3 < 2) {return m1 + (m2 - m1) *
(0.66666 - h) * 6;}return m1;};fb.RGBToHSL = function (rgb) {var min, max,
delta, h, s, l;var r = rgb[0], g = rgb[1], b = rgb[2];min = Math.min(r,
Math.min(g, b));max = Math.max(r, Math.max(g, b));delta = max - min;l = (min
+ max) / 2;s = 0;if (l > 0 && l < 1) {s = delta / (l < 0.5 ? 2 * l : 2 - 2 *
l);}h = 0;if (delta > 0) {if (max == r && max != g) {h += (g - b) / delta;}if
(max == g && max != b) {h += (2 + (b - r) / delta);}if (max == b && max != r)
{h += (4 + (r - g) / delta);}h /= 6;}return [h, s, l];};$("*",
e).mousedown(fb.mousedown);fb.setColor("#000000");if (callback)
{fb.linkTo(callback);}}(function ($) {$(document).ready(function ()
{init_palette();onAjaxLoad(init_palette);});
function init_palette() {$("input.palette").each(function (i, palette)
{$(palette).css("background-color", $(palette).attr("value"));palette.id =
palid(palette);$(this).focus(function () {$(".colorpicker").empty().remove();
$(palette).after("<div class=\"colorpicker\"><div class=\"colorpicker_close\"
title=\"Fermer la palette\">&nbsp;x&nbsp;</div><div
class=\"colorpicker_bar\">Palette</div><div
id=\"colorpicker\"></div></div>");$.farbtastic("#colorpicker", palette);
$(".colorpicker_close").hover(function () {$(this).addClass("hover");},
function () {$(this).removeClass("hover");}).click(function ()
{$(".colorpicker").empty().remove();});});$(this).blur(function ()
{$(".colorpicker").empty().remove();});});}

function palid(element) {if (!$(element).attr("id")) {var newid =
parseInt(10000 + 10000 * Math.random());return newid;}return
$(element).attr("id");}

}) is not a function
Fichier source :
http://localhost/spip/2.0.8/local/cache-js/d3aa6a280b3cd725d2e5d3fab578ed6e.js
Ligne : 6288

Comme on voit, ce bug se produit quand les scripts sont compactés (ici avec
spip 2.0.8), à cet endroit :

fb.linkTo(callback);}}(function ($) {$(document).ready(function ()
{init_palette();

C'est ";}}(" qui pose problème, et ce en raison d'une toute petite différence
entre farbtastic 1.3 et 1.3.1 : un ";" à la fin :wink: !!!

Le correctif est donc simplissime : encapsuler entre accolades le code de
palette2.js.html

Je le commite.

Daniel

Le Thursday 21 May 2009 01:35:11 kent1@arscenic.info, vous avez écrit :

Author: kent1@arscenic.info
Date: Thu May 21 01:35:09 2009
New Revision: 28737

Log:
Utilisation de la dernière version de la lib farbtastic (incrément de
version du plugin + on change de lien)

On change la méthode d'affichage de la palette qui était sur le click en la
passant en focus (j'affiche) et blur (je cache)

Un bug de fermeture de fonction dans la lib farbtastic a été réparé donc le
";" en début de fichier ne semble plus utile

Modified:
    _plugins_/_stable_/palette/javascript/palette2.js.html
    _plugins_/_stable_/palette/plugin.xml

Modified: _plugins_/_stable_/palette/javascript/palette2.js.html

=== --- _plugins_/_stable_/palette/javascript/palette2.js.html (original)
+++ _plugins_/_stable_/palette/javascript/palette2.js.html Thu May 21
01:35:09 2009 @@ -1,4 +1,3 @@
-;
(function($){
   $(document).ready(
     function() {
@@ -12,15 +11,19 @@
     function(i, palette){
       $(palette).css("background-color", $(palette).attr("value"));
       palette.id = palid(palette);
- palette.onclick = function(e) {
+ $(this).focus(function(){
       $(".colorpicker").empty().remove();
       $(palette)
         .after('<div class="colorpicker"><div class="colorpicker_close"
title="<:palette:fermer:>">&nbsp;x&nbsp;</div><div
class="colorpicker_bar"><:palette:palette:></div><div
id="colorpicker"></div></div>'); $.farbtastic('#colorpicker', palette);
       $(".colorpicker_close")
         .hover(function() {$(this).addClass("hover");}, function(){
$(this).removeClass("hover");}) - .click(function()
{$(".colorpicker").empty().remove();});
- };
+ .click(function() {$(".colorpicker").empty().remove();
+ });
+ });
+ $(this).blur(function(){
+ $(".colorpicker").empty().remove();
+ });
     }
     );
   };

Modified: _plugins_/_stable_/palette/plugin.xml

=== --- _plugins_/_stable_/palette/plugin.xml (original)
+++ _plugins_/_stable_/palette/plugin.xml Thu May 21 01:35:09 2009
@@ -4,7 +4,7 @@
_ &#169; 2008 - <multi>[fr]Distribu&#233; sous licence[en]Released under
license[de]Vertrieb unter Lizenz</multi> GNU/LGPL </auteur>
     <version>
- 1.2
+ 1.2.1
     </version>
     <etat>
     stable
@@ -31,6 +31,6 @@
         <inclure>palette_pipeline.php</inclure>
     </pipeline>
   <necessite id="SPIP" version="[2.0.0;]" />
- <necessite id="lib:farbtastic_1_3"
src="http://kent1.sklunk.net/IMG/zip/farbtastic_1_3.zip&quot; /> + <necessite
id="lib:farbtastic_1_3_1"
src="http://kent1.sklunk.net/IMG/zip/farbtastic_1_3_1.zip&quot; /> <utilise
id="cfg" version="[1.10.4;]" />
</plugin>

_______________________________________________
Spip-zone-commit@rezo.net -
http://listes.rezo.net/mailman/listinfo/spip-zone-commit

--
Daniel FAIVRE
Expert en géomatique

Daniel FAIVRE a écrit :

Ce commit crée un bug (bien malgrès son auteur) :

Le correctif est donc simplissime : encapsuler entre accolades le code de palette2.js.html

Il suffisait de remettre le ; en début de script que kent1 avait cru très bon d'enlever !

Chez jQuery, la plupart des plugins commencent maintenant comme ça, avec le ; en premier :

;(function ($) {
  ...
})(jQuery);

--
MM.

Le Thursday 21 May 2009 08:48:16 Matthieu Marcillaud, vous avez écrit :

Daniel FAIVRE a écrit :
> Ce commit crée un bug (bien malgrès son auteur) :
>
> Le correctif est donc simplissime : encapsuler entre accolades le code de
> palette2.js.html

Il suffisait de remettre le ; en début de script que kent1 avait cru
très bon d'enlever !

Chez jQuery, la plupart des plugins commencent maintenant comme ça, avec
le ; en premier :

;(function ($) {
  ...
})(jQuery);

Ok : en fait, c ce que j'avais en premier en voyant le bug :wink:
Si c ok de faire commencer par ";", modifie sans hesiter : autant faire
standard.

--
Daniel FAIVRE

ouep désolé

:wink:

++

Q.

Le 21 mai 09 à 17:23, Daniel FAIVRE a écrit :

Le Thursday 21 May 2009 08:48:16 Matthieu Marcillaud, vous avez écrit :

Daniel FAIVRE a écrit :

Ce commit crée un bug (bien malgrès son auteur) :

Le correctif est donc simplissime : encapsuler entre accolades le code de
palette2.js.html

Il suffisait de remettre le ; en début de script que kent1 avait cru
très bon d'enlever !

Chez jQuery, la plupart des plugins commencent maintenant comme ça, avec
le ; en premier :

;(function ($) {
...
})(jQuery);

Ok : en fait, c ce que j'avais en premier en voyant le bug :wink:
Si c ok de faire commencer par ";", modifie sans hesiter : autant faire
standard.

--
Daniel FAIVRE

_______________________________________________
spip-zone@rezo.net - http://listes.rezo.net/mailman/listinfo/spip-zone