Przy zmianie zapisywane jest ciastko z kolorem.
Problem w tym, ze po odświeżeniu wszystko się resetuje, tak jakby nie czytało stanu ciastka.
Co jest nie tak w tym kodzie?
<html> <head> <style type="text/css"> .white { background-color:#FFFFFF; color:#333333; } .grey { background-color:#999999; color:#FFFFFF; } .black { background-color:#333333; color:#FFFFFF; } </style> <!-- mootools script: http://files-upload.com/files/612093/mootools.js --> <script type="text/javascript"> window.addEvent('domready', function(){ Fx.Morph = Fx.Styles.extend({ start: function(className){ var to = {}; $each(document.styleSheets, function(style){ var rules = style.rules || style.cssRules; $each(rules, function(rule){ if (!rule.selectorText.test('\.' + className + '$')) return; Fx.CSS.Styles.each(function(style){ if (!rule.style || !rule.style[style]) return; var ruleStyle = rule.style[style]; to[style] = (style.test(/color/i) && ruleStyle.test(/^rgb/)) ? ruleStyle.rgbToHex() : ruleStyle; }); }); }); return this.parent(to); } }); Fx.CSS.Styles = ["backgroundColor", "backgroundPosition", "color", "width", "height", "left", "top", "bottom", "right", "fontSize", "letterSpacing", "lineHeight", "textIndent", "opacity"]; Fx.CSS.Styles.extend(Element.Styles.padding); Fx.CSS.Styles.extend(Element.Styles.margin); Element.Styles.border.each(function(border){ ['Width', 'Color'].each(function(property){ Fx.CSS.Styles.push(border + property); }); }); var myMorph = new Fx.Morph('container', {wait: false}); $('white').addEvent('click', function(e){ new Event(e).stop(); myMorph.start('white'); Cookie.set("style", "white", {duration: 15}); }); $('grey').addEvent('click', function(e){ new Event(e).stop(); myMorph.start('grey'); Cookie.set("style", "grey", {duration: 15}); }); $('black').addEvent('click', function(e){ new Event(e).stop(); myMorph.start('black'); Cookie.set("style", "black", {duration: 15}); }); if(Cookie.get("style") == "black"){ myMorph.set('black'); }else if(Cookie.get("style") == "grey"){ myMorph.set('grey'); }else{ myMorph.set('white'); } }); </script> </head> <body> <div id="container" class="widthwide"> <ul style="list-style-type: none;"> </ul> </div> </body> </html>
-----------------------------
---- UPDATE ------------------
---------------------------------------------------------------------------------------------
Tylko częściowo rozwiązałęm problem. Dałem myMorph.start() zamiast myMorph.set()
działa jednak tylko dla jednego wywołania (jedno ciastko - jedno wywołąnie myMorph.start() )
-czyli np. tylko do obsługi koloru.
Gdy jednak kod rozszerzę o obsługe np. rozmiaru czcioki (tu klasa fontsmall)
...zapiszę drugie ciacho i dodam jeszcze jedno wywołanie myMorph.start() pojawia się znowu problem.
-oto klikam na link fontsmall -ok zmienia rozmiar fontu, klikam na black -zmienia kolor tła, daję odśwież
...i tło się resetuje a czcionka jest ok bo jak powinna zminimalizowana.
Wniosek, przy kilkukrotnym wywołaniu myMorph.start() zastosowane są tylko zmiany z ostatniego
czyli np. dla:
myMorph.start('fontsmall');
myMorph.start('black');
zostanie tylko tło zmienione na czarne, a czcionka pozostanie niezmieniona.
Co i jak zmienić by rozwiązać ten problem?
<html> <head> <style type="text/css"> .white { background-color:#FFFFFF; color:#333333; } .grey { background-color:#999999; color:#FFFFFF; } .black { background-color:#333333; color:#FFFFFF; } .fontsmall { font-size: 10px; } </style> <!-- mootools script: http://files-upload.com/files/612093/mootools.js --> <script type="text/javascript"> window.addEvent('domready', function(){ Fx.Morph = Fx.Styles.extend({ start: function(className){ var to = {}; $each(document.styleSheets, function(style){ var rules = style.rules || style.cssRules; $each(rules, function(rule){ if (!rule.selectorText.test('\.' + className + '$')) return; Fx.CSS.Styles.each(function(style){ if (!rule.style || !rule.style[style]) return; var ruleStyle = rule.style[style]; to[style] = (style.test(/color/i) && ruleStyle.test(/^rgb/)) ? ruleStyle.rgbToHex() : ruleStyle; }); }); }); return this.parent(to); } }); Fx.CSS.Styles = ["backgroundColor", "backgroundPosition", "color", "width", "height", "left", "top", "bottom", "right", "fontSize", "letterSpacing", "lineHeight", "textIndent", "opacity"]; Fx.CSS.Styles.extend(Element.Styles.padding); Fx.CSS.Styles.extend(Element.Styles.margin); Element.Styles.border.each(function(border){ ['Width', 'Color'].each(function(property){ Fx.CSS.Styles.push(border + property); }); }); var myMorph = new Fx.Morph('container', {wait: false}); $('white').addEvent('click', function(e){ new Event(e).stop(); myMorph.start('white'); Cookie.set("style1", "white", {duration: 15}); }); $('grey').addEvent('click', function(e){ new Event(e).stop(); myMorph.start('grey'); Cookie.set("style1", "grey", {duration: 15}); }); $('black').addEvent('click', function(e){ new Event(e).stop(); myMorph.start('black'); Cookie.set("style1", "black", {duration: 15}); }); $('fontsmall').addEvent('click', function(e){ new Event(e).stop(); myMorph.start('fontsmall'); Cookie.set("style2", "fontsmall", {duration: 15}); }); s1=Cookie.get("style1"); s2=Cookie.get("style2"); myMorph.start(s1); myMorph.start(s2); tekst=document.getElementById("tekst"); tekst.innerHTML='style1:'+s1+' style2:'+s2; }); </script> </head> <body> <div id="container" class="widthwide"> <ul style="list-style-type: none;"> </ul> </div> </body> </html>