Vanilla 1 is no longer supported or maintained. If you need a copy, you can get it here.
HackerOne users: Testing against this community violates our program's Terms of Service and will result in your bounty being denied.

YellowFade and Atom/RSS2

edited August 2006 in Vanilla 1.0 Help
Whenever I have YellowFade enabled, it breaks my feeds. I get:
XML Parsing Error: xml declaration not at start of external entity Location: http://forum.mysite.com/?Feed=Atom Line Number 2, Column 1:<?xml version="1.0" encoding="utf-8"?> ^

I understand from previous posts that this is caused by extensions adding whitespace, but how do I fix it? I'm fairly sure that other people have this combination of add-ons enabled, am I the only person encounting this issue? I've disabled YellowFade for now, but it would be nice to understand why this is happening and what add-on writers can do to avoid this happening in the first place.

Comments

  • Oddly, I can't find the yellow fade extension in the repository.

    I suggest you check the code for yellow fade and make sure that there are not any blank lines at the top and bottom of the extension, and check any 'echo' lines also.
  • edited August 2006
    yes, the YellowFade extension seems to have slipped through the net moving to 1.0, here's the code:

    default.php
    <?php /* Extension Name: YellowFade Effect Extension Url: http://michaelraichelson.com/hacks/vanilla/ Description: Adds the YellowFade effect on some stuff. Version: 0.1 Author: Michael Raichelson Author Url: http://michaelraichelson.com/ */ if (in_array($Context->SelfUrl, array("index.php", "categories.php", "comments.php", "search.php", "post.php", "account.php", "settings.php"))){ $Head->AddScript('extensions/YellowFade/functions.js'); } ?>

    functions.js
    // This technique is a combination of a technique I used for highlighting FAQ's using anchors // and the ever popular yellow-fade technique used by 37 Signals in Basecamp. // Including this script in a page will automatically do two things when the page loads... // 1. Highlight a target item from the URL (browser address bar) if one is present. // 2. Setup all anchor tags with targets pointing to the current page to cause a fade on the target element when clicked. // This is the amount of time (in milliseconds) that will lapse between each step in the fade var FadeInterval = 100; // This is where the fade will start, if you want it to be faster and start with a lighter color, make this number smaller // It corresponds directly to the FadeSteps below var StartFadeAt = 28; // This is list of steps that will be used for the color to fade out var FadeSteps = new Array(); FadeSteps[1] = "ff"; FadeSteps[2] = "ee"; FadeSteps[3] = "dd"; FadeSteps[4] = "cc"; FadeSteps[5] = "bb"; FadeSteps[6] = "aa"; FadeSteps[7] = "99"; FadeSteps[8] = "99"; FadeSteps[9] = "aa"; FadeSteps[10] = "bb"; FadeSteps[11] = "cc"; FadeSteps[12] = "dd"; FadeSteps[13] = "ee"; FadeSteps[14] = "ee"; FadeSteps[15] = "ee"; FadeSteps[16] = "ee"; FadeSteps[17] = "dd"; FadeSteps[18] = "cc"; FadeSteps[19] = "bb"; FadeSteps[20] = "aa"; FadeSteps[21] = "99"; FadeSteps[22] = "99"; FadeSteps[23] = "aa"; FadeSteps[24] = "bb"; FadeSteps[25] = "cc"; FadeSteps[26] = "dd"; FadeSteps[27] = "ee"; FadeSteps[28] = "ff"; // These are the lines that "connect" the script to the page. var W3CDOM = (document.createElement && document.getElementsByTagName); addEvent(window, 'load', initFades); // This function automatically connects the script to the page so that you do not need any inline script // See http://www.scottandrew.com/weblog/articles/cbs-events for more information function addEvent(obj, eventType,fn, useCapture) { if (obj.addEventListener) { obj.addEventListener(eventType, fn, useCapture); return true; } else { if (obj.attachEvent) { var r = obj.attachEvent("on"+eventType, fn); return r; } } } // The function that initializes the fade and hooks the script into the page function initFades() { if (!W3CDOM) return; // This section highlights targets from the URL (browser address bar) // Get the URL var currentURL = unescape(window.location); // If there is a '#' in the URL if (currentURL.indexOf('#')>-1) // Highlight the target DoFade(StartFadeAt, currentURL.substring(currentURL.indexOf('#')+1,currentURL.length)); // This section searches the page body for anchors and adds onclick events so that their targets get highlighted // Get the list of all anchors in the body var anchors = document.body.getElementsByTagName('a'); // For each of those anchors for (var i=0;i<anchors.length;i++) // If there is a '#' in the anchors href if (anchors[i].href.indexOf('#')>-1) // Add an onclick event that calls the highlight function for the target anchors[i].onclick = function(){Highlight(this.href);return true}; } // This function is just a small wrapper to use for the oncick events of the anchors function Highlight(target) { // Get the target ID from the string that was passed to the function var targetId = target.substring(target.indexOf('#')+1,target.length); DoFade(StartFadeAt, targetId); } // This is the recursive function call that actually performs the fade function DoFade(colorId, targetId) { if (colorId >= 1) { var target = document.getElementById(targetId); if (target) { target.style.backgroundColor = "#ffff" + FadeSteps[colorId]; // If it's the last color, set it to transparent if (colorId==1) { document.getElementById(targetId).style.backgroundColor = "transparent"; } colorId--; // Wait a little bit and fade another shade setTimeout("DoFade("+colorId+",'"+targetId+"')", FadeInterval); } } }

    Can anyone see anything wrong with that??
  • edited August 2006
    Here it is: http://lussumo.com/community/discussion/2498/#Item_29 Just make sure there is nothing before and after the '<?php' and '?>' It appears to me that there is a blank line (or two) before the '<?php' on the code you posted.
  • cheers WP, found and removed! Problem solved
This discussion has been closed.