diff options
author | Andres Rey <[email protected]> | 2017-03-10 11:10:46 +0000 |
---|---|---|
committer | GitHub <[email protected]> | 2017-03-10 11:10:46 +0000 |
commit | 10c528c0b98164be5da0bfd097b0190e26e6de5f (patch) | |
tree | 30adee993e1c52abc398e7f6e2a0b0723c73ecf9 | |
parent | 2a493bcc6cd8c175c531a26b6c9b061e911dcf39 (diff) | |
parent | a2d10aa920780447c946ac64efa7c095c854bff6 (diff) |
Merge pull request #18 from andreskrey/development
Prepare for release v0.2.0
31 files changed, 889 insertions, 4401 deletions
diff --git a/.travis.yml b/.travis.yml index f803921..664bd60 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,6 +7,6 @@ php: - "5.5" - "5.6" - "7.0" - - "hhvm" + - "7.1" sudo: false
\ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 7cf5383..ec84f86 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,25 @@ All notable changes to this project will be documented in this file. ## Unreleased +## [v0.2.0](https://github.com/andreskrey/readability.php/releases/tag/v0.2.0) + +We ARE a 100% complete por of Readability.js! +- Every test unit passes +- Readability.php produces the same exact output as Readability.js +- I'm happy :) + +### Fixed +- Lots of bugs +- Merged PR by DavidFricker to avoid exceptions while grabbing the document content + +### Added +- substituteEntities flag, to avoid replacing especial characters with HTML entities. There's nothing we can do about ` `, that entity is replaced by libxml and there's no way to disable it. +- Named data sets so it's easier to detect which test case is failing. + +### Removed + +- Couple of test cases that involved broken JS. There's nothing we can do about JS spilling onto the text. + ## [0.0.3-alpha](https://github.com/andreskrey/readability.php/releases/tag/v0.0.3v-alpha) We are getting closer to be a 100% complete port of Readability.js! @@ -51,7 +51,8 @@ If the parsing process was unsuccessful the HTMLParser will return `false` - **weightClasses**: default value `true`, weight classes during the rating phase. - **removeReadabilityTags**: default value `true`, remove the data-readability tags inside the nodes that are added during the rating phase. - **fixRelativeURLs**: default value `false`, convert relative URLs to absolute. Like `/test` to `http://host/test`. -- **originalURL**: default value `http://fakehost`, original URL from the article used to fix relative URLs. +- **substituteEntities**: default value `false`, disables the `substituteEntities` flag of libxml. Will avoid substituting HTML entities. Like `´` to á. +- **originalURL**: default value `http://fakehost`, original URL from the article used to fix relative URLs. ## Limitations diff --git a/src/HTMLParser.php b/src/HTMLParser.php index 0313b2a..bc9aa9f 100644 --- a/src/HTMLParser.php +++ b/src/HTMLParser.php @@ -29,18 +29,13 @@ class HTMLParser /** * @var array */ - private $title = []; - - /** - * @var array - */ private $regexps = [ 'unlikelyCandidates' => '/banner|combx|comment|community|disqus|extra|foot|header|menu|modal|related|remark|rss|share|shoutbox|sidebar|skyscraper|sponsor|ad-break|agegate|pagination|pager|popup/i', 'okMaybeItsACandidate' => '/and|article|body|column|main|shadow/i', 'extraneous' => '/print|archive|comment|discuss|e[\-]?mail|share|reply|all|login|sign|single|utility/i', 'byline' => '/byline|author|dateline|writtenby|p-author/i', 'replaceFonts' => '/<(\/?)font[^>]*>/gi', - 'normalize' => '/\s{2,}/g', + 'normalize' => '/\s{2,}/', 'videos' => '/\/\/(www\.)?(dailymotion|youtube|youtube-nocookie|player\.vimeo)\.com/i', 'nextLink' => '/(next|weiter|continue|>([^\|]|$)|»([^\|]|$))/i', 'prevLink' => '/(prev|earl|old|new|<|«)/i', @@ -104,6 +99,7 @@ class HTMLParser 'weightClasses' => true, 'removeReadabilityTags' => true, 'fixRelativeURLs' => false, + 'substituteEntities' => true, 'originalURL' => 'http://fakehost', ]; @@ -137,7 +133,9 @@ class HTMLParser $this->metadata = $this->getMetadata(); - $this->title = $this->getTitle(); + $this->metadata['image'] = $this->getMainImage(); + + $this->metadata['title'] = $this->getTitle(); // Checking for minimum HTML to work with. if (!($root = $this->dom->getElementsByTagName('body')->item(0))) { @@ -162,7 +160,11 @@ class HTMLParser // TODO Better way to count resulting text. Textcontent usually has alt titles and that stuff // that doesn't really count to the quality of the result. - if ($result && mb_strlen($result->textContent) < 500) { + $length = 0; + foreach ($result->getElementsByTagName('p') as $p) { + $length += mb_strlen($p->textContent); + } + if ($result && mb_strlen(preg_replace('/\s/', '', $result->textContent)) < 500) { $root = $this->backupdom->getElementsByTagName('body')->item(0); if ($this->getConfig()->getOption('stripUnlikelyCandidates')) { @@ -205,6 +207,11 @@ class HTMLParser */ private function loadHTML($html) { + if (!$this->getConfig()->getOption('substituteEntities')) { + // Keep the original HTML entities + $this->dom->substituteEntities = false; + } + // Prepend the XML tag to avoid having issues with special characters. Should be harmless. $this->dom->loadHTML('<?xml encoding="UTF-8">' . $html); $this->dom->encoding = 'UTF-8'; @@ -293,6 +300,15 @@ class HTMLParser } } } + + // Replace font tags with span + $fonts = $this->dom->getElementsByTagName('font'); + $length = $fonts->length; + for ($i = 0; $i < $length; $i++) { + $font = $fonts->item($length - 1 - $i); + $span = new Readability($font); + $span->setNodeTag('span', true); + } } public function postProcessContent(DOMDocument $article) @@ -436,12 +452,40 @@ class HTMLParser if (array_key_exists('og:image', $values) || array_key_exists('twitter:image', $values)) { $metadata['image'] = ($values['og:image']) ? $values['og:image'] : $values['twitter:image']; + } else { + $metadata['image'] = null; } return $metadata; } /** + * Tries to get the main article image. Will only update the metadata if the getMetadata function couldn't + * find a correct image. + * + * @return bool|string URL of the top image or false if unsuccessful. + */ + public function getMainImage() + { + if ($this->metadata['image'] !== null) { + return $this->metadata['image']; + } + + foreach ($this->dom->getElementsByTagName('link') as $link) { + /** @var \DOMElement $link */ + /* + * Check for the rel attribute, then check if the rel attribute is either img_src or image_src, and + * finally check for the existence of the href attribute, which should hold the image url. + */ + if ($link->hasAttribute('rel') && ($link->getAttribute('rel') === 'img_src' || $link->getAttribute('rel') === 'image_src') && $link->hasAttribute('href')) { + return $link->getAttribute('href'); + } + } + + return false; + } + + /** * Get the density of links as a percentage of the content * This is the amount of text that is inside a link divided by the total text in the node. * @@ -493,6 +537,7 @@ class HTMLParser * Gets nodes from the root element. * * @param $node Readability + * * @return array */ private function getNodes(Readability $node) @@ -586,7 +631,7 @@ class HTMLParser continue; } // Discard nodes with less than 25 characters, without blank space - if (mb_strlen($node->getValue(true)) < 25) { + if (mb_strlen($node->getTextContent(true)) < 25) { continue; } @@ -601,10 +646,10 @@ class HTMLParser $contentScore = 1; // Add points for any commas within this paragraph. - $contentScore += count(explode(',', $node->getValue(true))); + $contentScore += count(explode(',', $node->getTextContent(true))); // For every 100 characters in this paragraph, add another point. Up to 3 points. - $contentScore += min(floor(mb_strlen($node->getValue(true)) / 100), 3); + $contentScore += min(floor(mb_strlen($node->getTextContent(true)) / 100), 3); // Initialize and score ancestors. /** @var Readability $ancestor */ @@ -1066,13 +1111,20 @@ class HTMLParser * Checks if the node is a byline. * * @param Readability $node - * @param string $matchString + * @param string $matchString * * @return bool */ private function checkByline($node, $matchString) { - if ($this->getConfig()->getOption('articleByLine')) { + if (!$this->getConfig()->getOption('articleByLine')) { + return false; + } + + /* + * Check if the byline is already set + */ + if (isset($this->metadata['byline'])) { return false; } diff --git a/src/Readability.php b/src/Readability.php index 027858f..c55e0ad 100644 --- a/src/Readability.php +++ b/src/Readability.php @@ -286,8 +286,9 @@ class Readability extends Element implements ReadabilityInterface * element with the new tag name and importing it to the main DOMDocument. * * @param string $value + * @param bool $importAttributes */ - public function setNodeTag($value) + public function setNodeTag($value, $importAttributes = false) { $new = new \DOMDocument(); $new->appendChild($new->createElement($value)); @@ -298,6 +299,13 @@ class Readability extends Element implements ReadabilityInterface $new->firstChild->appendChild($import); } + if ($importAttributes) { + // Import attributes from the original node. + foreach ($this->node->attributes as $attribute) { + $new->firstChild->setAttribute($attribute->nodeName, $attribute->nodeValue); + } + } + // The import must be done on the firstChild of $new, since $new is a DOMDocument and not a DOMElement. $import = $this->node->ownerDocument->importNode($new->firstChild, true); $this->node->parentNode->replaceChild($import, $this->node); diff --git a/test/HTMLParserTest.php b/test/HTMLParserTest.php index d800805..9d7586e 100644 --- a/test/HTMLParserTest.php +++ b/test/HTMLParserTest.php @@ -9,11 +9,18 @@ class HTMLParserTest extends \PHPUnit_Framework_TestCase /** * @dataProvider getSamplePages */ - public function testHTMLParserParsesHTML($html, $expectedResult, $expectedMetadata) + public function testHTMLParserParsesHTML($html, $expectedResult, $expectedMetadata, $config) { - $readability = new HTMLParser([ - 'originalURL' => 'http://fakehost/test/test.html', - ]); + $options = ['originalURL' => 'http://fakehost/test/test.html', + 'fixRelativeURLs' => true, + 'substituteEntities' => true, + ]; + + if ($config) { + $options = $config; + } + + $readability = new HTMLParser($options); $result = $readability->parse($html); $this->assertEquals($expectedResult, $result['html']); @@ -33,8 +40,12 @@ class HTMLParserTest extends \PHPUnit_Framework_TestCase $source = file_get_contents($path . DIRECTORY_SEPARATOR . $testPage . DIRECTORY_SEPARATOR . 'source.html'); $expectedHTML = file_get_contents($path . DIRECTORY_SEPARATOR . $testPage . DIRECTORY_SEPARATOR . 'expected.html'); $expectedMetadata = file_get_contents($path . DIRECTORY_SEPARATOR . $testPage . DIRECTORY_SEPARATOR . 'expected-metadata.json'); + $config = file_get_contents($path . DIRECTORY_SEPARATOR . $testPage . DIRECTORY_SEPARATOR . 'config.json'); + if ($config) { + $config = json_decode($config, true); + } - $pages[] = [$source, $expectedHTML, $expectedMetadata]; + $pages[$testPage] = [$source, $expectedHTML, $expectedMetadata, $config]; } return $pages; diff --git a/test/ReadabilityTest.php b/test/ReadabilityTest.php index 967381f..ec96ef4 100644 --- a/test/ReadabilityTest.php +++ b/test/ReadabilityTest.php @@ -4,4 +4,9 @@ namespace andreskrey\Readability\Test; class ReadabilityTest extends \PHPUnit_Framework_TestCase { + public function testDummy() + { + //TODO + $this->assertEquals(true, true); + } } diff --git a/test/test-pages/ars-1/config.json b/test/test-pages/ars-1/config.json new file mode 100644 index 0000000..6441edf --- /dev/null +++ b/test/test-pages/ars-1/config.json @@ -0,0 +1,3 @@ +{ + "articleByLine": true +}
\ No newline at end of file diff --git a/test/test-pages/clean-links/expected.html b/test/test-pages/clean-links/expected.html index 23f1aa5..b8cf601 100644 --- a/test/test-pages/clean-links/expected.html +++ b/test/test-pages/clean-links/expected.html @@ -1,6 +1,6 @@ <div><td> <h3 align="center ">Study Webtext</h3> - <h2 align="center "><font color="Maroon
 " face="Lucida Handwriting ">"Bartleby the Scrivener: A Story of Wall-Street " </font>(1853) <br></br> + <h2 align="center "><span color="Maroon
 " face="Lucida Handwriting ">"Bartleby the Scrivener: A Story of Wall-Street " </span>(1853) <br></br> Herman Melville</h2> <h2 align="center "><a href="http://www.vcu.edu/engweb/webtexts/bartleby.html
 " target="_blank "><img align="absmiddle " alt="To the story text without notes
 " height="38 " src="http://fakehost/test/hmhome.gif " width="38 "></img></a> </h2> diff --git a/test/test-pages/ehow-1/expected-metadata.json b/test/test-pages/ehow-1/expected-metadata.json deleted file mode 100644 index 4791011..0000000 --- a/test/test-pages/ehow-1/expected-metadata.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "title": "How to Build a Terrarium | eHow", - "byline": "Lucy Akins", - "excerpt": "How to Build a Terrarium. Glass cloche terrariums are not only appealing to the eye, but they also preserve a bit of nature in your home and serve as a simple, yet beautiful, piece of art. Closed terrariums are easy to care for, as they retain much of their own moisture and provide a warm environment with a consistent level of humidity. You...", - "readerable": true -} diff --git a/test/test-pages/ehow-1/expected.html b/test/test-pages/ehow-1/expected.html deleted file mode 100644 index f3b7073..0000000 --- a/test/test-pages/ehow-1/expected.html +++ /dev/null @@ -1,139 +0,0 @@ - <div class="col-main"> - <header class="page-head bordered"> </header> - <div class="mod step"> - <div class="stepContent mod"> - <p>Glass cloche terrariums are not only appealing to the eye, but they also preserve a bit of nature in your home and serve as a simple, yet beautiful, piece of art. Closed terrariums are easy to care for, as they retain much of their own moisture and provide a warm environment with a consistent level of humidity. You won’t have to water the terrariums unless you see that the walls are not misting up. Small growing plants that don’t require a lot of light work best such as succulents, ferns, moss, even orchids.</p> - <figure class="stepThumb"> <img src="http://img-aws.ehowcdn.com/640/cme/photography.prod.demandstudios.com/16149374-814f-40bc-baf3-ca20f149f0ba.jpg" alt="Glass cloche terrariums" title="Glass cloche terrariums" class="photo" data-credit="Lucy Akins " longdesc="http://s3.amazonaws.com/photography.prod.demandstudios.com/16149374-814f-40bc-baf3-ca20f149f0ba.jpg"/> </figure> - <figcaption class="small caption"> Glass cloche terrariums (Lucy Akins) </figcaption> - </div> - </div> - <div class="mod step"> - <div class="stepContent"> - <div class="content"><span class="headline2 head mg-1 block">What You'll Need:</span> - <ul class="markdown-ul"> - <li>Cloche</li> - <li>Planter saucer, small shallow dish or desired platform</li> - <li>Floral foam oasis</li> - <li>Ruler </li> - <li>Spoon</li> - <li>Floral wire pins or paper clips</li> - <li>Small plants (from a florist or nursery)</li> - <li>Moss</li> - <li>Tweezers</li> - <li>Other small decorative items (optional)</li> - </ul> - </div> - </div> - </div> - <div class="mod step"> - <div class="stepContent"> - <div class="content"><span class="headline2 head mg-1 block">Step 1</span> - <p>Measure the circumference of your cloche and cut the foam oasis about 3/4 inch (2 cm) smaller. Place the foam oasis into a container full of water and allow to soak until it sinks to the bottom. Dig out a hole on the oasis large enough to fit your plant, being careful not to pierce all the way through to the bottom.</p> - </div> - <figure class="stepThumb"> <img src="http://img-aws.ehowcdn.com/default/cme/photography.prod.demandstudios.com/fc249ef6-4d27-41b4-8c21-15f7a8512b50.jpg" alt="Dig a hole in the oasis." class="photo" data-credit="Lucy Akins"/> </figure> - <figcaption class="small caption"> Dig a hole in the oasis. (Lucy Akins) </figcaption> - </div> - </div> - <div class="mod step"> - <div class="stepContent"> - <div class="content"><span class="headline2 head mg-1 block">Step 2</span> - <p>Insert your plant into the hole.</p> - </div> - <figure class="stepThumb"> <img src="http://img-aws.ehowcdn.com/default/cme/photography.prod.demandstudios.com/aae11d4d-a4aa-4251-a4d9-41023ebf6d84.jpg" alt="Orchid in foam oasis" class="photo" data-credit="Lucy Akins"/> </figure> - <figcaption class="small caption"> Orchid in foam oasis (Lucy Akins) </figcaption> - </div> - </div> - <div class="mod step"> - <div class="stepContent"> - <div class="content"><span class="headline2 head mg-1 block">Step 3</span> - <p>You can add various plants if you wish.</p> - </div> - <figure class="stepThumb"> <img src="http://img-aws.ehowcdn.com/default/cme/photography.prod.demandstudios.com/7afdfa1e-da74-44b5-b89c-ca8123516272.jpg" alt="Various foliage" class="photo" data-credit="Lucy Akins"/> </figure> - <figcaption class="small caption"> Various foliage (Lucy Akins) </figcaption> - </div> - </div> - <div class="mod step"> - <div class="stepContent"> - <div class="content"><span class="headline2 head mg-1 block">Step 4</span> - <p>Using floral pins, attach enough moss around the oasis to cover it.</p> - </div> - <figure class="stepThumb"> <img src="http://img-aws.ehowcdn.com/default/cme/photography.prod.demandstudios.com/4f6612c0-316a-4c74-bb03-cb4e778f6d72.jpg" alt="Attach moss." class="photo" data-credit="Lucy Akins"/> </figure> - <figcaption class="small caption"> Attach moss. (Lucy Akins) </figcaption> - </div> - </div> - <div class="mod step"> - <div class="stepContent"> - <div class="content"><span class="headline2 head mg-1 block">Step 5</span> - <p>Gently place the cloche over the oasis. The glass may push some of the moss upward, exposing some of the foam.</p> - </div> - <figure class="stepThumb"> <img src="http://img-aws.ehowcdn.com/default/cme/photography.prod.demandstudios.com/eeb1e0b4-e573-40a3-8db1-2c76f0b13b84.jpg" alt="Place cloche over oasis." class="photo" data-credit="Lucy Akins"/> </figure> - <figcaption class="small caption"> Place cloche over oasis. (Lucy Akins) </figcaption> - </div> - </div> - <div class="mod step"> - <div class="stepContent"> - <div class="content"><span class="headline2 head mg-1 block">Step 6</span> - <p>Simply pull down the moss with tweezers or insert more moss to fill in the empty spaces.</p> - </div> - <figure class="stepThumb"> <img src="http://img-aws.ehowcdn.com/default/cme/photography.prod.demandstudios.com/812d4649-4152-4363-97c0-f181d02e709a.jpg" alt="Rearrange moss." class="photo" data-credit="Lucy Akins"/> </figure> - <figcaption class="small caption"> Rearrange moss. (Lucy Akins) </figcaption> - </div> - </div> - <div class="mod step"> - <div class="stepContent"> - <div class="content"><span class="headline2 head mg-1 block">Step 7</span> - <p>You can use any platform you wish. In this case, a small saucer was used.</p> - </div> - <figure class="stepThumb"> <img src="http://img-aws.ehowcdn.com/default/cme/photography.prod.demandstudios.com/0cb3988c-9318-47d6-bc9c-c798da1ede72.jpg" alt="Place cloche on a platform to sit on." class="photo" data-credit="Lucy Akins"/> </figure> - <figcaption class="small caption"> Place cloche on a platform to sit on. (Lucy Akins) </figcaption> - </div> - </div> - <div class="mod step"> - <div class="stepContent"> - <div class="content"><span class="headline2 head mg-1 block">Step 8</span> - <p>This particular terrarium rests on a planter saucer and features a small white pumpkin.</p> - </div> - <figure class="stepThumb"> <img src="http://img-aws.ehowcdn.com/640/cme/photography.prod.demandstudios.com/e3e18f0b-ab2c-4ffb-9988-a1ea63faef8b.jpg" alt="Cloche placed on a terracotta saucer" class="photo" data-credit="Lucy Akins"/> </figure> - <figcaption class="small caption"> Cloche placed on a terracotta saucer (Lucy Akins) </figcaption> - </div> - </div> - <div class="mod step"> - <div class="stepContent"> - <div class="content"><span class="headline2 head mg-1 block">Step 9</span> - <p>This particular terrarium was placed on a wood slice and a little toy squirrel was placed inside to add a little whimsy.</p> - </div> - <figure class="stepThumb"> <img src="http://img-aws.ehowcdn.com/640/cme/photography.prod.demandstudios.com/2cd79f8d-0d16-4573-8861-e47fb74b0638.jpg" alt="Placed on a wooden slice" class="photo" data-credit="Lucy Akins"/> </figure> - <figcaption class="small caption"> Placed on a wooden slice (Lucy Akins) </figcaption> - </div> - </div> - <div class="mod step"> - <div class="stepContent"> - <div class="content"><span class="headline2 head mg-1 block">Finished Terrarium</span> - <p>Displayed alone or in a group, these pretty arrangements allow you to add a little nature to your decor or tablescape.</p> - </div> - <figure class="stepThumb"> <img src="http://img-aws.ehowcdn.com/640/cme/photography.prod.demandstudios.com/78670312-8636-4c42-a75c-3029f7aa6c73.jpg" alt="Cloche terrarium" class="photo" data-credit="Lucy Akins"/> </figure> - <figcaption class="small caption"> Cloche terrarium (Lucy Akins) </figcaption> - </div> - </div> - <aside class="mod related clearfix" data-module="rcp_bottom"> - <h3 class="head headline2 mg-2">More Like This</h3> - <ul class="unstyled"> - <li class="item fl "> - <a href="http://www.ehow.com/how_4431062_convert-aquarium-terrarium.html"> <img src="http://img-aws.ehowcdn.com/200x133/cme/photography.prod.demandstudios.com/90f9f3d7-6e4f-4be8-b379-3d994ccbf69c.jpg" class="img" alt=""/> - <p class="headline6 mg-0">How to Convert an Aquarium to a Terrarium</p> - </a> - </li> - <li class="item fl even"> - <a href="http://www.ehow.com/video_12263138_plant-terrarium-ideas.html"> <img src="http://img-aws.ehowcdn.com/200x133/viper/media/2b3830ca-4eb6-4bfd-a1cd-d430b3e28d59/jpeg/a7edbb0f-86a7-4c73-9c2d-f85f87b49efa_0.jpg" class="img" alt=""/> - <p class="headline6 mg-0">Plant Terrarium Ideas</p> - </a> - </li> - <li class="item fl "> - <a href="http://www.ehow.com/video_9374_make-terrarium.html"> <img src="http://img-aws.ehowcdn.com/200x133/ehow/images/a00/09/4u/make-terrarium-800x800.jpg" class="img" alt=""/> - <p class="headline6 mg-0">How to Make a Terrarium</p> - </a> - </li> - </ul> - </aside> - <figure id="Comments" class="mod FLC" data-module="comments"> </figure> - <section id="FeaturedTombstone" class="mod" data-module="rcp_tombstone"> </section>
\ No newline at end of file diff --git a/test/test-pages/ehow-1/source.html b/test/test-pages/ehow-1/source.html deleted file mode 100644 index 770bebb..0000000 --- a/test/test-pages/ehow-1/source.html +++ /dev/null @@ -1,934 +0,0 @@ -<!DOCTYPE html> -<!--[if IE]><![endif]--> -<html class="Crafts en-US" lang="en-US" xmlns:fb="http://www.facebook.com/2008/fbml" xmlns:og="http://ogp.me/ns#" data-channel="crafts" itemscope="" itemtype="http://schema.org/Article"> - -<head> - <meta charset="utf-8"/> - <meta name="description" content="How to Build a Terrarium. Glass cloche terrariums are not only appealing to the eye, but they also preserve a bit of nature in your home and serve as a simple, yet beautiful, piece of art. Closed terrariums are easy to care for, as they retain much of their own moisture and provide a warm environment with a consistent level of humidity. You..."/> - <meta name="format-detection" content="telephone=no"/> - <meta name="y_key" content="4d4cb4ef1ad334cb"/> - <meta name="alexaVerifyID" content="xlJch1oUHrXNtOQBpiuUCV0-rlc"/> - <meta name="cachetime" content="201504281431"/> - <meta name="p:domain_verify" content="4d1387210be25228f0c4692cc47db05b"/> - <meta name="cme_last_updated" content="2015-04-28T11:54:11.401000"/> - <meta name="publishdate" content="05/29/2007 09:49:00"/> - <meta name="last_rcp_import" content="2015-04-27T19:34:40.179876"/> - <meta name="articleimage" content="http://s3.amazonaws.com/photography.prod.demandstudios.com/16149374-814f-40bc-baf3-ca20f149f0ba.jpg"/> - <link href="http://www.ehow.com/how_2042752_build-terrarium.html" rel="canonical"/> - <link type="application/rss+xml" href="http://www.ehow.com/feed/ehow-crafts.rss" rel="alternate" title="Subscribe to our RSS Feed"/> - <meta name="studioid" scheme="DMINSTR2" content="f941e4cd-a49e-4948-b244-677c15ff8b7f"/> - <meta name="contentid" scheme="DMINSTR2" content="2042752"/> - <meta name="category" scheme="DMINSTR2" content="Crafts"/> - <meta name="subcategory" scheme="DMINSTR2" content="Other DIY Crafts"/> - <meta name="subsubcat" scheme="DMINSTR2" content="Other DIY Projects"/> - <meta name="subpagetype" scheme="DMINSTR2" content="topic_view"/> - <meta name="exp_page" scheme="DMINSTR2" content=""/> - <meta name="wa_pchn" scheme="DMINSTR2" content="Crafts"/> - <meta name="pagetype" scheme="DMINSTR2" content="inline"/> - <meta name="wa_lr" scheme="DMINSTR2" content="en-US"/> - <meta name="siteid" scheme="DMINSTR2" content="EHWC"/> - <meta name="exp_name" scheme="DMINSTR2" content="desktop:default"/> - <meta name="wa_un" scheme="DMINSTR2" content=""/> - <meta name="wa_isreg" scheme="DMINSTR2" content=""/> - <meta name="wa_lgdin" scheme="DMINSTR2" content=""/> - <meta name="wa_clvl" scheme="DMINSTR2" content="1"/> - <meta name="wa_lgsrc" scheme="DMINSTR2" content="1"/> - <meta name="author" scheme="DMINSTR2" content="Lucy Akins"/> - <meta name="author_image" content=""/> - <meta name="twitter:card" content="summary"/> - <meta name="twitter:site" content="@ehow"/> - <meta property="og:image" content="http://img-aws.ehowcdn.com/200x200/cme/photography.prod.demandstudios.com/16149374-814f-40bc-baf3-ca20f149f0ba.jpg"/> - <meta property="og:url" content="http://www.ehow.com/how_2042752_build-terrarium.html"/> - <meta property="og:type" content="article"/> - <meta property="og:title" content="How to Build a Terrarium | eHow"/> - <meta property="og:description" content="Glass cloche terrariums are not only appealing to the eye, but they also preserve a bit of nature in your home and serve as a simple, yet beautiful, piece of art. Closed terrariums are easy to care for, as they retain much of their own moisture and provide a warm environment with a consistent level of humidity. You won’t have to water the..."/> - <meta property="fb:app_id" content="63203377906"/> - <meta property="fb:ttl" content="604800"/> - <meta property="og:site_name" content="eHow"/> - <title>How to Build a Terrarium (with Pictures) | eHow</title> - <link type="image/x-icon" href="http://v5-static.ehowcdn.com/favicon.ico" rel="shortcut icon apple-touch-icon"/> - <link rel="stylesheet" type="text/css" href="http://dynamic02.ehowcdn.com/services/modules/css/common_header,corporate-skin,inline/fa923205/"/> - <!--[if lt IE 9]><link href="http://v5-static.ehowcdn.com/ui/stylesheets/layout/ie.css" rel="stylesheet" /><script src="http://v5-static.ehowcdn.com/ui/scripts/ie_hacks/header.js"></script><![endif]--> - <!--[if IE 9]><link href="http://v5-static.ehowcdn.com/ui/stylesheets/layout/ie9.css" rel="stylesheet" /><![endif]--> - <script> - window._omnitureLinkSetDomain = 'extended.dmtracker.com'; - </script> - <script> - var dmjs = dmjs || {}; - dmjs.global = dmjs.global || {}; - dmjs.global.glbBaseUrl = "http:\/\/www.ehow.com"; - dmjs.global.facebook = { - "app_id": "63203377906", - "api_version": "v2.0", - "login_service": "http:\/\/www.ehow.com\/services\/fb\/login\/", - "comment_service": "http:\/\/www.ehow.com\/services\/comment\/refresh\/" - }; - dmjs.urls = { - "cdn": "http:\/\/v5-static.ehowcdn.com", - "sitelife": "http:\/\/sitelife.ehow.com\/ver1.0\/", - "dmtracker": "vs.dmtracker.com" - }; - dmjs.global.IN_PRODUCTION = true; - dmjs.global.darkhorse = true; - dmjs.global.pool = "default"; - dmjs.global.channel = "crafts"; - dmjs.global.skin = "crafts"; - dmjs.global.facebook.xid = "aG93XzIwNDI3NTJfYnVpbGQtdGVycmFyaXVtLmh0bWw"; - dmjs.global.facebook.associate_on_comment = false; - dmjs.global._adChannel = "craft_other_diy,text,suggested7"; - dmjs.global.IsSlideStep = false; - dmjs.global.fixed_category = [{ - "id": 5352, - "title": "Crafts", - "url": "\/crafts\/" - }, { - "id": 5426, - "title": "Other DIY Crafts", - "url": "\/diy-crafts\/" - }, { - "id": 5429, - "title": "Other DIY Projects", - "url": "\/diy-projects\/" - }]; - dmjs.global.SlideShowTest = { - "_id": "www.ehow.com\/how_16357_make-paper-sunflowers.html", - "dimensions": "none", - "image": { - "url": "http:\/\/s3.amazonaws.com\/uploadedimages.demandmedia\/sunflowers-1.jpg" - }, - "subtitle": "", - "title": "How to Make Paper Sunflowers", - "type": "Article", - "url": "\/how_16357_make-paper-sunflowers.html" - }; - dmjs.global.contributor = "www.demandstudios.com\/contributor\/3959b24c-24bb-447f-a676-55ce0b6e5519"; - dmjs.global.articleType = "Article"; - dmjs.global.articleID = 2042752; - /* Add xdomain first event helper to be added before ad event listeners are added */ - dmjs.xdomainFirstEventListener = true; - if (window.addEventListener) { - window.addEventListener("message", function(event) { - if (typeof xdomain != 'undefined' && typeof xdomain.dmjsFirstEventListener != 'undefined') { - xdomain.dmjsFirstEventListener(event); - } - }, false); - } else { - window.attachEvent("message", function(event) { - if (typeof xdomain != 'undefined' && typeof xdomain.dmjsFirstEventListener != 'undefined') { - xdomain.dmjsFirstEventListener(event); - } - }); - } - </script> - <!--[if lt IE 9]> -<script src="http://v5-static.ehowcdn.com/content/compressed/common_header-646656f9.js" ></script> -<![endif]--> - <script src="http://dynamic01.ehowcdn.com/services/modules/js/gpt,common_header_slim/4eb05a96/"></script> - <script class="kxct" data-id="JWC_M4Hq" data-timing="async" data-version="1.9" type="text/javascript"> - window.Krux || ((Krux = function() { - Krux.q.push(arguments) - }).q = []); - (function() { - var k = document.createElement('script'); - k.type = 'text/javascript'; - k.async = true; - var m, src = (m = location.href.match(/\bkxsrc=([^&]+)/)) && decodeURIComponent(m[1]); - k.src = /^https?:\/\/([a-z0-9_\-\.]+\.)?krxd\.net(:\d{1,5})?\//i.test(src) ? src : src === "disable" ? "" : (location.protocol === "https:" ? "https:" : "http:") + "//cdn.krxd.net/controltag?confid=JWC_M4Hq"; - var s = document.getElementsByTagName('script')[0]; - s.parentNode.insertBefore(k, s); - }()); - </script> - <script> - window.Krux || ((Krux = function() { - Krux.q.push(arguments); - }).q = []); - (function() { - function retrieve(n) { - var m, k = 'kx' + n; - if (window.localStorage) { - return window.localStorage[k] || ""; - } else if (navigator.cookieEnabled) { - m = document.cookie.match(k + '=([^;]*)'); - return (m && unescape(m[1])) || ""; - } else { - return ''; - } - } - Krux.user = retrieve('user'); - Krux.segments = retrieve('segs') && retrieve('segs').split(',') || []; - })(); - </script> - <script type="text/javascript"> - var GPT = []; - googletag.cmd.push(function() { - window.slot_define_string = "6117/dmd.ehow/crafts/otherdiycrafts/otherdiyprojects"; - GPT['300x250_300x600'] = googletag.defineSlot('/6117/dmd.ehow/crafts/otherdiycrafts/otherdiyprojects', [ - [300, 250], - [300, 600] - ], '300x250_300x600').addService(googletag.pubads()); - GPT['728x90_990x90_970x250'] = googletag.defineSlot('/6117/dmd.ehow/crafts/otherdiycrafts/otherdiyprojects', [ - [728, 90], - [990, 90], - [970, 250] - ], '728x90_990x90_970x250').addService(googletag.pubads()); - GPT['outofpage'] = googletag.defineOutOfPageSlot('/6117/dmd.ehow/crafts/otherdiycrafts/otherdiyprojects', 'outofpage').addService(googletag.pubads()).setCollapseEmptyDiv(true, true); - googletag.pubads().setTargeting('cat', 'crafts'); - googletag.pubads().setTargeting('scat', 'otherdiycrafts'); - googletag.pubads().setTargeting('sscat', 'otherdiyprojects'); - googletag.pubads().setTargeting('x', '7'); - googletag.pubads().setTargeting('art', '2042752'); - googletag.pubads().setTargeting('ctype', 'step_articles'); - googletag.pubads().setTargeting('vid', '0'); - googletag.pubads().setTargeting('blog', '0'); - googletag.pubads().setTargeting('ad_chan', 'craft_other_diy'); - window.gpt_targeting_vars = { - "cat": "crafts", - "scat": "otherdiycrafts", - "sscat": "otherdiyprojects", - "x": "7", - "art": 2042752, - "ctype": "step_articles", - "vid": 0, - "blog": 0, - "ad_chan": "craft_other_diy" - }; - googletag.pubads().setTargeting('dc_ref', top.window.location.href.replace('#', '-')); - googletag.pubads().setTargeting("envr", ""); //for production. set envr to empty string - googletag.pubads().setTargeting("ksg", Krux.segments); - googletag.pubads().setTargeting("kuid", Krux.user); - googletag.pubads().collapseEmptyDivs(); - googletag.pubads().enableSingleRequest(); - googletag.enableServices(); - }); - </script> - <script> - dataLayer = [{ - 'content_category': 'Crafts', - 'content_subCategory': 'Other DIY Crafts', - 'content_subSubCategory': 'Other DIY Projects', - 'content_pageType': 'inline', - 'content_subPageType': 'topic_view', - 'content_channel': 'crafts', - 'content_author': 'Lucy Akins', - 'content_publishDate': '05/29/2007 09:49:00', - 'content_name': 'How to Build a Terrarium (with Pictures) | eHow', - 'content_hasImages': 'True', - 'content_experience': 'desktop:default', - 'httpStatusCode': '200' - }]; - </script> - <!-- -<PageMap> - <DataObject type="meta"> - <Attribute name="articlethumbnail"><![CDATA[]]></Attribute> - <Attribute name="articletype"><![CDATA[professional]]></Attribute> - </DataObject> -</PageMap> ---> -</head> - -<body class="Crafts TopicView " data-skin="crafts"> - <!--[if IE 7]> - <script src="http://v5-static.ehowcdn.com/ui/scripts/ie7_notification.js" ></script> <![endif]--> - <noscript> - <iframe src="//www.googletagmanager.com/ns.html?id=GTM-K7RB82" height="0" width="0" style="display:none;visibility:hidden"></iframe> - </noscript> - <script> - (function(w, d, s, l, i) { - w[l] = w[l] || []; - w[l].push({ - 'gtm.start': new Date().getTime(), - event: 'gtm.js' - }); - var f = d.getElementsByTagName(s)[0], - j = d.createElement(s), - dl = l != 'dataLayer' ? '&l=' + l : ''; - j.async = true; - j.src = '//www.googletagmanager.com/gtm.js?id=' + i + dl; - f.parentNode.insertBefore(j, f); - })(window, document, 'script', 'dataLayer', 'GTM-K7RB82'); - </script> - <header id="Header" data-section="header"> - <section class="topContainer inner-container page-header clearfix"> - <a href="http://www.ehow.com/" class="image corp-logo fl"><img src="http://v5-static.ehowcdn.com/media/images/logos/logo-stamp.png" width="134" height="38" alt="eHow Logo"/></a> - <form method="get" action="http://www.ehow.com/search.html" id="searchHeader" class="Search "> - <input type="text" name="s" data-type="searchinput" class="input fl headline4"/> - <input name="skin" type="hidden" value="corporate"/> - <input name="t" type="hidden" value="all"/> - <input type="submit" value="Search" class="bttn submit headline5 head"/> </form> - </section> - <nav id="primaryNav" role="navigation"> - <ul class="inner-container channelListing clearfix skin-crafts"> - <li class="list js-list"><a href="http://www.ehow.com/ehow-mom/" class="mom head title channel gtm_headerNavmom" data-channel="mom">mom</a></li> - <li class="list js-list"><a href="http://www.ehow.com/ehow-style/" class="style head title channel gtm_headerNavstyle" data-channel="style">style</a></li> - <li class="list js-list"><a href="http://www.ehow.com/ehow-food/" class="food head title channel gtm_headerNavfood" data-channel="food">food</a></li> - <li class="list js-list"><a href="http://www.ehow.com/ehow-tech/" class="tech head title channel gtm_headerNavtech" data-channel="tech">tech</a></li> - <li class="list js-list"><a href="http://www.ehow.com/ehow-home/" class="home head title channel gtm_headerNavhome" data-channel="home">home</a></li> - <li class="list js-list"><a href="http://www.ehow.com/ehow-money/" class="money head title channel gtm_headerNavmoney" data-channel="money">money</a></li> - <li class="list js-list"><a href="http://www.ehow.com/ehow-crafts/" class="crafts head title channel gtm_headerNavcrafts" data-channel="crafts">crafts</a></li> - <li class="list js-list more"><a class="head title more js-more" data-channel="more" href="#">More<span class="js-icon more-icon elegant-icons">3</span></a> - <div class="more_dropdown"> - <div class="moreLinks"> - <div class="headline2 head mg-4">Browse Articles & Videos By Category</div> - <ul class="list list-0"> - <li class="item"><a href="http://www.ehow.com/arts/" class="headline5 title target">Arts & Entertainment</a></li> - <li class="item"><a href="http://www.ehow.com/business/" class="headline5 title target">Business</a></li> - <li class="item"><a href="http://www.ehow.com/careers/" class="headline5 title target">Careers & Work</a></li> - <li class="item"><a href="http://www.ehow.com/cars/" class="headline5 title target">Cars</a></li> - <li class="item"><a href="http://www.ehow.com/computers/" class="headline5 title target">Computers</a></li> - <li class="item"><a href="http://www.ehow.com/crafts/" class="headline5 title target">Crafts</a></li> - <li class="item"><a href="http://www.ehow.com/cultures/" class="headline5 title target">Culture & Society</a></li> - </ul> - <ul class="list list-1"> - <li class="item"><a href="http://www.ehow.com/education/" class="headline5 title target">Education</a></li> - <li class="item"><a href="http://www.ehow.com/electronics/" class="headline5 title target">Electronics</a></li> - <li class="item"><a href="http://www.ehow.com/fashion/" class="headline5 title target">Fashion, Style & Personal Care</a></li> - <li class="item"><a href="http://www.ehow.com/food/" class="headline5 title target">Food & Drink</a></li> - <li class="item"><a href="http://www.ehow.com/health/" class="headline5 title target">Health</a></li> - <li class="item"><a href="http://www.ehow.com/hobbies-games/" class="headline5 title target">Hobbies, Games & Toys</a></li> - <li class="item"><a href="http://www.ehow.com/holidays/" class="headline5 title target">Holidays & Celebrations</a></li> - </ul> - <ul class="list list-2"> - <li class="item"><a href="http://www.ehow.com/home/" class="headline5 title target">Home & Garden</a></li> - <li class="item"><a href="http://www.ehow.com/internet/" class="headline5 title target">Internet</a></li> - <li class="item"><a href="http://www.ehow.com/legal/" class="headline5 title target">Legal</a></li> - <li class="item"><a href="http://www.ehow.com/parenting/" class="headline5 title target">Parenting</a></li> - <li class="item"><a href="http://www.ehow.com/parties/" class="headline5 title target">Parties & Entertaining</a></li> - <li class="item"><a href="http://www.ehow.com/personal-finance/" class="headline5 title target">Personal Finance</a></li> - <li class="item"><a href="http://www.ehow.com/pets/" class="headline5 title target">Pets</a></li> - </ul> - <ul class="list list-3"> - <li class="item"><a href="http://www.ehow.com/relationships/" class="headline5 title target">Relationships & Family</a></li> - <li class="item"><a href="http://www.ehow.com/sports/" class="headline5 title target">Sports & Fitness</a></li> - <li class="item"><a href="http://www.ehow.com/travel/" class="headline5 title target">Travel</a></li> - <li class="item"><a href="http://www.ehow.com/weddings/" class="headline5 title target">Weddings</a></li> - </ul> - </div> - <div class="sponsored_programs"> - <ul class="unstyled"> - <li class="item"> - <a href="http://www.ehow.com/ehow-indoor/" class="diyhome"></a> - </li> - <li class="item"> - <a href="http://www.ehow.com/ehow-outdoor/" class="diyoutdoor"></a> - </li> - </ul> - </div> - </div> - </li> - </ul> - </nav> - </header> - <div class="inner-container"> - <!-- gpt slot 728x90_990x90_970x250 --> - <div class="bannerAd mod" data-module="gpt-ad-728x90_990x90_970x250" id="728x90_990x90_970x250"> - <script type="text/javascript"> - googletag.cmd.push(function() { - googletag.display('728x90_990x90_970x250'); - }); - </script> - </div> - <!-- gpt slot outofpage --> - <div class="AdUnitOutOfPage mod" data-module="gpt-ad-outofpage" id="outofpage"> - <script type="text/javascript"> - googletag.cmd.push(function() { - googletag.display('outofpage'); - }); - </script> - </div> - </div> - <section id="Body" class="InlineTemplate FLC" data-page-id="inlinetemplate" data-section="body"> - <script id="_ehow-com-hnh"></script> - <ol class="breadcrumbs unstyled inline" itemscope="" itemtype="http://data-vocabulary.org/Breadcrumb" data-module="breadcrumb"> - <li class="list"> - <a href="http://www.ehow.com/" rel="home" itemprop="url" class="title"> <span itemprop="title">eHow</span> </a> - </li> - <li class="list" itemprop="child" itemscope="" itemtype="http://data-vocabulary.org/Breadcrumb"> - <a href="http://www.ehow.com/crafts/" rel="directory" itemprop="url" class="title"> <span itemprop="title">Crafts</span> </a> - </li> - <li class="list" itemprop="child" itemscope="" itemtype="http://data-vocabulary.org/Breadcrumb"> - <a href="http://www.ehow.com/crafts/diy-crafts/" rel="directory" itemprop="url" class="title"> <span itemprop="title">Other DIY Crafts</span> </a> - </li> - <li class="list" itemprop="child" itemscope="" itemtype="http://data-vocabulary.org/Breadcrumb"> - <a href="http://www.ehow.com/crafts/diy-crafts/diy-projects/" rel="directory" itemprop="url" class="title"> <span itemprop="title">Other DIY Projects</span> </a> - </li> - <li class="list" itemprop="child" itemscope="" itemtype="http://data-vocabulary.org/Breadcrumb"> - <a href="http://www.ehow.com/how_2042752_build-terrarium.html" rel="directory" itemprop="url" class="title"> <span itemprop="title">How to Build a Terrarium</span> </a> - </li> - </ol> - <!-- gpt slot 990x50 --> - <div class="col-main"> - <header class="page-head bordered"> - <h1 class="headline1 head mg-2" itemprop="headline"> -How to Build a Terrarium </h1> - <div data-type="AuthorProfile" itemprop="author" itemscope="" itemtype="http://www.schema.org/Person"> - <script type="text/html" data-element="template"> - <footer class="AuthorProfileWrap footer"> - <div class="AuthorProfileModal" data-element="modal"> - <div class="wrapper"> - <div class="ModalClose close" data-action="hideModal" data-element="closeButton">X</div> <img src="http://img-aws.ehowcdn.com/100x100/studio-image/ver1.0/Content/images/store/3/11/a3407c7f-fdf9-4ae6-8bac-48007b0109ea.Medium.jpg" onerror="this.className = 'hide'" /> - <div class="headline3 head mg-2" itemprop="name"> Lucy Akins </div> - <p class="bio"> Lucy Akins is an artist/photographer/blogger living in Toronto, Ontario. Her blog, Craftberry Bush, has blossomed into a business, having gained domestic and international recognition. Her work has been published in several magazines, including: Cottages and Bungalows, American Farmlife Style, National Geographic Kids, Artful Blogger, Somerset Life, and most recently graced the cover of Somerset Home. </p> - <p class="portfolio"> <a class="profile" itemprop="url" rel="author" href="http://www.demandstudios.com/profile-3959b24c-Lucy-Akins/" target="_blank">View my portfolio</a> </p> - </div> - </div> - </footer> - </script> - <div class="post-meta clearfix headline6 mg-2 "> - <div class="meta"> - <a class="byline trigger gtm_contributorByline head-alt nb-name" rel="author" itemprop="author" href="/contributor/lucy_akins/" target="_top"> <span itemprop="name">By Lucy Akins</span> </a> - <div class="nb-byline">eHow Contributor</div> - </div> - </div> - <div class="article-meta"> </div> - <div data-element="container"></div> - </div> - <div class="clearfix"> - <ul class="social-icons js-social-icons inline flcb" data-url="http://www.ehow.com/how_2042752_build-terrarium.html"> - <li class="item btnPinterest"> - <a class="js-btn btn gtm_socialShare" data-social="pinterest" data-url="http://www.ehow.com/how_2042752_build-terrarium.html?p=d" data-title="How to Build a Terrarium" data-media="http://s3.amazonaws.com/photography.prod.demandstudios.com/16149374-814f-40bc-baf3-ca20f149f0ba.jpg"> <span class="social-icon elegant-icons"></span> <span class="action js-pins">Pin</span> </a> - </li> - <li class="item btnFacebook"> - <a class="js-btn btn gtm_socialShare" data-social="facebook" data-url="http://www.ehow.com/how_2042752_build-terrarium.html" data-title="How to Build a Terrarium" data-media="http://s3.amazonaws.com/photography.prod.demandstudios.com/16149374-814f-40bc-baf3-ca20f149f0ba.jpg" data-description="Glass cloche terrariums are not only appealing to the eye, but they also preserve a bit of nature in your home and serve as a simple, yet beautiful, piece of art. Closed terrariums are easy to care for, as they retain much of their own moisture and provide a warm environment with a consistent level of humidity. You won’t have to water the..."> <span class="social-icon elegant-icons"></span> <span class="action js-facebook_shares">Share</span> </a> - </li> - <li class="item btnTwitter"> - <a class="js-btn btn gtm_socialShare" data-social="twitter" data-url="http://www.ehow.com/how_2042752_build-terrarium.html" data-title="How to Build a Terrarium" data-media="http://s3.amazonaws.com/photography.prod.demandstudios.com/16149374-814f-40bc-baf3-ca20f149f0ba.jpg"> <span class="social-icon elegant-icons"></span> <span class="action js-tweets">Tweet</span> </a> - </li> - <li class="item btnGoogle"> - <a class="js-btn btn gtm_socialShare" data-social="google" data-url="http://www.ehow.com/how_2042752_build-terrarium.html" data-title="How to Build a Terrarium"> <span class="social-icon elegant-icons"></span> <span class="action js-plusones">Share</span> </a> - </li> - </ul> - <div class="pagescore js-pagescore page-heading" data-score="true" data-url="http://www.ehow.com/how_2042752_build-terrarium.html"> <span class="headline3 num js-num"></span> <span class="icon"></span> <span class="msg">Found This Helpful</span> </div> - </div> - </header> - <div class="mod step"> - <div class="stepContent mod"> - <div class="content lead"> - <p>Glass cloche terrariums are not only appealing to the eye, but they also preserve a bit of nature in your home and serve as a simple, yet beautiful, piece of art. Closed terrariums are easy to care for, as they retain much of their own moisture and provide a warm environment with a consistent level of humidity. You won’t have to water the terrariums unless you see that the walls are not misting up. Small growing plants that don’t require a lot of light work best such as succulents, ferns, moss, even orchids.</p> - </div> - <figure class="stepThumb"> <img src="http://img-aws.ehowcdn.com/640/cme/photography.prod.demandstudios.com/16149374-814f-40bc-baf3-ca20f149f0ba.jpg" alt="Glass cloche terrariums" title="Glass cloche terrariums" class="photo" data-credit="Lucy Akins " longdesc="http://s3.amazonaws.com/photography.prod.demandstudios.com/16149374-814f-40bc-baf3-ca20f149f0ba.jpg"/> </figure> - <figcaption class="small caption"> Glass cloche terrariums (Lucy Akins) </figcaption> - </div> - </div> - <div id="relatedContentUpper" class="RelatedContent Module" data-module="rcp_top"> - <header class=""> - <h3 class="head headline2 mg-2">Other People Are Reading</h3> </header> - <ul class="unstyled inline box box-inner people-reading mod FLC" data-type="more-relatedArticles"> - <li class="fl item headline5 first"> - <a class="gtm_otherPeopleReading" href="http://www.ehow.com/video_12263138_plant-terrarium-ideas.html"> <img src="http://img-aws.ehowcdn.com/105x70/viper/media/2b3830ca-4eb6-4bfd-a1cd-d430b3e28d59/jpeg/a7edbb0f-86a7-4c73-9c2d-f85f87b49efa_0.jpg" class="thumb fl"/> </a> <a class="title gtm_otherPeopleReading headline5" href="http://www.ehow.com/video_12263138_plant-terrarium-ideas.html">Plant Terrarium Ideas</a> </li> - <li class="fl item headline5 mid"> - <a class="gtm_otherPeopleReading" href="http://www.ehow.com/how_4885344_build-terrarium-succulent-plants.html"> <img src="http://img-aws.ehowcdn.com/105x70/cme/photography.prod.demandstudios.com/619daaaa-7991-4fc6-9b62-dfeab8a285b4.jpg" class="thumb fl"/> </a> <a class="title gtm_otherPeopleReading headline5" href="http://www.ehow.com/how_4885344_build-terrarium-succulent-plants.html">How to Build a Terrarium With Succulent Plants</a> </li> - </ul> - </div> - <div class="mod step"> - <div class="stepContent"> - <div class="content"> <span class="headline2 head mg-1 block">What You'll Need:</span> - <ul class="markdown-ul"> - <li>Cloche</li> - <li>Planter saucer, small shallow dish or desired platform</li> - <li>Floral foam oasis</li> - <li>Ruler </li> - <li>Spoon</li> - <li>Floral wire pins or paper clips</li> - <li>Small plants (from a florist or nursery)</li> - <li>Moss</li> - <li>Tweezers</li> - <li>Other small decorative items (optional)</li> - </ul> - </div> - </div> - </div> - <div class="mod step"> - <div class="stepContent"> - <div class="content"> <span class="headline2 head mg-1 block">Step 1</span> - <p>Measure the circumference of your cloche and cut the foam oasis about 3/4 inch (2 cm) smaller. Place the foam oasis into a container full of water and allow to soak until it sinks to the bottom. Dig out a hole on the oasis large enough to fit your plant, being careful not to pierce all the way through to the bottom.</p> - </div> - <figure class="stepThumb"> <img src="http://img-aws.ehowcdn.com/default/cme/photography.prod.demandstudios.com/fc249ef6-4d27-41b4-8c21-15f7a8512b50.jpg" alt="Dig a hole in the oasis." class="photo" data-credit="Lucy Akins"/> </figure> - <figcaption class="small caption"> Dig a hole in the oasis. (Lucy Akins) </figcaption> - </div> - </div> - <div id="m1"></div> - <div class="mod Inline"> - <div id="DMINSTR" type="adimpression" data-type="adTracking" name="&adunit_id=ca-ehow_300x250&ad_unit_type=CNT&ad_unit_network=GAP&revenue_basis=CPC&ad_position=-&revenue_tag=craft_other_diy"> - <div id="GoogleAdsense300x250"></div> - <script> - dmjs.revenueTags.push('ca-ehow_300x250;craft_other_diy,text,suggested7'); - googleAds.addAdUnit({ - priority: 3, - adUnitId: 'GoogleAdsense300x250', - google_ad_channel: 'craft_other_diy,text,suggested7', - google_ad_client: 'ca-ehow_300x250', - google_page_url: 'http://www.ehow.com/how_2042752_build-terrarium.html', - google_max_num_ads: '1', - google_ad_type: 'text', - templates: { - text: '<div class="GoogleTextAd GoogleAd300x250 ad-300"> \ - <p><a class="header" href="{!= google_info.feedback_url !}">Sponsored Links</a></p> \ - <ul> \ - {! for (var i = 0; i < ads.length; i++) { !} \ - <li class="Ad"> \ - <a rel="nofollow" href="{!= ads[i].url !}" target="_blank" title="go to {!= clean(ads[i].visible_url) !}" class="title"> \ - {!= ads[i].line1 !} \ - </a> \ - <p class="copy">{!= ads[i].line2 !} {!= ads[i].line3 !}</p> \ - <a rel="nofollow" href="{!= ads[i].url !}" target="_blank" title="go to {!= clean(ads[i].visible_url) !}" class="baseurl url"> \ - {!= ads[i].visible_url !} \ - </a> \ - </li> \ - {! } !} \ - </ul> \ - </div>', - image: '<div class="GoogleImageAd GoogleImageAdNew"> \ - <a class="header" href="{!= google_info.feedback_url !}">Sponsored Links</a> \ - <a href="{!= ads[0].url !}" title="go to {!= clean(ads[0].visible_url) !}" target="_blank" class="Ad" >\ - <img src="{!= ads[0].image_url !}" width="{!= ads[0].image_width !}" height="{!= ads[0].image_height !}" border="0" alt="" />\ - </a> \ - </div>', - flash: '<div class="GoogleFlashAd GoogleFlashAdNew">\ - <a class="header" href="{!= google_info.feedback_url !}">Sponsored Links</a> \ - <div class="Ad">\ - <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" width="{!= ads[0].image_width !}" height="{!= ads[0].image_height !}"><param name="movie" value="{!= ads[0].image_url !}"><param name="quality" value="high"><param name="AllowScriptAccess" value="never"><embed src="{!= ads[0].image_url !}" width="{!= ads[0].image_width !}" height="{!= ads[0].image_height !}" type="application/x-shockwave-flash" AllowScriptAccess="never" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed></object>\ - </div>\ - </div>' - }, - google_image_size: '300x250' - }); - </script> - </div> - </div> - <div class="mod step"> - <div class="stepContent"> - <div class="content"> <span class="headline2 head mg-1 block">Step 2</span> - <p>Insert your plant into the hole.</p> - </div> - <figure class="stepThumb"> <img src="http://img-aws.ehowcdn.com/default/cme/photography.prod.demandstudios.com/aae11d4d-a4aa-4251-a4d9-41023ebf6d84.jpg" alt="Orchid in foam oasis" class="photo" data-credit="Lucy Akins"/> </figure> - <figcaption class="small caption"> Orchid in foam oasis (Lucy Akins) </figcaption> - </div> - </div> - <div class="mod step"> - <div class="stepContent"> - <div class="content"> <span class="headline2 head mg-1 block">Step 3</span> - <p>You can add various plants if you wish.</p> - </div> - <figure class="stepThumb"> <img src="http://img-aws.ehowcdn.com/default/cme/photography.prod.demandstudios.com/7afdfa1e-da74-44b5-b89c-ca8123516272.jpg" alt="Various foliage" class="photo" data-credit="Lucy Akins"/> </figure> - <figcaption class="small caption"> Various foliage (Lucy Akins) </figcaption> - </div> - </div> - <div class="mod step"> - <div class="stepContent"> - <div class="content"> <span class="headline2 head mg-1 block">Step 4</span> - <p>Using floral pins, attach enough moss around the oasis to cover it.</p> - </div> - <figure class="stepThumb"> <img src="http://img-aws.ehowcdn.com/default/cme/photography.prod.demandstudios.com/4f6612c0-316a-4c74-bb03-cb4e778f6d72.jpg" alt="Attach moss." class="photo" data-credit="Lucy Akins"/> </figure> - <figcaption class="small caption"> Attach moss. (Lucy Akins) </figcaption> - </div> - </div> - <div class="mod step"> - <div class="stepContent"> - <div class="content"> <span class="headline2 head mg-1 block">Step 5</span> - <p>Gently place the cloche over the oasis. The glass may push some of the moss upward, exposing some of the foam.</p> - </div> - <figure class="stepThumb"> <img src="http://img-aws.ehowcdn.com/default/cme/photography.prod.demandstudios.com/eeb1e0b4-e573-40a3-8db1-2c76f0b13b84.jpg" alt="Place cloche over oasis." class="photo" data-credit="Lucy Akins"/> </figure> - <figcaption class="small caption"> Place cloche over oasis. (Lucy Akins) </figcaption> - </div> - </div> - <div class="mod step"> - <div class="stepContent"> - <div class="content"> <span class="headline2 head mg-1 block">Step 6</span> - <p>Simply pull down the moss with tweezers or insert more moss to fill in the empty spaces.</p> - </div> - <figure class="stepThumb"> <img src="http://img-aws.ehowcdn.com/default/cme/photography.prod.demandstudios.com/812d4649-4152-4363-97c0-f181d02e709a.jpg" alt="Rearrange moss." class="photo" data-credit="Lucy Akins"/> </figure> - <figcaption class="small caption"> Rearrange moss. (Lucy Akins) </figcaption> - </div> - </div> - <div class="mod step"> - <div class="stepContent"> - <div class="content"> <span class="headline2 head mg-1 block">Step 7</span> - <p>You can use any platform you wish. In this case, a small saucer was used.</p> - </div> - <figure class="stepThumb"> <img src="http://img-aws.ehowcdn.com/default/cme/photography.prod.demandstudios.com/0cb3988c-9318-47d6-bc9c-c798da1ede72.jpg" alt="Place cloche on a platform to sit on." class="photo" data-credit="Lucy Akins"/> </figure> - <figcaption class="small caption"> Place cloche on a platform to sit on. (Lucy Akins) </figcaption> - </div> - </div> - <div class="mod step"> - <div class="stepContent"> - <div class="content"> <span class="headline2 head mg-1 block">Step 8</span> - <p>This particular terrarium rests on a planter saucer and features a small white pumpkin.</p> - </div> - <figure class="stepThumb"> <img src="http://img-aws.ehowcdn.com/640/cme/photography.prod.demandstudios.com/e3e18f0b-ab2c-4ffb-9988-a1ea63faef8b.jpg" alt="Cloche placed on a terracotta saucer" class="photo" data-credit="Lucy Akins"/> </figure> - <figcaption class="small caption"> Cloche placed on a terracotta saucer (Lucy Akins) </figcaption> - </div> - </div> - <div class="mod step"> - <div class="stepContent"> - <div class="content"> <span class="headline2 head mg-1 block">Step 9</span> - <p>This particular terrarium was placed on a wood slice and a little toy squirrel was placed inside to add a little whimsy.</p> - </div> - <figure class="stepThumb"> <img src="http://img-aws.ehowcdn.com/640/cme/photography.prod.demandstudios.com/2cd79f8d-0d16-4573-8861-e47fb74b0638.jpg" alt="Placed on a wooden slice" class="photo" data-credit="Lucy Akins"/> </figure> - <figcaption class="small caption"> Placed on a wooden slice (Lucy Akins) </figcaption> - </div> - </div> - <div class="mod step"> - <div class="stepContent"> - <div class="content"> <span class="headline2 head mg-1 block">Finished Terrarium</span> - <p>Displayed alone or in a group, these pretty arrangements allow you to add a little nature to your decor or tablescape.</p> - </div> - <figure class="stepThumb"> <img src="http://img-aws.ehowcdn.com/640/cme/photography.prod.demandstudios.com/78670312-8636-4c42-a75c-3029f7aa6c73.jpg" alt="Cloche terrarium" class="photo" data-credit="Lucy Akins"/> </figure> - <figcaption class="small caption"> Cloche terrarium (Lucy Akins) </figcaption> - </div> - </div> - <div id="m2"></div> - <div id="DMINSTR" type="adimpression" data-type="adTracking" name="&adunit_id=ca-ehow_336x280&ad_unit_type=CNT&ad_unit_network=GAP&revenue_basis=CPC&ad_position=-&revenue_tag=craft_other_diy" data-module="google-ad-336x280"> - <div id="GoogleAdsense336x280" class="mod"></div> - <script> - dmjs.revenueTags.push('ca-ehow_336x280;craft_other_diy,text,suggested7'); - googleAds.addAdUnit({ - priority: 2, - adUnitId: 'GoogleAdsense336x280', - google_ad_channel: 'craft_other_diy,text,suggested7', - google_ad_client: 'ca-ehow_336x280', - google_page_url: 'http://www.ehow.com/how_2042752_build-terrarium.html', - google_max_num_ads: '4', - google_ad_type: 'text', - google_hints: '', - templates: { - text: '<div class="GoogleTextAd GoogleTextAdNew">\ - <a class="header" href="{!= google_info.feedback_url !}">Sponsored Links</a>\ - <ul class="opNew336 evenColorItems">\ - {! for (var i = 0; i < ads.length; i++) { !}\ - <li class="item">\ - <div class="term">\ - <a rel="nofollow" target="_blank" href="{!= ads[i].url !}" title="go to {!= clean(ads[i].visible_url) !}" class="title">\ - <span>{!= ads[i].line1 !}</span>\ - </a>\ - </div>\ - <div class="Ad">\ - <p class="copy">{!= ads[i].line2 !}</p>\ - <p class="copy">{!= ads[i].line3 !}</p>\ - <a rel="nofollow" target="_blank" href="{!= ads[i].url !}" title="go to {!= clean(ads[i].visible_url) !}" class="baseurl url">\ - {!= ads[i].visible_url !}\ - </a>\ - </div>\ - </li>\ - {! } !}\ - </ul>\ - </div>', - image: '<div class="GoogleImageAd GoogleImageAdNew"> \ - <a class="header" href="{!= google_info.feedback_url !}">Sponsored Links</a> \ - <a href="{!= ads[0].url !}" title="go to {!= clean(ads[0].visible_url) !}" target="_blank" class="Ad" >\ - <img src="{!= ads[0].image_url !}" width="{!= ads[0].image_width !}" height="{!= ads[0].image_height !}" border="0" alt="" />\ - </a> \ - </div>', - flash: '<div class="GoogleFlashAd GoogleFlashAdNew">\ - <a class="header" href="{!= google_info.feedback_url !}">Sponsored Links</a> \ - <div class="Ad">\ - <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" width="{!= ads[0].image_width !}" height="{!= ads[0].image_height !}"><param name="movie" value="{!= ads[0].image_url !}"><param name="quality" value="high"><param name="AllowScriptAccess" value="never"><embed src="{!= ads[0].image_url !}" width="{!= ads[0].image_width !}" height="{!= ads[0].image_height !}" type="application/x-shockwave-flash" AllowScriptAccess="never" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed></object>\ - </div>\ - </div>' - }, - google_image_size: '336x280' - }); - AdblockPlus.detect(function(usesABP) { - if (usesABP) { - googleAds.overrideAd('GoogleAdsense336x280', { - google_ad_channel: 'craft_other_diy,text,suggested7,Art6' - }); - } - }); - </script> - </div> - <div class="RelatedSearches FLC mod" id="RelatedSearches" data-module="related-searches"> - <div class="headline2 head heading">Related Searches</div> - </div> - <div class="community mod" style="float:left;width: 610px;"> - <div id="_ehow-com-injection" data-article-id="2042752" data-cat-id="5352" data-scat-id="5426" data-sscat-id="5429"></div> - <script id="_ehow-com-article" type="text/javascript"> - dmjs.domready(function() { - if (!(dmjs.platform.isTablet())) { - var ehowCom = document.createElement('script'); - ehowCom.type = 'text/javascript'; - ehowCom.async = true; - ehowCom.src = 'https://community.ehow.com/widget/ehow/community.js'; - var s = document.getElementsByTagName('script')[0]; - s.parentNode.insertBefore(ehowCom, s); - } - }); - </script> - </div> - <aside class="mod related clearfix" data-module="rcp_bottom"> - <h3 class="head headline2 mg-2">More Like This</h3> - <ul class="unstyled"> - <li class="item fl "> - <a href="http://www.ehow.com/how_4431062_convert-aquarium-terrarium.html"> <img src="http://img-aws.ehowcdn.com/200x133/cme/photography.prod.demandstudios.com/90f9f3d7-6e4f-4be8-b379-3d994ccbf69c.jpg" class="img" alt=""/> - <p class="headline6 mg-0">How to Convert an Aquarium to a Terrarium</p> - </a> - </li> - <li class="item fl even"> - <a href="http://www.ehow.com/video_12263138_plant-terrarium-ideas.html"> <img src="http://img-aws.ehowcdn.com/200x133/viper/media/2b3830ca-4eb6-4bfd-a1cd-d430b3e28d59/jpeg/a7edbb0f-86a7-4c73-9c2d-f85f87b49efa_0.jpg" class="img" alt=""/> - <p class="headline6 mg-0">Plant Terrarium Ideas</p> - </a> - </li> - <li class="item fl "> - <a href="http://www.ehow.com/video_9374_make-terrarium.html"> <img src="http://img-aws.ehowcdn.com/200x133/ehow/images/a00/09/4u/make-terrarium-800x800.jpg" class="img" alt=""/> - <p class="headline6 mg-0">How to Make a Terrarium</p> - </a> - </li> - </ul> - </aside> - <figure id="Comments" class="mod FLC" data-module="comments"> - <div data-id="fb_comments"></div> - </figure> - <section id="FeaturedTombstone" class="mod" data-module="rcp_tombstone"> - <h2 class="headline2 head mg-2">Featured</h2> - <div class="featured FLC"> - <section class="Alpha item" data-cme-module="0"> - <a class="target link-accent gtm_featuredArticles" href="http://www.ehow.com/how_2056495_make-ballet-tutu.html"> <img src="http://img-aws.ehowcdn.com/200x133/cme/photography.prod.demandstudios.com/7f06be69-3650-4e94-88d4-2289c1a5c6a2.jpg" class="photo" alt=""/> <span class="subtitle">Read Article</span> - <div class="title headline6">How to Make a Ballet Tutu</div> - </a> - </section> - <section class=" item" data-cme-module="1"> - <a class="target link-accent gtm_featuredArticles" href="http://www.ehow.com/how_7687715_paint-tulip-watercolor.html"> <img src="http://img-aws.ehowcdn.com/200x133/cme/uploadedimages.demandmedia/tulips-1.jpg" class="photo" alt=""/> <span class="subtitle">Read Article</span> - <div class="title headline6">How to Paint a Tulip in Watercolor</div> - </a> - </section> - <section class="Omega item" data-cme-module="2"> - <a class="target link-accent gtm_featuredArticles" href="http://www.ehow.com/info_12340422_kids-kitchen-slipcover.html"> <img src="http://img-aws.ehowcdn.com/200x133/cme/uploadedimages.demandmedia/kitchen-1.jpg" class="photo" alt=""/> <span class="subtitle">Read Article</span> - <div class="title headline6">Kids Kitchen Slipcover</div> - </a> - </section> - </div> - </section> - </div> - <div class="col-rail"> - <!-- gpt slot 300x250_300x600 --> - <div class="AdUnit mod" data-module="gpt-ad-300x250_300x600" id="300x250_300x600"> - <script type="text/javascript"> - googletag.cmd.push(function() { - googletag.display('300x250_300x600'); - }); - </script> - </div> - <!-- gpt slot 300x100 --> - <div class="mod hide" data-module="radlinks"> - <h3 class="headline3 head mg-2">Related Ads</h3> - <div id="DMINSTR" type="rlimpression" data-type="adTracking" name="&adunit_id=ca-ehow-radlinks_js&ad_unit_type=LNK&ad_unit_network=GAP&revenue_basis=CPC&ad_position=-&revenue_tag=craft_other_diy"> - <div id="GoogleRelatedAds"></div> - <script> - dmjs.revenueTags.push('ca-ehow-radlinks_js;craft_other_diy,text,suggested7'); - googleAds.addAdUnit({ - priority: 1, - adUnitId: 'GoogleRelatedAds', - google_ad_channel: 'craft_other_diy,text,suggested7', - google_ad_client: 'ca-ehow-radlinks_js', - google_page_url: 'http://www.ehow.com/how_2042752_build-terrarium.html', - google_max_num_ads: '0', - google_num_radlinks: '6', - google_max_radlink_len: '27', - metaData: { - "contentid": "2042752", - "studioid": "f941e4cd-a49e-4948-b244-677c15ff8b7f", - "category": "Crafts", - "subcategory": "Other DIY Crafts", - "skin": "crafts" - } - }); - </script> - </div> - </div> - <div class="RelatedSearches FLC mod" id="RelatedSearches" data-module="related-searches-right"> - <div class="headline3 head mg-2">Related Searches</div> - </div> - <section class="mod box slideshow" data-module="rcp_slideshow_module"> - <a href="http://www.ehow.com/how_16357_make-paper-sunflowers.html"> <img src="http://img-aws.ehowcdn.com/300x200/cme/uploadedimages.demandmedia/sunflowers-1.jpg" alt="" title="" class="photo" longdesc="http://s3.amazonaws.com/uploadedimages.demandmedia/sunflowers-1.jpg"/> <span class="arrow arrow-left" data-icon="4"></span> <span class="arrow arrow-right" data-icon="5"></span> <span class="subtitle"> -Read Article </span> </a> - <a href="http://www.ehow.com/how_16357_make-paper-sunflowers.html"> - <h3 class="headline4 title"> -How to Make Paper Sunflowers </h3> </a> - </section> - <ul class="media-list mod unstyled " data-module="rcp_right_rail"> - <h2 class="headline3 head mg-2 title">You May Like</h2> - <li class="media headline6"> - <a href="http://www.ehow.com/how_4431062_convert-aquarium-terrarium.html" class="fl gtm_youMayLike"> <img src="http://img-aws.ehowcdn.com/150X100/cme/photography.prod.demandstudios.com/90f9f3d7-6e4f-4be8-b379-3d994ccbf69c.jpg" alt="" class="media-object"/> - <div class="pagescore js-pagescore small" data-score="true" data-url="http://www.ehow.com/how_4431062_convert-aquarium-terrarium.html"> <span class=" num js-num"></span> <span class="icon"></span> </div> - </a> - <div class="media-body"> <a href="http://www.ehow.com/how_4431062_convert-aquarium-terrarium.html" class="gtm_youMayLike">How to Convert an Aquarium to a Terrarium</a> </div> - </li> - <li class="media headline6"> - <a href="http://www.ehow.com/video_12263137_build-orchid-terrarium.html" class="fl gtm_youMayLike"> <img src="http://img-aws.ehowcdn.com/150X100/viper/media/2b3830ca-4eb6-4bfd-a1cd-d430b3e28d59/jpeg/47b02568-2cde-44f4-a39c-494294e50ccd_1.jpg" alt="" class="media-object"/> - <div class="pagescore js-pagescore small" data-score="true" data-url="http://www.ehow.com/video_12263137_build-orchid-terrarium.html"> <span class=" num js-num"></span> <span class="icon"></span> </div> - </a> - <div class="media-body"> <a href="http://www.ehow.com/video_12263137_build-orchid-terrarium.html" class="gtm_youMayLike">How to Build an Orchid Terrarium</a> </div> - </li> - <li class="media headline6"> - <a href="http://www.ehow.com/video_9374_make-terrarium.html" class="fl gtm_youMayLike"> <img src="http://img-aws.ehowcdn.com/150X100/ehow/images/a00/09/4u/make-terrarium-800x800.jpg" alt="" class="media-object"/> - <div class="pagescore js-pagescore small" data-score="true" data-url="http://www.ehow.com/video_9374_make-terrarium.html"> <span class=" num js-num"></span> <span class="icon"></span> </div> - </a> - <div class="media-body"> <a href="http://www.ehow.com/video_9374_make-terrarium.html" class="gtm_youMayLike">How to Make a Terrarium</a> </div> - </li> - <li class="media headline6"> - <a href="http://www.ehow.com/video_12263133_group-plants-together-terrarium.html" class="fl gtm_youMayLike"> <img src="http://img-aws.ehowcdn.com/150X100/viper/media/2b3830ca-4eb6-4bfd-a1cd-d430b3e28d59/jpeg/dc66dd37-78b6-4494-a8db-7bbe697cedda_0.jpg" alt="" class="media-object"/> - <div class="pagescore js-pagescore small" data-score="true" data-url="http://www.ehow.com/video_12263133_group-plants-together-terrarium.html"> <span class=" num js-num"></span> <span class="icon"></span> </div> - </a> - <div class="media-body"> <a href="http://www.ehow.com/video_12263133_group-plants-together-terrarium.html" class="gtm_youMayLike">How to Group Plants Together in a Terrarium</a> </div> - </li> - <li class="media headline6"> - <a href="http://www.ehow.com/video_12263135_build-tropical-terrarium.html" class="fl gtm_youMayLike"> <img src="http://img-aws.ehowcdn.com/150X100/viper/media/2b3830ca-4eb6-4bfd-a1cd-d430b3e28d59/jpeg/70ebb809-634d-41df-9fff-9b183f81e9e0_1.jpg" alt="" class="media-object"/> - <div class="pagescore js-pagescore small" data-score="true" data-url="http://www.ehow.com/video_12263135_build-tropical-terrarium.html"> <span class=" num js-num"></span> <span class="icon"></span> </div> - </a> - <div class="media-body"> <a href="http://www.ehow.com/video_12263135_build-tropical-terrarium.html" class="gtm_youMayLike">How to Build a Tropical Terrarium</a> </div> - </li> - <li class="media headline6"> - <a href="http://www.ehow.com/how_7853040_diy-own-living-room-furniture.html" class="fl gtm_youMayLike"> <img src="http://img-aws.ehowcdn.com/150X100/cme/photography.prod.demandstudios.com/2ecfca5a-1c35-4fbe-9ff5-8f5bd8129d97.jpg" alt="" class="media-object"/> - <div class="pagescore js-pagescore small" data-score="true" data-url="http://www.ehow.com/how_7853040_diy-own-living-room-furniture.html"> <span class=" num js-num"></span> <span class="icon"></span> </div> - </a> - <div class="media-body"> <a href="http://www.ehow.com/how_7853040_diy-own-living-room-furniture.html" class="gtm_youMayLike">DIY Build Your Own Living Room Furniture</a> </div> - </li> - <li class="media headline6"> - <a href="http://www.ehow.com/slideshow_12333243_edible-arrangements-make-own-easter-candy-terrariums.html" class="fl gtm_youMayLike"> <img src="http://img-aws.ehowcdn.com/150X100/ds-cdn-write/upload/image/39/4D/34B73D38-EC9F-4415-A740-23DCF2F94D39/34B73D38-EC9F-4415-A740-23DCF2F94D39.jpg" alt="" class="media-object"/> - <div class="pagescore js-pagescore small" data-score="true" data-url="http://www.ehow.com/slideshow_12333243_edible-arrangements-make-own-easter-candy-terrariums.html"> <span class=" num js-num"></span> <span class="icon"></span> </div> - </a> - <div class="media-body"> <a href="http://www.ehow.com/slideshow_12333243_edible-arrangements-make-own-easter-candy-terrariums.html" class="gtm_youMayLike">Edible Arrangements: Make Your Own Easter Candy Terrariums</a> </div> - </li> - <li class="media headline6"> - <a href="http://www.ehow.com/ehow-mom/blog/3-ingredient-easter-bark/" class="fl gtm_youMayLike"> <img src="http://img-aws.ehowcdn.com/150X100/ehow-mom-blog-us/files/2015/03/easterbark0.jpg" alt="" class="media-object"/> - <div class="pagescore js-pagescore small" data-score="true" data-url="http://www.ehow.com/ehow-mom/blog/3-ingredient-easter-bark/"> <span class=" num js-num"></span> <span class="icon"></span> </div> - </a> - <div class="media-body"> <a href="http://www.ehow.com/ehow-mom/blog/3-ingredient-easter-bark/" class="gtm_youMayLike">3-Ingredient Easter Bark</a> </div> - </li> - </ul> - </div> - </section> - <script src="http://v5-static.ehowcdn.com/content/compressed/module-jquery-764eded0.js"></script> - <footer id="Footer" data-section="footer"> - <div class="inner-container"> - <div class="details clearfix"> - <div class="identity"> <a href="http://www.demandmedia.com/" class="logo">demandmedia.com</a> - <p class="copyright">© 1999-2015 Demand Media, Inc.</p> - </div> - <nav xmlns="http://www.w3.org/1999/html"> - <ul class="listing"> - <li> - <ul> - <li class="item row1"> <a href="http://www.ehow.com/about-us.html" class="title">About eHow</a> </li> - <li class="item row1"> <a href="http://www.ehow.co.uk/" class="title">eHow UK</a> </li> - <li class="item row1"> <a href="http://www.ehowenespanol.com/" class="title">eHow en Español</a> </li> - <li class="item row1"> <a href="http://www.ehow.com.br/" class="title">eHow Brasil</a> </li> - <li class="item row1"> <a href="http://www.ehow.de/" class="title">eHow Deutschland</a> </li> - <li class="item row1"> <a href="http://www.ehowhelp.com/hc/en-us" class="title">Contact Us</a> </li> - </ul> - </li> - <li> - <ul> - <li class="item row2"> <a href="http://www.ehow.com/blog/" class="title">eHow Blog</a> </li> - <li class="item row2"> <a href="http://www.ehow.com/how-to.html" class="title">How to by Topic</a> </li> - <li class="item row2"> <a href="http://www.ehow.com/videos.html" class="title">How to Videos</a> </li> - </ul> - </li> - <li> - <ul> - <li class="item row3"> <a href="http://www.ehow.com/terms-of-use.html" class="title">Terms of Use</a> </li> - <li class="item row3"> <a href="http://www.ehow.com/privacy.html" class="title">Privacy Policy</a> </li> - <li class="item row3"> <a href="http://www.ehow.com/terms-of-use.html#copyright/" class="title">Report Copyright</a> </li> - <li class="item row3"> - <a id="_bapw-link" class="ad-choice" style="cursor:pointer !important"><img id="_bapw-icon" style="display:inline !important;vertical-align:middle !important"/> <span style="vertical-align:middle !important">Ad Choices</span></a> <abbr>en-US</abbr> </li> - </ul> - </li> - </ul> - </nav> - <div class="socialConnect fr"> - <p class="headline4 heading head">Connect with us:</p> - <ul> - <li class="source"><a class="icon elegant-icons gtm_social" href="http://www.pinterest.com/ehow/" target="_blank"></a></li> - <li class="source"><a class="icon elegant-icons gtm_social" href="https://www.facebook.com/eHow" target="_blank"></a></li> - <li class="source"><a class="icon elegant-icons gtm_social" href="https://twitter.com/ehow" target="_blank"></a></li> - <li class="source"><a class="icon elegant-icons gtm_social" href="https://plus.google.com/+howto/posts" target="_blank"></a></li> - <li class="source last"><a class="icon elegant-icons gtm_social" href="http://instagram.com/ehow_team" target="_blank"></a></li> - </ul> - </div> - </div> - </div> - <div class="extras"> - <div class="comscore comscore-eh"> - <div class="category5352 eh-cat"></div> - </div> - </div> - </footer> - <!-- BEGIN dmtracker --> - <noscript><img src="http://vs.dmtracker.com/images/zig.gif?Log=1" alt="zig" /></noscript> - <div id="dmOmni"></div> - <!-- END dmtracker --> - <noscript><img src="http://b.scorecardresearch.com/b?c1=2&c2=6036385&c3=&c7=http%3A%2F%2Fwww.ehow.com%2Fhow_2042752_build-terrarium.html%3Fcomscorekw%3DeHow_Hobbies_Games_and_Toys&cv=2.0&cj=1" /></noscript> - <script> - var dmjs = dmjs || {}; - dmjs.global = dmjs.global || {}; - dmjs.global.comscore = { - "c1": "2", - "c2": "6036385", - "c3": "", - "options": { - "url_append": "comscorekw=eHow_Hobbies_Games_and_Toys" - } - }; - dmjs.global.dm_tracker = { - "domain": "vs.dmtracker.com", - "url": "bit.ehow.com", - "bit": "bit" - }; - dmjs.global.fb_comment = { - "num_posts": 5, - "width": 620, - "mobile": false, - "href": "http:\/\/www.ehow.com\/how_2042752_build-terrarium.html", - "selector": "[data-id=\"fb_comments\"]" - }; - dmjs.global.hnh = { - "url": "http:\/\/services.ehowcdn.com\/widgets\/generated\/hnh.min.js" - }; - </script> - <script src="http://dynamic01.ehowcdn.com/services/modules/js/hnh,evidon,rev_tag,dm_track,comscore,common_deferred,cache_buster/ba9c0085/" defer="defer"></script> - <!--[if lt IE 9]> -<script src="http://v5-static.ehowcdn.com/content/compressed/common_footer-266c5d77.js" ></script> -<![endif]--> - <script src="http://v5-static.ehowcdn.com/content/compressed/inline-81314781.js" defer="defer"></script> - <script> - dmjs.domready(function() { - new OmnitureLinkSet($('[data-module="rcp_top"]'), "TLS101", "default_IL"); - }); - </script> - <script> - dmjs.domready(function() { - new OmnitureLinkSet($('[data-module="rcp_bottom"]'), "TLS103", "default_B"); - }); - </script> - <script> - dmjs.domready(function() { - new OmnitureLinkSet($('[data-module="rcp_tombstone"]'), "LS103", "default_TOMB"); - }); - </script> - <script> - dmjs.domready(function() { - new OmnitureLinkSet($('[data-module="rcp_slideshow_module"]'), "TLS106", "default_SS"); - }); - </script> - <script> - dmjs.domready(function() { - new OmnitureLinkSet($('[data-module="rcp_right_rail"]'), "TLS102", "default_R3"); - }); - </script> - <script> - googleAds.defaults.google_adtest = 'off'; - googleAds.defaults.google_page_url = 'http://www.ehow.com/how_2042752_build-terrarium.html'; - googleAds.render(); - </script> - <script defer="" src="//cdn.optimizely.com/js/9718688.js"></script> - <script> - dmjs.addEvent(window, 'load', function() { - dmjs.fireEvents(); - }); - </script> - <script defer="" src="http://static.ehownowcdn.com/widget/ehow/auth.js"></script> - <div id="fb-root"></div> - <div class="view-mobile"></div> -</body> - -</html> diff --git a/test/test-pages/ietf-1/expected.html b/test/test-pages/ietf-1/expected.html index eab8ec5..70a2064 100644 --- a/test/test-pages/ietf-1/expected.html +++ b/test/test-pages/ietf-1/expected.html @@ -1076,7 +1076,7 @@ charset=UTF-8","Content-Length":106}}} M. Jones, D. Hardt, "The OAuth 2.0 Authorization Framework: Bearer Token Usage", <a href="http://fakehost/test/rfc6750">RFC6750</a>, October 2012. - [] + [<a id="ref-AUTHORING" name="ref-AUTHORING">AUTHORING</a>] "Using remoteStorage for web authoring", reSite wiki, retrieved September 2014. <a href="https://github.com/michielbdejong/resite/wiki">https://github.com/michielbdejong/resite/wiki</a> /Using-remoteStorage-for-web-authoring diff --git a/test/test-pages/lemonde-1/expected.html b/test/test-pages/lemonde-1/expected.html index 6dcaf7d..67ed491 100644 --- a/test/test-pages/lemonde-1/expected.html +++ b/test/test-pages/lemonde-1/expected.html @@ -1,46 +1,46 @@ - <p class="bloc_signature"> <span id="publisher" itemprop="Publisher" data-source="Le Monde.fr">Le Monde</span> | - <time datetime="2015-05-04T13:36:31+02:00" itemprop="datePublished">04.05.2015 à 13h36</time> • Mis à jour le - <time datetime="2015-05-05T20:13:12+02:00" itemprop="dateModified">05.05.2015 à 20h13</time> | <span class="signature_article"> -Par <span itemprop="author" class="auteur txt2_120"> <a class="auteur" target="_blank" href="http://fakehost/journaliste/martin-untersinger/">Martin Untersinger</a> (avec Damien Leloup et Morgane Tual) +<p class="bloc_signature"> <span data-source="Le Monde.fr" id="publisher" itemprop="Publisher">Le Monde</span> | + <time datetime="2015-05-04T13:36:31+02:00" itemprop="datePublished">04.05.2015 à 13h36</time> • Mis à jour le + <time datetime="2015-05-05T20:13:12+02:00" itemprop="dateModified">05.05.2015 à 20h13</time> | <span class="signature_article"> +Par <span class="auteur txt2_120" itemprop="author"> <a class="auteur" href="http://fakehost/journaliste/martin-untersinger/" target="_blank">Martin Untersinger</a> (avec Damien Leloup et Morgane Tual) </span> </span> - </p> - <div id="articleBody" class="contenu_article js_article_body" itemprop="articleBody"> - <p class="video_player"> - <iframe src="//www.dailymotion.com/embed/video/x2p552m?syndication=131181" frameborder="0" width="534" height="320"></iframe> - </p> - <p>Les députés ont, sans surprise, adopté à une large majorité (438 contre 86 et 42 abstentions) le projet de loi sur le renseignement défendu par le gouvernement lors d’un vote solennel, mardi 5 mai. Il sera désormais examiné par le Sénat, puis le Conseil constitutionnel, prochainement saisi par 75 députés. Dans un souci d'apaisement, François Hollande avait annoncé par avance qu'il saisirait les Sages.</p> - <p><strong>Revivez <a href="http://fakehost/pixels/live/2015/05/05/suivez-le-vote-de-la-loi-renseignement-en-direct_4628012_4408996.html">le direct du vote à l’Assemblée avec vos questions.</a></strong></p> - <p>Ont voté contre : 10 députés socialistes (sur 288), 35 UMP (sur 198), 11 écologistes (sur 18), 11 UDI (sur 30), 12 députés Front de gauche (sur 15) et 7 non-inscrits (sur 9). <a href="http://www2.assemblee-nationale.fr/scrutins/detail/%28legislature%29/14/%28num%29/1109">Le détail est disponible sur le site de l'Assemblée nationale.</a></p> - <p>Parmi les députés ayan voté contre figurent notamment des opposants de la première heure, comme l'UMP Laure de la Raudière ou l'écologiste Sergio Coronado, mais aussi quelques poids lourds de l'opposition comme Patrick Devedjian ou Claude Goasguen. A gauche, on trouve parmi les quelque opposants au texte Aurélie Filipetti. Christian Paul, qui avait été très actif lors d'autres débats sur les libertés numériques, s'est abstenu.</p> - <p>Pouria Amirshahi, député socialiste des Français de l'étranger qui a également voté contre, a annoncé qu'il transmettrait un « mémorandum argumenté » au Conseil constitutionnel et demanderait à se faire auditionner sur le projet de loi. D'autres députés ont prévu de faire la même démarche.</p> - <p>Ce texte, fortement décrié par la société civile pour son manque de contre-pouvoir et le caractère intrusif des techniques qu’il autorise, entend donner un cadre aux pratiques des services de renseignement, rendant légales certaines pratiques qui, jusqu’à présent, ne l’étaient pas.</p> - <p><u>Retour sur ses principales dispositions, après son passage en commission des lois et après le débat en séance publique.</u></p> - <h2 class="intertitre">Définition des objectifs des services</h2> - <p>Le projet de loi énonce les domaines que peuvent invoquer les services pour justifier leur surveillance. Il s’agit notamment, de manière attendue, de <em>« l’indépendance nationale, de l’intégrité du territoire et de la défense nationale »</em> et de<em> « la prévention du terrorisme »,</em> mais également des <em>« intérêts majeurs de la politique étrangère »,</em> ainsi que de la <em>« prévention des atteintes à la forme républicaine des institutions »</em> et de <em>« la criminalité et de la délinquance organisées »</em>. Des formulations parfois larges qui inquiètent les opposants au texte qui craignent qu’elles puissent permettre de surveiller des activistes ou des manifestants.</p> - <h2 class="intertitre">La Commission de contrôle</h2> - <p>Le contrôle de cette surveillance sera confié à une nouvelle autorité administrative indépendante, la Commission nationale de contrôle des techniques de renseignement (CNCTR), composée de six magistrats du Conseil d’Etat et de la Cour de cassation, de trois députés et trois sénateurs de la majorité et de l’opposition, et d’un expert technique. Elle remplacera l’actuelle Commission nationale de contrôle des interceptions de sécurité (CNCIS).</p> - <p>Elle délivrera son avis, sauf cas d’urgence, avant toute opération de surveillance ciblée. Deux types urgences sont prévus par la loi : d’un côté une <em>« urgence absolue »</em>, pour laquelle un agent pourra se passer de l’avis de la CNCTR mais pas de l’autorisation du premier ministre. De l’autre, une urgence opérationnelle extrêmement limitée, notamment en termes de techniques, à l’initiative du chef du service de renseignement, qui se passe de l’avis de la CNCTR. Ces cas d’urgence ne justifieront pas l’intrusion d’un domicile ni la surveillance d’un journaliste, un parlementaire ou un avocat. Dans ces cas, la procédure classique devra s’appliquer.</p> - <p>L’avis de la CNCTR ne sera pas contraignant, mais cette commission pourra saisir le Conseil d’Etat si elle estime que la loi n’est pas respectée et elle disposera de pouvoirs d’enquête. Ce recours juridictionnel est une nouveauté dans le monde du renseignement.</p> - <h2 class="intertitre">Les « boîtes noires »</h2> - <p>Une des dispositions les plus contestées de ce projet de loi prévoit de pouvoir contraindre les fournisseurs d’accès à Internet (FAI) à « <em>détecter une menace terroriste sur la base d’un traitement automatisé ». </em>Ce dispositif – autorisé par le premier ministre par tranche de quatre mois – permettrait de détecter, en temps réel ou quasi réel, les personnes ayant une activité en ligne typique de « schémas » utilisés par les terroristes pour transmettre des informations.</p> - <p>En pratique, les services de renseignement pourraient installer chez les FAI une « boîte noire » surveillant le trafic. Le contenu des communications – qui resterait « anonyme » – ne serait pas surveillé, mais uniquement les métadonnées : origine ou destinataire d’un message, adresse IP d’un site visité, durée de la conversation ou de la connexion… Ces données ne seraient pas conservées.</p> - <p>La Commission nationale informatique et libertés<strong> </strong>(CNIL), qui critique fortement cette disposition. La CNIL soulève notamment que l’anonymat de ces données est très relatif, puisqu’il peut être levé.</p> - <p class="lire">Lire aussi : <a href="http://fakehost/pixels/article/2015/03/18/les-critiques-de-la-cnil-contre-le-projet-de-loi-sur-le-renseignement_4595839_4408996.html">Les critiques de la CNIL contre le projet de loi sur le renseignement</a> </p> - <p>Le dispositif introduit une forme de « pêche au chalut » – un brassage très large des données des Français à la recherche de quelques individus. Le gouvernement se défend de toute similarité avec les dispositifs mis en place par la NSA américaine, arguant notamment que les données ne seront pas conservées et que cette activité sera contrôlée par une toute nouvelle commission aux moyens largement renforcés. Il s’agit cependant d’un dispositif très large, puisqu’il concernera tous les fournisseurs d’accès à Internet, et donc tous les internautes français.</p> - <h2 class="intertitre">L’élargissement de la surveillance électronique pour détecter les « futurs » terroristes</h2> - <p>La surveillance des métadonnées sera aussi utilisée pour tenter de détecter de nouveaux profils de terroristes potentiels, prévoit le projet de loi. Le gouvernement considère qu’il s’agit d’une manière efficace de détecter les profils qui passent aujourd’hui <em>« entre les mailles du filet »</em>, par exemple des personnes parties en Syrie ou en Irak sans qu’aucune activité suspecte n’ait été décelée avant leur départ.</p> - <p>Pour repérer ces personnes, la loi permettra d’étendre la surveillance électronique à toutes les personnes en contact avec des personnes déjà suspectées. En analysant leurs contacts, la fréquence de ces derniers et les modes de communication, les services de renseignement espèrent pouvoir détecter ces nouveaux profils en amont.</p> - <h2 class="intertitre">De nouveaux outils et méthodes de collecte</h2> - <p>Les services pourront également procéder, après un avis de la CNCTR, à la pose de micros dans une pièce ou de mouchards sur un objet (voiture par exemple), ou à l’intérieur d’un ordinateur. L’utilisation des IMSI-catchers (fausses antennes qui permettent d’intercepter des conversations téléphoniques) est également légalisée, pour les services de renseignement, dans certains cas. Le nombre maximal de ces appareils sera fixé par arrêté du premier ministre après l’avis de la CNCTR.</p> - <p><strong>Lire : <a href="http://fakehost/pixels/article/2015/03/31/que-sont-les-imsi-catchers-ces-valises-qui-espionnent-les-telephones-portables_4605827_4408996.html">Que sont les IMSI-catchers, ces valises qui espionnent les téléphones portables ?</a></strong></p> - <p>La loi introduit également des mesures de surveillance internationale : concrètement, les procédures de contrôle seront allégées lorsqu’un des « bouts » de la communication sera situé à l’étranger (concrètement, un Français qui parle avec un individu situé à l’étranger). Cependant, comme l’a souligné l’Arcep (l’Autorité de régulation des communications électroniques et des postes), sollicitée pour le versant technique de cette mesure, il est parfois difficile de s’assurer qu’une communication, même passant par l’étranger, ne concerne pas deux Français.</p> - <h2 class="intertitre">Un nouveau fichier</h2> - <p>La loi crée un fichier judiciaire national automatisé des auteurs d’infractions terroristes (Fijait), dont les données pourront être conservées pendant vingt ans.</p> - <p>Ce fichier concerne les personnes ayant été condamnées, même si une procédure d’appel est en cours. Les mineurs pourront aussi être inscrits dans ce fichier et leurs données conservées jusqu’à dix ans. L’inscription ne sera pas automatique et se fera sur décision judiciaire. Certaines mises en examen pourront aussi apparaître sur ce fichier. En cas de non-lieu, relaxe, acquittement, amnistie ou réhabilitation, ces informations seront effacées.</p> - <h2 class="intertitre">Renseignement pénitentiaire</h2> - <p>Le renseignement pénitentiaire pourra, dans des conditions qui seront fixées par décret, profiter des techniques que légalise le projet de loi pour les services de renseignement. La ministre de la justice, Christiane Taubira, était défavorable à cette disposition, soutenue par le rapporteur du texte, la droite et une partie des députés de gauche. Pour la ministre, cette innovation va dénaturer le renseignement pénitentiaire et le transformer en véritable service de renseignement.</p> - <h2 class="intertitre">Conservation des données</h2> - <p>La CNIL <a href="http://www.cnil.fr/fileadmin/documents/La_CNIL/actualite/Les_propositions_de_la_CNIL_sur_les_evolutions_de_la_loi_Informatique_et_Libertes.pdf">a fait part à plusieurs reprises de sa volonté</a> d’exercer sa mission de contrôle sur les fichiers liés au renseignement, qui seront alimentés par ces collectes. Ces fichiers sont aujourd’hui exclus du périmètre d’action de la CNIL.</p> - <p>La durée de conservation des données collectées – et l’adaptation de cette durée à la technique employée – a par ailleurs été inscrite dans la loi, contrairement au projet initial du gouvernement qui entendait fixer ces limites par décret. Elle pourra aller jusqu’à cinq ans dans le cas des données de connexion.</p> - <h2 class="intertitre">Un dispositif pour les lanceurs d’alerte</h2> - <p>La loi prévoit également une forme de protection pour les agents qui seraient témoins de surveillance illégale. Ces lanceurs d’alerte pourraient solliciter la CNCTR, voire le premier ministre, et leur fournir toutes les pièces utiles. La CNCTR pourra ensuite aviser le procureur de la République et solliciter la Commission consultative du secret de la défense nationale afin que cette dernière <em>« donne au premier ministre son avis sur la possibilité de déclassifier tout ou partie de ces éléments »</em>. Aucune mesure de rétorsion ne pourra viser l’agent qui aurait dénoncé des actes potentiellement illégaux.</p>
\ No newline at end of file + </p><div class="contenu_article js_article_body" id="articleBody" itemprop="articleBody"> + <p> + <iframe frameborder="0" height="320" src="//www.dailymotion.com/embed/video/x2p552m?syndication=131181" width="534"></iframe> + </p> + <p>Les députés ont, sans surprise, adopté à une large majorité (438 contre 86 et 42 abstentions) le projet de loi sur le renseignement défendu par le gouvernement lors d’un vote solennel, mardi 5 mai. Il sera désormais examiné par le Sénat, puis le Conseil constitutionnel, prochainement saisi par 75 députés. Dans un souci d'apaisement, François Hollande avait annoncé par avance qu'il saisirait les Sages.</p> + <p><strong>Revivez <a href="http://fakehost/pixels/live/2015/05/05/suivez-le-vote-de-la-loi-renseignement-en-direct_4628012_4408996.html">le direct du vote à l’Assemblée avec vos questions.</a></strong></p> + <p>Ont voté contre : 10 députés socialistes (sur 288), 35 UMP (sur 198), 11 écologistes (sur 18), 11 UDI (sur 30), 12 députés Front de gauche (sur 15) et 7 non-inscrits (sur 9). <a href="http://www2.assemblee-nationale.fr/scrutins/detail/%28legislature%29/14/%28num%29/1109">Le détail est disponible sur le site de l'Assemblée nationale.</a></p> + <p>Parmi les députés ayan voté contre figurent notamment des opposants de la première heure, comme l'UMP Laure de la Raudière ou l'écologiste Sergio Coronado, mais aussi quelques poids lourds de l'opposition comme Patrick Devedjian ou Claude Goasguen. A gauche, on trouve parmi les quelque opposants au texte Aurélie Filipetti. Christian Paul, qui avait été très actif lors d'autres débats sur les libertés numériques, s'est abstenu.</p> + <p>Pouria Amirshahi, député socialiste des Français de l'étranger qui a également voté contre, a annoncé qu'il transmettrait un « mémorandum argumenté » au Conseil constitutionnel et demanderait à se faire auditionner sur le projet de loi. D'autres députés ont prévu de faire la même démarche.</p> + <p>Ce texte, fortement décrié par la société civile pour son manque de contre-pouvoir et le caractère intrusif des techniques qu’il autorise, entend donner un cadre aux pratiques des services de renseignement, rendant légales certaines pratiques qui, jusqu’à présent, ne l’étaient pas.</p> + <p><u>Retour sur ses principales dispositions, après son passage en commission des lois et après le débat en séance publique.</u></p> + <h2 class="intertitre">Définition des objectifs des services</h2> + <p>Le projet de loi énonce les domaines que peuvent invoquer les services pour justifier leur surveillance. Il s’agit notamment, de manière attendue, de <em>« l’indépendance nationale, de l’intégrité du territoire et de la défense nationale »</em> et de<em> « la prévention du terrorisme »,</em> mais également des <em>« intérêts majeurs de la politique étrangère »,</em> ainsi que de la <em>« prévention des atteintes à la forme républicaine des institutions »</em> et de <em>« la criminalité et de la délinquance organisées »</em>. Des formulations parfois larges qui inquiètent les opposants au texte qui craignent qu’elles puissent permettre de surveiller des activistes ou des manifestants.</p> + <h2 class="intertitre">La Commission de contrôle</h2> + <p>Le contrôle de cette surveillance sera confié à une nouvelle autorité administrative indépendante, la Commission nationale de contrôle des techniques de renseignement (CNCTR), composée de six magistrats du Conseil d’Etat et de la Cour de cassation, de trois députés et trois sénateurs de la majorité et de l’opposition, et d’un expert technique. Elle remplacera l’actuelle Commission nationale de contrôle des interceptions de sécurité (CNCIS).</p> + <p>Elle délivrera son avis, sauf cas d’urgence, avant toute opération de surveillance ciblée. Deux types urgences sont prévus par la loi : d’un côté une <em>« urgence absolue »</em>, pour laquelle un agent pourra se passer de l’avis de la CNCTR mais pas de l’autorisation du premier ministre. De l’autre, une urgence opérationnelle extrêmement limitée, notamment en termes de techniques, à l’initiative du chef du service de renseignement, qui se passe de l’avis de la CNCTR. Ces cas d’urgence ne justifieront pas l’intrusion d’un domicile ni la surveillance d’un journaliste, un parlementaire ou un avocat. Dans ces cas, la procédure classique devra s’appliquer.</p> + <p>L’avis de la CNCTR ne sera pas contraignant, mais cette commission pourra saisir le Conseil d’Etat si elle estime que la loi n’est pas respectée et elle disposera de pouvoirs d’enquête. Ce recours juridictionnel est une nouveauté dans le monde du renseignement.</p> + <h2 class="intertitre">Les « boîtes noires »</h2> + <p>Une des dispositions les plus contestées de ce projet de loi prévoit de pouvoir contraindre les fournisseurs d’accès à Internet (FAI) à « <em>détecter une menace terroriste sur la base d’un traitement automatisé ». </em>Ce dispositif – autorisé par le premier ministre par tranche de quatre mois – permettrait de détecter, en temps réel ou quasi réel, les personnes ayant une activité en ligne typique de « schémas » utilisés par les terroristes pour transmettre des informations.</p> + <p>En pratique, les services de renseignement pourraient installer chez les FAI une « boîte noire » surveillant le trafic. Le contenu des communications – qui resterait « anonyme » – ne serait pas surveillé, mais uniquement les métadonnées : origine ou destinataire d’un message, adresse IP d’un site visité, durée de la conversation ou de la connexion… Ces données ne seraient pas conservées.</p> + <p>La Commission nationale informatique et libertés<strong> </strong>(CNIL), qui critique fortement cette disposition. La CNIL soulève notamment que l’anonymat de ces données est très relatif, puisqu’il peut être levé.</p> + <p class="lire">Lire aussi : <a href="http://fakehost/pixels/article/2015/03/18/les-critiques-de-la-cnil-contre-le-projet-de-loi-sur-le-renseignement_4595839_4408996.html">Les critiques de la CNIL contre le projet de loi sur le renseignement</a> </p> + <p>Le dispositif introduit une forme de « pêche au chalut » – un brassage très large des données des Français à la recherche de quelques individus. Le gouvernement se défend de toute similarité avec les dispositifs mis en place par la NSA américaine, arguant notamment que les données ne seront pas conservées et que cette activité sera contrôlée par une toute nouvelle commission aux moyens largement renforcés. Il s’agit cependant d’un dispositif très large, puisqu’il concernera tous les fournisseurs d’accès à Internet, et donc tous les internautes français.</p> + <h2 class="intertitre">L’élargissement de la surveillance électronique pour détecter les « futurs » terroristes</h2> + <p>La surveillance des métadonnées sera aussi utilisée pour tenter de détecter de nouveaux profils de terroristes potentiels, prévoit le projet de loi. Le gouvernement considère qu’il s’agit d’une manière efficace de détecter les profils qui passent aujourd’hui <em>« entre les mailles du filet »</em>, par exemple des personnes parties en Syrie ou en Irak sans qu’aucune activité suspecte n’ait été décelée avant leur départ.</p> + <p>Pour repérer ces personnes, la loi permettra d’étendre la surveillance électronique à toutes les personnes en contact avec des personnes déjà suspectées. En analysant leurs contacts, la fréquence de ces derniers et les modes de communication, les services de renseignement espèrent pouvoir détecter ces nouveaux profils en amont.</p> + <h2 class="intertitre">De nouveaux outils et méthodes de collecte</h2> + <p>Les services pourront également procéder, après un avis de la CNCTR, à la pose de micros dans une pièce ou de mouchards sur un objet (voiture par exemple), ou à l’intérieur d’un ordinateur. L’utilisation des IMSI-catchers (fausses antennes qui permettent d’intercepter des conversations téléphoniques) est également légalisée, pour les services de renseignement, dans certains cas. Le nombre maximal de ces appareils sera fixé par arrêté du premier ministre après l’avis de la CNCTR.</p> + <p><strong>Lire : <a href="http://fakehost/pixels/article/2015/03/31/que-sont-les-imsi-catchers-ces-valises-qui-espionnent-les-telephones-portables_4605827_4408996.html">Que sont les IMSI-catchers, ces valises qui espionnent les téléphones portables ?</a></strong></p> + <p>La loi introduit également des mesures de surveillance internationale : concrètement, les procédures de contrôle seront allégées lorsqu’un des « bouts » de la communication sera situé à l’étranger (concrètement, un Français qui parle avec un individu situé à l’étranger). Cependant, comme l’a souligné l’Arcep (l’Autorité de régulation des communications électroniques et des postes), sollicitée pour le versant technique de cette mesure, il est parfois difficile de s’assurer qu’une communication, même passant par l’étranger, ne concerne pas deux Français.</p> + <h2 class="intertitre">Un nouveau fichier</h2> + <p>La loi crée un fichier judiciaire national automatisé des auteurs d’infractions terroristes (Fijait), dont les données pourront être conservées pendant vingt ans.</p> + <p>Ce fichier concerne les personnes ayant été condamnées, même si une procédure d’appel est en cours. Les mineurs pourront aussi être inscrits dans ce fichier et leurs données conservées jusqu’à dix ans. L’inscription ne sera pas automatique et se fera sur décision judiciaire. Certaines mises en examen pourront aussi apparaître sur ce fichier. En cas de non-lieu, relaxe, acquittement, amnistie ou réhabilitation, ces informations seront effacées.</p> + <h2 class="intertitre">Renseignement pénitentiaire</h2> + <p>Le renseignement pénitentiaire pourra, dans des conditions qui seront fixées par décret, profiter des techniques que légalise le projet de loi pour les services de renseignement. La ministre de la justice, Christiane Taubira, était défavorable à cette disposition, soutenue par le rapporteur du texte, la droite et une partie des députés de gauche. Pour la ministre, cette innovation va dénaturer le renseignement pénitentiaire et le transformer en véritable service de renseignement.</p> + <h2 class="intertitre">Conservation des données</h2> + <p>La CNIL <a href="http://www.cnil.fr/fileadmin/documents/La_CNIL/actualite/Les_propositions_de_la_CNIL_sur_les_evolutions_de_la_loi_Informatique_et_Libertes.pdf">a fait part à plusieurs reprises de sa volonté</a> d’exercer sa mission de contrôle sur les fichiers liés au renseignement, qui seront alimentés par ces collectes. Ces fichiers sont aujourd’hui exclus du périmètre d’action de la CNIL.</p> + <p>La durée de conservation des données collectées – et l’adaptation de cette durée à la technique employée – a par ailleurs été inscrite dans la loi, contrairement au projet initial du gouvernement qui entendait fixer ces limites par décret. Elle pourra aller jusqu’à cinq ans dans le cas des données de connexion.</p> + <h2 class="intertitre">Un dispositif pour les lanceurs d’alerte</h2> + <p>La loi prévoit également une forme de protection pour les agents qui seraient témoins de surveillance illégale. Ces lanceurs d’alerte pourraient solliciter la CNCTR, voire le premier ministre, et leur fournir toutes les pièces utiles. La CNCTR pourra ensuite aviser le procureur de la République et solliciter la Commission consultative du secret de la défense nationale afin que cette dernière <em>« donne au premier ministre son avis sur la possibilité de déclassifier tout ou partie de ces éléments »</em>. Aucune mesure de rétorsion ne pourra viser l’agent qui aurait dénoncé des actes potentiellement illégaux.</p> + </div>
\ No newline at end of file diff --git a/test/test-pages/liberation-1/expected.html b/test/test-pages/liberation-1/expected.html index 59dc3fc..cedbffa 100644 --- a/test/test-pages/liberation-1/expected.html +++ b/test/test-pages/liberation-1/expected.html @@ -1,10 +1,12 @@ - <div class="article-body mod" itemprop="articleBody" id="article-body"> - <div> - <p>Un troisième Français a été tué dans le tremblement de terre samedi au Népal, emporté par une avalanche, <a href="http://www.liberation.fr/video/2015/04/30/laurent-fabius-plus-de-200-francais-n-ont-pas-ete-retrouves_1278687" target="_blank">a déclaré jeudi le ministre des Affaires étrangères</a>. Les autorités françaises sont toujours sans nouvelles <em>«d’encore plus de 200» </em>personnes. <em>«Pour certains d’entre eux on est très interrogatif»</em>, a ajouté Laurent Fabius. Il accueillait à Roissy un premier avion spécial ramenant des rescapés. <a href="http://www.liberation.fr/video/2015/04/30/seisme-au-nepal-soulages-mais-inquiets-206-survivants-de-retour-en-france_1278758" target="_blank">L’Airbus A350 affrété par les autorités françaises s’est posé peu avant 5h45</a> avec à son bord 206 passagers, dont 12 enfants et 26 blessés, selon une source du Quai d’Orsay. Quasiment tous sont français, à l’exception d’une quinzaine de ressortissants allemands, suisses, italiens, portugais ou encore turcs. Des psychologues, une équipe médicale et des personnels du centre de crise du Quai d’Orsay les attendent.</p> - <p>L’appareil, mis à disposition par Airbus, était arrivé à Katmandou mercredi matin avec 55 personnels de santé et humanitaires, ainsi que 25 tonnes de matériel (abris, médicaments, aide alimentaire). Un deuxième avion dépêché par Paris, qui était immobilisé aux Emirats depuis mardi avec 20 tonnes de matériel, est arrivé jeudi à Katmandou, <a href="http://www.liberation.fr/monde/2015/04/29/embouteillages-et-retards-a-l-aeroport-de-katmandou_1276612" target="_blank">dont le petit aéroport est engorgé</a> par le trafic et l’afflux d’aide humanitaire. Il devait lui aussi ramener des Français, <em>«les plus éprouvés»</em> par la catastrophe et les <em>«plus vulnérables (blessés, familles avec enfants)»</em>, selon le ministère des Affaires étrangères.</p> - <p>2 209 Français ont été localisés sains et saufs tandis que 393 n’ont pas encore pu être joints, selon le Quai d’Orsay. Environ 400 Français ont demandé à être rapatriés dans les vols mis en place par la France.</p> - <p>Le séisme a fait près de 5 500 morts et touche huit des 28 millions d’habitants du Népal. Des dizaines de milliers de personnes sont sans abri.</p> - <p> - <iframe src="http://www.dailymotion.com/embed/video/x2oikl3" frameborder="0" width="100%" data-aspect-ratio="0.5625" data-responsive="1"></iframe> - <br/><em></em></p> - </div>
\ No newline at end of file +<div class="article-body mod" id="article-body" itemprop="articleBody"> + <div> + <p>Un troisième Français a été tué dans le tremblement de terre samedi au Népal, emporté par une avalanche, <a href="http://www.liberation.fr/video/2015/04/30/laurent-fabius-plus-de-200-francais-n-ont-pas-ete-retrouves_1278687" target="_blank">a déclaré jeudi le ministre des Affaires étrangères</a>. Les autorités françaises sont toujours sans nouvelles <em>«d’encore plus de 200» </em>personnes. <em>«Pour certains d’entre eux on est très interrogatif»</em>, a ajouté Laurent Fabius. Il accueillait à Roissy un premier avion spécial ramenant des rescapés. <a href="http://www.liberation.fr/video/2015/04/30/seisme-au-nepal-soulages-mais-inquiets-206-survivants-de-retour-en-france_1278758" target="_blank">L’Airbus A350 affrété par les autorités françaises s’est posé peu avant 5h45</a> avec à son bord 206 passagers, dont 12 enfants et 26 blessés, selon une source du Quai d’Orsay. Quasiment tous sont français, à l’exception d’une quinzaine de ressortissants allemands, suisses, italiens, portugais ou encore turcs. Des psychologues, une équipe médicale et des personnels du centre de crise du Quai d’Orsay les attendent.</p> + <p>L’appareil, mis à disposition par Airbus, était arrivé à Katmandou mercredi matin avec 55 personnels de santé et humanitaires, ainsi que 25 tonnes de matériel (abris, médicaments, aide alimentaire). Un deuxième avion dépêché par Paris, qui était immobilisé aux Emirats depuis mardi avec 20 tonnes de matériel, est arrivé jeudi à Katmandou, <a href="http://www.liberation.fr/monde/2015/04/29/embouteillages-et-retards-a-l-aeroport-de-katmandou_1276612" target="_blank">dont le petit aéroport est engorgé</a> par le trafic et l’afflux d’aide humanitaire. Il devait lui aussi ramener des Français, <em>«les plus éprouvés»</em> par la catastrophe et les <em>«plus vulnérables (blessés, familles avec enfants)»</em>, selon le ministère des Affaires étrangères.</p> + <p>2 209 Français ont été localisés sains et saufs tandis que 393 n’ont pas encore pu être joints, selon le Quai d’Orsay. Environ 400 Français ont demandé à être rapatriés dans les vols mis en place par la France.</p> + <p>Le séisme a fait près de 5 500 morts et touche huit des 28 millions d’habitants du Népal. Des dizaines de milliers de personnes sont sans abri.</p> + <p> + <iframe data-aspect-ratio="0.5625" data-responsive="1" frameborder="0" src="http://www.dailymotion.com/embed/video/x2oikl3" width="100%"></iframe> + <br></br><em></em></p> + </div> + + </div>
\ No newline at end of file diff --git a/test/test-pages/lwn-1/expected.html b/test/test-pages/lwn-1/expected.html index c00554f..45b86fc 100644 --- a/test/test-pages/lwn-1/expected.html +++ b/test/test-pages/lwn-1/expected.html @@ -1,578 +1,378 @@ - <div> - <td class="MidColumn"> - <div class="ArticleText"> - <h2 class="SummaryHL"><a href="http://fakehost/Articles/637755/">A trademark battle in the Arduino community</a></h2> - <p>The <a href="https://en.wikipedia.org/wiki/Arduino">Arduino</a> has been one of the biggest success stories of the open-hardware movement, but that success does not protect it from internal conflict. In recent months, two of the project's founders have come into conflict about the direction of future efforts—and that conflict has turned into a legal dispute about who owns the rights to the Arduino trademark. </p> - <p>The current fight is a battle between two companies that both bear the Arduino name: Arduino LLC and Arduino SRL. The disagreements that led to present state of affairs go back a bit further. </p> - <p>The Arduino project grew out of 2005-era course work taught at the Interaction Design Institute Ivrea (IDII) in Ivrea, Italy (using <a href="https://en.wikipedia.org/wiki/Processing_(programming_language)">Processing</a>, <a href="https://en.wikipedia.org/wiki/Wiring_%28development_platform%29">Wiring</a>, and pre-existing microcontroller hardware). After the IDII program was discontinued, the open-hardware Arduino project as we know it was launched by Massimo Banzi, David Cuartielles, and David Mellis (who had worked together at IDII), with co-founders Tom Igoe and Gianluca Martino joining shortly afterward. The project released open hardware designs (including full schematics and design files) as well as the microcontroller software to run on the boards and the desktop IDE needed to program it. </p> - <p>Arduino LLC was incorporated in 2008 by Banzi, Cuartielles, Mellis, Igoe, and Martino. The company is registered in the United States, and it has continued to design the Arduino product line, develop the software, and run the Arduino community site. The hardware devices themselves, however, were manufactured by a separate company, "Smart Projects SRL," that was founded by Martino. "SRL" is essentially the Italian equivalent of "LLC"—Smart Projects was incorporated in Italy. </p> - <p>This division of responsibilities—with the main Arduino project handling everything except for board manufacturing—may seem like an odd one, but it is consistent with Arduino's marketing story. From its earliest days, the designs for the hardware have been freely available, and outside companies were allowed to make Arduino-compatible devices. The project has long run a <a href="http://arduino.cc/en/ArduinoCertified/Products#program">certification +<div><td class="MidColumn"> + + <div class="ArticleText"> + <h2 class="SummaryHL"><a href="http://fakehost/Articles/637755/">A trademark battle in the Arduino community</a></h2> + <p> By <b>Nathan Willis</b> + <br></br>March 25, 2015 </p> + <p>The <a href="https://en.wikipedia.org/wiki/Arduino">Arduino</a> has been one of the biggest success stories of the open-hardware movement, but that success does not protect it from internal conflict. In recent months, two of the project's founders have come into conflict about the direction of future efforts—and that conflict has turned into a legal dispute about who owns the rights to the Arduino trademark. </p> + <p>The current fight is a battle between two companies that both bear the Arduino name: Arduino LLC and Arduino SRL. The disagreements that led to present state of affairs go back a bit further. </p> + <p>The Arduino project grew out of 2005-era course work taught at the Interaction Design Institute Ivrea (IDII) in Ivrea, Italy (using <a href="https://en.wikipedia.org/wiki/Processing_(programming_language)">Processing</a>, <a href="https://en.wikipedia.org/wiki/Wiring_%28development_platform%29">Wiring</a>, and pre-existing microcontroller hardware). After the IDII program was discontinued, the open-hardware Arduino project as we know it was launched by Massimo Banzi, David Cuartielles, and David Mellis (who had worked together at IDII), with co-founders Tom Igoe and Gianluca Martino joining shortly afterward. The project released open hardware designs (including full schematics and design files) as well as the microcontroller software to run on the boards and the desktop IDE needed to program it. </p> + <p>Arduino LLC was incorporated in 2008 by Banzi, Cuartielles, Mellis, Igoe, and Martino. The company is registered in the United States, and it has continued to design the Arduino product line, develop the software, and run the Arduino community site. The hardware devices themselves, however, were manufactured by a separate company, "Smart Projects SRL," that was founded by Martino. "SRL" is essentially the Italian equivalent of "LLC"—Smart Projects was incorporated in Italy. </p> + <p>This division of responsibilities—with the main Arduino project handling everything except for board manufacturing—may seem like an odd one, but it is consistent with Arduino's marketing story. From its earliest days, the designs for the hardware have been freely available, and outside companies were allowed to make Arduino-compatible devices. The project has long run a <a href="http://arduino.cc/en/ArduinoCertified/Products#program">certification program</a> for third-party manufacturers interested in using the "Arduino" branding, but allows (and arguably even encourages) informal software and firmware compatibility. </p> - <p>The Arduino branding was not formally registered as a trademark in the early days, however. Arduino LLC <a href="http://tsdr.uspto.gov/#caseNumber=3931675&caseType=US_REGISTRATION_NO&searchType=statusSearch">filed</a> to register the US trademark in April 2009, and it was granted in 2011. </p> - <p>At this point, the exact events begin to be harder to verify, but the original group of founders reportedly had a difference of opinion about how to license out hardware production rights to other companies. Wired Italy <a href="http://www.wired.it/gadget/computer/2015/02/12/arduino-nel-caos-situazione/">reports</a> that Martino and Smart Projects resisted the other four founders' plans to "internationalize" production—although it is not clear if that meant that Smart Projects disapproved of licensing out <em>any</em> official hardware manufacturing to other companies, or had some other concern. Heise Online <a href="http://www.heise.de/make/meldung/Arduino-gegen-Arduino-Gruender-streiten-um-die-Firma-2549653.html">adds</a> that the conflict seemed to be about moving some production to China. </p> - <p>What is clear is that Smart Projects filed a <a href="http://ttabvue.uspto.gov/ttabvue/v?pno=92060077&pty=CAN&eno=1">petition</a> with the US Patent and Trademark Office (USPTO) in October 2014 asking the USPTO to cancel Arduino LLC's trademark on "Arduino." Then, in November 2014, Smart Projects changed its company's name to Arduino SRL. Somewhere around that time, Martino sold off his ownership stake in Smart Projects SRL and new owner Federico Musto was named CEO. </p> - <p>Unsurprisingly, Arduino LLC did not care for the petition to the USPTO and, in January 2015, the company filed a trademark-infringement <a href="http://dockets.justia.com/docket/massachusetts/madce/1:2015cv10181/167131">lawsuit</a> against Arduino SRL. Confusing matters further, the re-branded Arduino SRL has set up its own web site using the domain name <tt>arduino.org</tt>, which duplicates most of the site features found on the original Arduino site (<tt>arduino.cc</tt>). That includes both a hardware store and software downloads. </p> - <p>Musto, the new CEO of the company now called Arduino SRL, has a bit of a history with Arduino as well. His other manufacturing business had <a href="http://www.eetimes.com/document.asp?doc_id=1263246">collaborated</a> with Arduino LLC on the design and production of the Arduino Yún, which has received some <a href="http://hackaday.com/2015/02/24/is-the-arduino-yun-open-hardware/">criticism</a> for including proprietary components. </p> - <p>Hackaday has run a two-part series (in <a href="http://hackaday.com/2015/02/25/arduino-v-arduino/">February</a> and <a href="http://hackaday.com/2015/03/12/arduino-v-arduino-part-ii/">March</a>) digging into the ins and outs of the dispute, including the suggestion that Arduino LLC's recent release of version 1.6.0 of the Arduino IDE was a move intended to block Arduino SRL from hijacking IDE development. Commenter Paul Stoffregen (who was the author of the Heise story above) <a href="http://hackaday.com/2015/02/25/arduino-v-arduino/comment-page-1/#comment-2453084">noted</a> that Arduino SRL recently created a fork of the Arduino IDE on GitHub. </p> - <p>Most recently, Banzi broke his silence about the dispute in a <a href="http://makezine.com/2015/03/19/massimo-banzi-fighting-for-arduino">story</a> published at MAKEzine. There, Banzi claims that Martino secretly filed a trademark application on "Arduino" in Italy in 2008 and told none of the other Arduino founders. He also details a series of unpleasant negotiations between the companies, including Smart Projects stopping the royalty payments it had long sent to Arduino LLC for manufacturing devices and re-branding its boards with the Arduino.org URL. </p> - <p>Users appear to be stuck in the middle. Banzi says that several retail outlets that claim to be selling "official" Arduino boards are actually paying Arduino SRL, not Arduino LLC, but it is quite difficult to determine which retailers are lined up on which side, since there are (typically) several levels of supplier involved. The two Arduino companies' web sites also disagree about the available hardware, with Arduino.org offering the new <a href="http://arduino.org/products/arduino-zero-pro">Arduino Zero</a> model for sale today and Arduino.cc <a href="http://arduino.cc/en/Main/Products">listing it</a> as "Coming soon." </p> - <p>Furthermore, as Hackaday's March story explains, the recently-released Arduino.cc IDE now reports that boards manufactured by Arduino SRL are "uncertified." That warning does not prevent users from programming the other company's hardware, but it will no doubt confuse quite a few users who believe they possess genuine Arduino-manufactured devices. </p> - <p>The USPTO page for Arduino SRL's petition notes pre-trial disclosure dates have been set for August and October of 2015 (for Arduino SRL and Arduino LLC, respectively), which suggests that this debate is far from over. Of course, it is always disappointing to observe a falling out between project founders, particularly when the project in question has had such an impact on open-source software and open hardware. </p> - <p>One could argue that disputes of this sort are proof that even small projects started among friends need to take legal and intellectual-property issues (such as trademarks) seriously from the very beginning—perhaps Arduino and Smart Projects thought that an informal agreement was all that was necessary in the early days, after all. </p> - <p>But, perhaps, once a project becomes profitable, there is simply no way to predict what might happen. Arduino LLC would seem to have a strong case for continual and rigorous use of the "Arduino" trademark, which is the salient point in US trademark law. It could still be a while before the courts rule on either side of that question, however. </p> - <p><a href="http://fakehost/Articles/637755/#Comments">Comments (5 posted)</a> </p> - <h2 class="SummaryHL"><a href="http://fakehost/Articles/637533/">Mapping and data mining with QGIS 2.8</a></h2> - <p class="FeatureByline"> By <b>Nathan Willis</b> - <br/>March 25, 2015 </p> - <p><a href="http://qgis.org/">QGIS</a> is a free-software geographic information system (GIS) tool; it provides a unified interface in which users can import, edit, and analyze geographic-oriented information, and it can produce output as varied as printable maps or map-based web services. The project recently made its first update to be designated a long-term release (LTR), and that release is both poised for high-end usage and friendly to newcomers alike. </p> - <p>The new release is version 2.8, which was unveiled on March 2. An official <a href="http://qgis.org/en/site/forusers/visualchangelog28/index.html">change + <p>The Arduino branding was not formally registered as a trademark in the early days, however. Arduino LLC <a href="http://tsdr.uspto.gov/#caseNumber=3931675&caseType=US_REGISTRATION_NO&searchType=statusSearch">filed</a> to register the US trademark in April 2009, and it was granted in 2011. </p> + <p>At this point, the exact events begin to be harder to verify, but the original group of founders reportedly had a difference of opinion about how to license out hardware production rights to other companies. Wired Italy <a href="http://www.wired.it/gadget/computer/2015/02/12/arduino-nel-caos-situazione/">reports</a> that Martino and Smart Projects resisted the other four founders' plans to "internationalize" production—although it is not clear if that meant that Smart Projects disapproved of licensing out <em>any</em> official hardware manufacturing to other companies, or had some other concern. Heise Online <a href="http://www.heise.de/make/meldung/Arduino-gegen-Arduino-Gruender-streiten-um-die-Firma-2549653.html">adds</a> that the conflict seemed to be about moving some production to China. </p> + <p>What is clear is that Smart Projects filed a <a href="http://ttabvue.uspto.gov/ttabvue/v?pno=92060077&pty=CAN&eno=1">petition</a> with the US Patent and Trademark Office (USPTO) in October 2014 asking the USPTO to cancel Arduino LLC's trademark on "Arduino." Then, in November 2014, Smart Projects changed its company's name to Arduino SRL. Somewhere around that time, Martino sold off his ownership stake in Smart Projects SRL and new owner Federico Musto was named CEO. </p> + <p>Unsurprisingly, Arduino LLC did not care for the petition to the USPTO and, in January 2015, the company filed a trademark-infringement <a href="http://dockets.justia.com/docket/massachusetts/madce/1:2015cv10181/167131">lawsuit</a> against Arduino SRL. Confusing matters further, the re-branded Arduino SRL has set up its own web site using the domain name <tt>arduino.org</tt>, which duplicates most of the site features found on the original Arduino site (<tt>arduino.cc</tt>). That includes both a hardware store and software downloads. </p> + <p>Musto, the new CEO of the company now called Arduino SRL, has a bit of a history with Arduino as well. His other manufacturing business had <a href="http://www.eetimes.com/document.asp?doc_id=1263246">collaborated</a> with Arduino LLC on the design and production of the Arduino Yún, which has received some <a href="http://hackaday.com/2015/02/24/is-the-arduino-yun-open-hardware/">criticism</a> for including proprietary components. </p> + <p>Hackaday has run a two-part series (in <a href="http://hackaday.com/2015/02/25/arduino-v-arduino/">February</a> and <a href="http://hackaday.com/2015/03/12/arduino-v-arduino-part-ii/">March</a>) digging into the ins and outs of the dispute, including the suggestion that Arduino LLC's recent release of version 1.6.0 of the Arduino IDE was a move intended to block Arduino SRL from hijacking IDE development. Commenter Paul Stoffregen (who was the author of the Heise story above) <a href="http://hackaday.com/2015/02/25/arduino-v-arduino/comment-page-1/#comment-2453084">noted</a> that Arduino SRL recently created a fork of the Arduino IDE on GitHub. </p> + <p>Most recently, Banzi broke his silence about the dispute in a <a href="http://makezine.com/2015/03/19/massimo-banzi-fighting-for-arduino">story</a> published at MAKEzine. There, Banzi claims that Martino secretly filed a trademark application on "Arduino" in Italy in 2008 and told none of the other Arduino founders. He also details a series of unpleasant negotiations between the companies, including Smart Projects stopping the royalty payments it had long sent to Arduino LLC for manufacturing devices and re-branding its boards with the Arduino.org URL. </p> + <p>Users appear to be stuck in the middle. Banzi says that several retail outlets that claim to be selling "official" Arduino boards are actually paying Arduino SRL, not Arduino LLC, but it is quite difficult to determine which retailers are lined up on which side, since there are (typically) several levels of supplier involved. The two Arduino companies' web sites also disagree about the available hardware, with Arduino.org offering the new <a href="http://arduino.org/products/arduino-zero-pro">Arduino Zero</a> model for sale today and Arduino.cc <a href="http://arduino.cc/en/Main/Products">listing it</a> as "Coming soon." </p> + <p>Furthermore, as Hackaday's March story explains, the recently-released Arduino.cc IDE now reports that boards manufactured by Arduino SRL are "uncertified." That warning does not prevent users from programming the other company's hardware, but it will no doubt confuse quite a few users who believe they possess genuine Arduino-manufactured devices. </p> + <p>The USPTO page for Arduino SRL's petition notes pre-trial disclosure dates have been set for August and October of 2015 (for Arduino SRL and Arduino LLC, respectively), which suggests that this debate is far from over. Of course, it is always disappointing to observe a falling out between project founders, particularly when the project in question has had such an impact on open-source software and open hardware. </p> + <p>One could argue that disputes of this sort are proof that even small projects started among friends need to take legal and intellectual-property issues (such as trademarks) seriously from the very beginning—perhaps Arduino and Smart Projects thought that an informal agreement was all that was necessary in the early days, after all. </p> + <p>But, perhaps, once a project becomes profitable, there is simply no way to predict what might happen. Arduino LLC would seem to have a strong case for continual and rigorous use of the "Arduino" trademark, which is the salient point in US trademark law. It could still be a while before the courts rule on either side of that question, however. </p> + <p><a href="http://fakehost/Articles/637755/#Comments">Comments (5 posted)</a> </p> + + <h2 class="SummaryHL"><a href="http://fakehost/Articles/637533/">Mapping and data mining with QGIS 2.8</a></h2> + <p> By <b>Nathan Willis</b> + <br></br>March 25, 2015 </p> + <p><a href="http://qgis.org/">QGIS</a> is a free-software geographic information system (GIS) tool; it provides a unified interface in which users can import, edit, and analyze geographic-oriented information, and it can produce output as varied as printable maps or map-based web services. The project recently made its first update to be designated a long-term release (LTR), and that release is both poised for high-end usage and friendly to newcomers alike. </p> + <p>The new release is version 2.8, which was unveiled on March 2. An official <a href="http://qgis.org/en/site/forusers/visualchangelog28/index.html">change log</a> is available on the QGIS site, while the release itself was announced primarily through blog posts (such as <a href="http://anitagraser.com/2015/03/02/qgis-2-8-ltr-has-landed/">this post</a> by Anita Graser of the project's steering committee). Downloads are <a href="http://qgis.org/en/site/forusers/download.html">available</a> for a variety of platforms, including packages for Ubuntu, Debian, Fedora, openSUSE, and several other distributions.</p> - <a href="http://fakehost/Articles/637747/"> <img src="http://fakehost/images/2015/03-qgis-map-sm.png" border="0" hspace="5" align="right" width="350" height="264" alt="[QGIS main interface]"/> </a> - <p>As the name might suggest, QGIS is a Qt application; the latest release will, in fact, build on both Qt4 and Qt5, although the binaries released by the project come only in Qt4 form at present. 2.8 has been labeled a long-term release (LTR)—which, in this case, means that the project has committed to providing backported bug fixes for one full calendar year, and that the 2.8.x series is in permanent feature freeze. The goal, according to the change log, is to provide a stable version suitable for businesses and deployments in other large organizations. The change log itself points out that the development of quite a few new features was underwritten by various GIS companies or university groups, which suggests that taking care of these organizations' needs is reaping dividends for the project. </p> - <p>For those new to QGIS (or GIS in general), there is a detailed new-user <a href="http://docs.qgis.org/testing/en/docs/training_manual/">tutorial</a> that provides a thorough walk-through of the data-manipulation, mapping, and analysis functions. Being a new user, I went through the tutorial; although there are a handful of minor differences between QGIS 2.8 and the version used in the text (primarily whether specific features were accessed through a toolbar or right-click menu), on the whole it is well worth the time. </p> - <p>QGIS is designed to make short work of importing spatially oriented data sets, mining information from them, and turning the results into a meaningful visualization. Technically speaking, the visualization output is optional: one could simply extract the needed statistics and results and use them to answer some question or, perhaps, publish the massaged data set as a database for others to use. </p> - <p>But well-made maps are often the easiest way to illuminate facts about populations, political regions, geography, and many other topics when human comprehension is the goal. QGIS makes importing data from databases, web-mapping services (WMS), and even unwieldy flat-file data dumps a painless experience. It handles converting between a variety of map-referencing systems more or less automatically, and allows the user to focus on finding the useful attributes of the data sets and rendering them on screen. </p> - <h4>Here be data</h4> - <p>The significant changes in QGIS 2.8 fall into several categories. There are updates to how QGIS handles the mathematical expressions and queries users can use to filter information out of a data set, improvements to the tools used to explore the on-screen map canvas, and enhancements to the "map composer" used to produce visual output. This is on top of plenty of other under-the-hood improvements, naturally.</p> - <a href="http://fakehost/Articles/637748/"> <img src="http://fakehost/images/2015/03-qgis-query-sm.png" border="0" hspace="5" align="left" width="300" height="302" alt="[QGIS query builder]"/> </a> - <p>In the first category are several updates to the filtering tools used to mine a data set. Generally speaking, each independent data set is added to a QGIS project as its own layer, then transformed with filters to focus in on a specific portion of the original data. For instance, the land-usage statistics for a region might be one layer, while roads and buildings for the same region from OpenStreetMap might be two additional layers. Such filters can be created in several ways: there is a "query builder" that lets the user construct and test expressions on a data layer, then save the results, an SQL console for performing similar queries on a database, and spreadsheet-like editing tools for working directly on data tables. </p> - <p>All three have been improved in this release. New are support for <tt>if(condition, true, false)</tt> conditional statements, a set of operations for geometry primitives (e.g., to test whether regions overlap or lines intersect), and an "integer divide" operation. Users can also add comments to their queries to annotate their code, and there is a new <a href="http://nathanw.net/2015/01/19/function-editor-for-qgis-expressions/">custom + <a href="http://fakehost/Articles/637747/"> <img align="right" alt="[QGIS main interface]" border="0" height="264" hspace="5" src="http://fakehost/images/2015/03-qgis-map-sm.png" width="350"></img></a> + <p>As the name might suggest, QGIS is a Qt application; the latest release will, in fact, build on both Qt4 and Qt5, although the binaries released by the project come only in Qt4 form at present. 2.8 has been labeled a long-term release (LTR)—which, in this case, means that the project has committed to providing backported bug fixes for one full calendar year, and that the 2.8.x series is in permanent feature freeze. The goal, according to the change log, is to provide a stable version suitable for businesses and deployments in other large organizations. The change log itself points out that the development of quite a few new features was underwritten by various GIS companies or university groups, which suggests that taking care of these organizations' needs is reaping dividends for the project. </p> + <p>For those new to QGIS (or GIS in general), there is a detailed new-user <a href="http://docs.qgis.org/testing/en/docs/training_manual/">tutorial</a> that provides a thorough walk-through of the data-manipulation, mapping, and analysis functions. Being a new user, I went through the tutorial; although there are a handful of minor differences between QGIS 2.8 and the version used in the text (primarily whether specific features were accessed through a toolbar or right-click menu), on the whole it is well worth the time. </p> + <p>QGIS is designed to make short work of importing spatially oriented data sets, mining information from them, and turning the results into a meaningful visualization. Technically speaking, the visualization output is optional: one could simply extract the needed statistics and results and use them to answer some question or, perhaps, publish the massaged data set as a database for others to use. </p> + <p>But well-made maps are often the easiest way to illuminate facts about populations, political regions, geography, and many other topics when human comprehension is the goal. QGIS makes importing data from databases, web-mapping services (WMS), and even unwieldy flat-file data dumps a painless experience. It handles converting between a variety of map-referencing systems more or less automatically, and allows the user to focus on finding the useful attributes of the data sets and rendering them on screen. </p> + <h4>Here be data</h4> + <p>The significant changes in QGIS 2.8 fall into several categories. There are updates to how QGIS handles the mathematical expressions and queries users can use to filter information out of a data set, improvements to the tools used to explore the on-screen map canvas, and enhancements to the "map composer" used to produce visual output. This is on top of plenty of other under-the-hood improvements, naturally.</p> + <a href="http://fakehost/Articles/637748/"> <img align="left" alt="[QGIS query builder]" border="0" height="302" hspace="5" src="http://fakehost/images/2015/03-qgis-query-sm.png" width="300"></img></a> + <p>In the first category are several updates to the filtering tools used to mine a data set. Generally speaking, each independent data set is added to a QGIS project as its own layer, then transformed with filters to focus in on a specific portion of the original data. For instance, the land-usage statistics for a region might be one layer, while roads and buildings for the same region from OpenStreetMap might be two additional layers. Such filters can be created in several ways: there is a "query builder" that lets the user construct and test expressions on a data layer, then save the results, an SQL console for performing similar queries on a database, and spreadsheet-like editing tools for working directly on data tables. </p> + <p>All three have been improved in this release. New are support for <tt>if(condition, true, false)</tt> conditional statements, a set of operations for geometry primitives (e.g., to test whether regions overlap or lines intersect), and an "integer divide" operation. Users can also add comments to their queries to annotate their code, and there is a new <a href="http://nathanw.net/2015/01/19/function-editor-for-qgis-expressions/">custom function editor</a> for writing Python functions that can be called in mathematical expressions within the query builder. </p> - <p>It is also now possible to select only some rows in a table, then perform calculations just on the selection—previously, users would have to extract the rows of interest into a new table first. Similarly, in the SQL editor, the user can highlight a subset of the SQL query and execute it separately, which is no doubt helpful for debugging. </p> - <p>There have also been several improvements to the Python and Processing plugins. Users can now drag-and-drop Python scripts onto QGIS and they will be run automatically. Several new analysis algorithms are now available through the Processing interface that were previously Python-only; they include algorithms for generating grids of points or vectors within a region, splitting layers and lines, generating <a href="http://en.wikipedia.org/wiki/Hypsometric_curve">hypsometric + <p>It is also now possible to select only some rows in a table, then perform calculations just on the selection—previously, users would have to extract the rows of interest into a new table first. Similarly, in the SQL editor, the user can highlight a subset of the SQL query and execute it separately, which is no doubt helpful for debugging. </p> + <p>There have also been several improvements to the Python and Processing plugins. Users can now drag-and-drop Python scripts onto QGIS and they will be run automatically. Several new analysis algorithms are now available through the Processing interface that were previously Python-only; they include algorithms for generating grids of points or vectors within a region, splitting layers and lines, generating <a href="http://en.wikipedia.org/wiki/Hypsometric_curve">hypsometric curves</a>, refactoring data sets, and more. </p> - <h4>Maps in, maps out</h4> - <a href="http://fakehost/Articles/637749/"> <img src="http://fakehost/images/2015/03-qgis-simplify-sm.png" border="0" hspace="5" align="right" width="300" height="303" alt="[QGIS simplify tool]"/> </a> - <p>The process of working with on-screen map data picked up some improvements in the new release as well. Perhaps the most fundamental is that each map layer added to the canvas is now handled in its own thread, so fewer hangs in the user interface are experienced when re-rendering a layer (as happens whenever the user changes the look of points or shapes in a layer). Since remote databases can also be layers, this multi-threaded approach is more resilient against connectivity problems, too. The interface also now supports temporary "scratch" layers that can be used to merge, filter, or simply experiment with a data set, but are not saved when the current project is saved. </p> - <p>For working on the canvas itself, polygonal regions can now use raster images (tiled, if necessary) as fill colors, the map itself can be rotated arbitrarily, and objects can be "snapped" to align with items on any layer (not just the current layer). For working with raster image layers (e.g., aerial photographs) or simply creating new geometric shapes by hand, there is a new digitizing tool that can offer assistance by locking lines to specific angles, automatically keeping borders parallel, and other niceties. </p> - <p>There is a completely overhauled "simplify" tool that is used to reduce the number of extraneous vertices of a vector layer (thus reducing its size). The old simplify tool provided only a relative "tolerance" setting that did not correspond directly to any units. With the new tool, users can set a simplification threshold in terms of the underlying map units, layer-specific units, pixels, and more—and, in addition, the tool reports how much the simplify operation has reduced the size of the data.</p> - <a href="http://fakehost/Articles/637751/"> <img src="http://fakehost/images/2015/03-qgis-style-sm.png" border="0" hspace="5" align="left" width="300" height="286" alt="[QGIS style editing]"/> </a> - <p>There has also been an effort to present a uniform interface to one of the most important features of the map canvas: the ability to change the symbology used for an item based on some data attribute. The simplest example might be to change the line color of a road based on whether its road-type attribute is "highway," "service road," "residential," or so on. But the same feature is used to automatically highlight layer information based on the filtering and querying functionality discussed above. The new release allows many more map attributes to be controlled by these "data definition" settings, and provides a hard-to-miss button next to each attribute, through which a custom data definition can be set. </p> - <p>QGIS's composer module is the tool used to take project data and generate a map that can be used outside of the application (in print, as a static image, or as a layer for <a href="http://mapserver.org/">MapServer</a> or some other software tool, for example). Consequently, it is not a simple select-and-click-export tool; composing the output can involve a lot of choices about which data to make visible, how (and where) to label it, and how to make it generally accessible. </p> - <p>The updated composer in 2.8 now has a full-screen mode and sports several new options for configuring output. For instance, the user now has full control over how map axes are labeled. In previous releases, the grid coordinates of the map could be turned on or off, but the only options were all or nothing. Now, the user can individually choose whether coordinates are displayed on all four sides, and can even choose in which direction vertical text labels will run (so that they can be correctly justified to the edge of the map, for example). </p> - <p>There are, as usual, many more changes than there is room to discuss. Some particularly noteworthy improvements include the ability to save and load bookmarks for frequently used data sources (perhaps most useful for databases, web services, and other non-local data) and improvements to QGIS's server module. This module allows one QGIS instance to serve up data accessible to other QGIS applications (for example, to simply team projects). The server can now be extended with Python plugins and the data layers that it serves can be styled with style rules like those used in the desktop interface. </p> - <p>QGIS is one of those rare free-software applications that is both powerful enough for high-end work and yet also straightforward to use for the simple tasks that might attract a newcomer to GIS in the first place. The 2.8 release, particularly with its project-wide commitment to long-term support, appears to be an update well worth checking out, whether one needs to create a simple, custom map or to mine a database for obscure geo-referenced meaning. </p> - <p><a href="http://fakehost/Articles/637533/#Comments">Comments (3 posted)</a> </p> - <h2 class="SummaryHL"><a href="http://fakehost/Articles/637735/">Development activity in LibreOffice and OpenOffice</a></h2> - <p class="FeatureByline"> By <b>Jonathan Corbet</b> - <br/>March 25, 2015 </p> - <p style="display: inline;" class="readability-styled"> The LibreOffice project was </p><a href="http://fakehost/Articles/407383/">announced</a> - <p style="display: inline;" class="readability-styled"> with great fanfare in September 2010. Nearly one year later, the OpenOffice.org project (from which LibreOffice was forked) </p><a href="http://fakehost/Articles/446093/">was -cut loose from Oracle</a> - <p style="display: inline;" class="readability-styled"> and found a new home as an Apache project. It is fair to say that the rivalry between the two projects in the time since then has been strong. Predictions that one project or the other would fail have not been borne out, but that does not mean that the two projects are equally successful. A look at the two projects' development communities reveals some interesting differences. </p> - <h4>Release histories</h4> - <p> Apache OpenOffice has made two releases in the past year: <a href="https://blogs.apache.org/OOo/entry/the_apache_openoffice_project_announce">4.1</a> in April 2014 and <a href="https://blogs.apache.org/OOo/entry/announcing_apache_openoffice_4_1">4.1.1</a> (described as "a micro update" in the release announcement) in August. The main feature added during that time would appear to be significantly improved accessibility support. </p> - <p> The release history for LibreOffice tells a slightly different story: </p> - <blockquote> </blockquote> - <p> It seems clear that LibreOffice has maintained a rather more frenetic release cadence, generally putting out at least one release per month. The project typically keeps at least two major versions alive at any one time. Most of the releases are of the minor, bug-fix variety, but there have been two major releases in the last year as well. </p> - <h4>Development statistics</h4> - <p> In the one-year period since late March 2014, there have been 381 changesets committed to the OpenOffice Subversion repository. The most active committers are: </p> - <blockquote> - <table> - <tbody> - <tr> - <th colspan="2" align="center">Most active OpenOffice developers</th> - </tr> - <tr> - <td width="50%" valign="top"> - <table cellspacing="3"> - <tbody> - <tr> - <th colspan="3">By changesets</th> - </tr> - <tr class="Even"> - <td>Herbert Dürr</td> - <td align="right">63</td> - <td align="right">16.6%</td> - </tr> - <tr class="Odd"> - <td>Jürgen Schmidt </td> - <td align="right">56</td> - <td align="right">14.7%</td> - </tr> - <tr class="Even"> - <td>Armin Le Grand</td> - <td align="right">56</td> - <td align="right">14.7%</td> - </tr> - <tr class="Odd"> - <td>Oliver-Rainer Wittmann</td> - <td align="right">46</td> - <td align="right">12.1%</td> - </tr> - <tr class="Even"> - <td>Tsutomu Uchino</td> - <td align="right">33</td> - <td align="right">8.7%</td> - </tr> - <tr class="Odd"> - <td>Kay Schenk</td> - <td align="right">27</td> - <td align="right">7.1%</td> - </tr> - <tr class="Even"> - <td>Pedro Giffuni</td> - <td align="right">23</td> - <td align="right">6.1%</td> - </tr> - <tr class="Odd"> - <td>Ariel Constenla-Haile</td> - <td align="right">22</td> - <td align="right">5.8%</td> - </tr> - <tr class="Even"> - <td>Andrea Pescetti</td> - <td align="right">14</td> - <td align="right">3.7%</td> - </tr> - <tr class="Odd"> - <td>Steve Yin</td> - <td align="right">11</td> - <td align="right">2.9%</td> - </tr> - <tr class="Even"> - <td>Andre Fischer</td> - <td align="right">10</td> - <td align="right">2.6%</td> - </tr> - <tr class="Odd"> - <td>Yuri Dario</td> - <td align="right">7</td> - <td align="right">1.8%</td> - </tr> - <tr class="Even"> - <td>Regina Henschel</td> - <td align="right">6</td> - <td align="right">1.6%</td> - </tr> - <tr class="Odd"> - <td>Juan C. Sanz</td> - <td align="right">2</td> - <td align="right">0.5%</td> - </tr> - <tr class="Even"> - <td>Clarence Guo</td> - <td align="right">2</td> - <td align="right">0.5%</td> - </tr> - <tr class="Odd"> - <td>Tal Daniel</td> - <td align="right">2</td> - <td align="right">0.5%</td> - </tr> - </tbody> - </table> - </td> - <td width="50%" valign="top"> - <table cellspacing="3"> - <tbody> - <tr> - <th colspan="3">By changed lines</th> - </tr> - <tr class="Even"> - <td>Jürgen Schmidt </td> - <td align="right">455499</td> - <td align="right">88.1%</td> - </tr> - <tr class="Odd"> - <td>Andre Fischer</td> - <td align="right">26148</td> - <td align="right">3.8%</td> - </tr> - <tr class="Even"> - <td>Pedro Giffuni</td> - <td align="right">23183</td> - <td align="right">3.4%</td> - </tr> - <tr class="Odd"> - <td>Armin Le Grand</td> - <td align="right">11018</td> - <td align="right">1.6%</td> - </tr> - <tr class="Even"> - <td>Juan C. Sanz</td> - <td align="right">4582</td> - <td align="right">0.7%</td> - </tr> - <tr class="Odd"> - <td>Oliver-Rainer Wittmann</td> - <td align="right">4309</td> - <td align="right">0.6%</td> - </tr> - <tr class="Even"> - <td>Andrea Pescetti</td> - <td align="right">3908</td> - <td align="right">0.6%</td> - </tr> - <tr class="Odd"> - <td>Herbert Dürr</td> - <td align="right">2811</td> - <td align="right">0.4%</td> - </tr> - <tr class="Even"> - <td>Tsutomu Uchino</td> - <td align="right">1991</td> - <td align="right">0.3%</td> - </tr> - <tr class="Odd"> - <td>Ariel Constenla-Haile</td> - <td align="right">1258</td> - <td align="right">0.2%</td> - </tr> - <tr class="Even"> - <td>Steve Yin</td> - <td align="right">1010</td> - <td align="right">0.1%</td> - </tr> - <tr class="Odd"> - <td>Kay Schenk</td> - <td align="right">616</td> - <td align="right">0.1%</td> - </tr> - <tr class="Even"> - <td>Regina Henschel</td> - <td align="right">417</td> - <td align="right">0.1%</td> - </tr> - <tr class="Odd"> - <td>Yuri Dario</td> - <td align="right">268</td> - <td align="right">0.0%</td> - </tr> - <tr class="Even"> - <td>tal</td> - <td align="right">16</td> - <td align="right">0.0%</td> - </tr> - <tr class="Odd"> - <td>Clarence Guo</td> - <td align="right">11</td> - <td align="right">0.0%</td> - </tr> - </tbody> - </table> - </td> - </tr> - </tbody> - </table> - </blockquote> - <p> In truth, the above list is not just the most active OpenOffice developers — it is all of them; a total of 16 developers have committed changes to OpenOffice in the last year. Those developers changed 528,000 lines of code, but, as can be seen above, Jürgen Schmidt accounted for the bulk of those changes, which were mostly updates to translation files. </p> - <p> The top four developers in the "by changesets" column all work for IBM, so IBM is responsible for a minimum of about 60% of the changes to OpenOffice in the last year. </p> - <p> The picture for LibreOffice is just a little bit different; in the same one-year period, the project has committed 22,134 changesets from 268 developers. The most active of these developers were: </p> - <blockquote> - <table> - <tbody> - <tr> - <th colspan="2" align="center">Most active LibreOffice developers</th> - </tr> - <tr> - <td width="50%" valign="top"> - <table cellspacing="3"> - <tbody> - <tr> - <th colspan="3">By changesets</th> - </tr> - <tr class="Even"> - <td>Caolán McNamara</td> - <td align="right">4307</td> - <td align="right">19.5%</td> - </tr> - <tr class="Odd"> - <td>Stephan Bergmann</td> - <td align="right">2351</td> - <td align="right">10.6%</td> - </tr> - <tr class="Even"> - <td>Miklos Vajna</td> - <td align="right">1449</td> - <td align="right">6.5%</td> - </tr> - <tr class="Odd"> - <td>Tor Lillqvist</td> - <td align="right">1159</td> - <td align="right">5.2%</td> - </tr> - <tr class="Even"> - <td>Noel Grandin</td> - <td align="right">1064</td> - <td align="right">4.8%</td> - </tr> - <tr class="Odd"> - <td>Markus Mohrhard</td> - <td align="right">935</td> - <td align="right">4.2%</td> - </tr> - <tr class="Even"> - <td>Michael Stahl</td> - <td align="right">915</td> - <td align="right">4.1%</td> - </tr> - <tr class="Odd"> - <td>Kohei Yoshida</td> - <td align="right">755</td> - <td align="right">3.4%</td> - </tr> - <tr class="Even"> - <td>Tomaž Vajngerl</td> - <td align="right">658</td> - <td align="right">3.0%</td> - </tr> - <tr class="Odd"> - <td>Thomas Arnhold</td> - <td align="right">619</td> - <td align="right">2.8%</td> - </tr> - <tr class="Even"> - <td>Jan Holesovsky</td> - <td align="right">466</td> - <td align="right">2.1%</td> - </tr> - <tr class="Odd"> - <td>Eike Rathke</td> - <td align="right">457</td> - <td align="right">2.1%</td> - </tr> - <tr class="Even"> - <td>Matteo Casalin</td> - <td align="right">442</td> - <td align="right">2.0%</td> - </tr> - <tr class="Odd"> - <td>Bjoern Michaelsen</td> - <td align="right">421</td> - <td align="right">1.9%</td> - </tr> - <tr class="Even"> - <td>Chris Sherlock</td> - <td align="right">396</td> - <td align="right">1.8%</td> - </tr> - <tr class="Odd"> - <td>David Tardon</td> - <td align="right">386</td> - <td align="right">1.7%</td> - </tr> - <tr class="Even"> - <td>Julien Nabet</td> - <td align="right">362</td> - <td align="right">1.6%</td> - </tr> - <tr class="Odd"> - <td>Zolnai Tamás</td> - <td align="right">338</td> - <td align="right">1.5%</td> - </tr> - <tr class="Even"> - <td>Matúš Kukan</td> - <td align="right">256</td> - <td align="right">1.2%</td> - </tr> - <tr class="Odd"> - <td>Robert Antoni Buj Gelonch</td> - <td align="right">231</td> - <td align="right">1.0%</td> - </tr> - </tbody> - </table> - </td> - <td width="50%" valign="top"> - <table cellspacing="3"> - <tbody> - <tr> - <th colspan="3">By changed lines</th> - </tr> - <tr class="Even"> - <td>Lionel Elie Mamane</td> - <td align="right">244062</td> - <td align="right">12.5%</td> - </tr> - <tr class="Odd"> - <td>Noel Grandin</td> - <td align="right">238711</td> - <td align="right">12.2%</td> - </tr> - <tr class="Even"> - <td>Stephan Bergmann</td> - <td align="right">161220</td> - <td align="right">8.3%</td> - </tr> - <tr class="Odd"> - <td>Miklos Vajna</td> - <td align="right">129325</td> - <td align="right">6.6%</td> - </tr> - <tr class="Even"> - <td>Caolán McNamara</td> - <td align="right">97544</td> - <td align="right">5.0%</td> - </tr> - <tr class="Odd"> - <td>Tomaž Vajngerl</td> - <td align="right">69404</td> - <td align="right">3.6%</td> - </tr> - <tr class="Even"> - <td>Tor Lillqvist</td> - <td align="right">59498</td> - <td align="right">3.1%</td> - </tr> - <tr class="Odd"> - <td>Laurent Balland-Poirier</td> - <td align="right">52802</td> - <td align="right">2.7%</td> - </tr> - <tr class="Even"> - <td>Markus Mohrhard</td> - <td align="right">50509</td> - <td align="right">2.6%</td> - </tr> - <tr class="Odd"> - <td>Kohei Yoshida</td> - <td align="right">45514</td> - <td align="right">2.3%</td> - </tr> - <tr class="Even"> - <td>Chris Sherlock</td> - <td align="right">36788</td> - <td align="right">1.9%</td> - </tr> - <tr class="Odd"> - <td>Peter Foley</td> - <td align="right">34305</td> - <td align="right">1.8%</td> - </tr> - <tr class="Even"> - <td>Christian Lohmaier</td> - <td align="right">33787</td> - <td align="right">1.7%</td> - </tr> - <tr class="Odd"> - <td>Thomas Arnhold</td> - <td align="right">32722</td> - <td align="right">1.7%</td> - </tr> - <tr class="Even"> - <td>David Tardon</td> - <td align="right">21681</td> - <td align="right">1.1%</td> - </tr> - <tr class="Odd"> - <td>David Ostrovsky</td> - <td align="right">21620</td> - <td align="right">1.1%</td> - </tr> - <tr class="Even"> - <td>Jan Holesovsky</td> - <td align="right">20792</td> - <td align="right">1.1%</td> - </tr> - <tr class="Odd"> - <td>Valentin Kettner</td> - <td align="right">20526</td> - <td align="right">1.1%</td> - </tr> - <tr class="Even"> - <td>Robert Antoni Buj Gelonch</td> - <td align="right">20447</td> - <td align="right">1.0%</td> - </tr> - <tr class="Odd"> - <td>Michael Stahl</td> - <td align="right">18216</td> - <td align="right">0.9%</td> - </tr> - </tbody> - </table> - </td> - </tr> - </tbody> - </table> - </blockquote> - <p> To a first approximation, the top ten companies supporting LibreOffice in the last year are: </p> - <blockquote> - <table> - <tbody> - <tr> - <th colspan="3">Companies supporting LibreOffice development</th> - </tr> - <tr> - <th colspan="3">(by changesets)</th> - </tr> - <tr class="Even"> - <td>Red Hat</td> - <td align="right">8417</td> - <td align="right">38.0%</td> - </tr> - <tr class="Odd"> - <td>Collabora <strike>Multimedia</strike></td> - <td align="right">6531</td> - <td align="right">29.5%</td> - </tr> - <tr class="Even"> - <td>(Unknown)</td> - <td align="right">5126</td> - <td align="right">23.2%</td> - </tr> - <tr class="Odd"> - <td>(None)</td> - <td align="right">1490</td> - <td align="right">6.7%</td> - </tr> - <tr class="Even"> - <td>Canonical</td> - <td align="right">422</td> - <td align="right">1.9%</td> - </tr> - <tr class="Odd"> - <td>Igalia S.L.</td> - <td align="right">80</td> - <td align="right">0.4%</td> - </tr> - <tr class="Even"> - <td>Ericsson</td> - <td align="right">21</td> - <td align="right">0.1%</td> - </tr> - <tr class="Odd"> - <td>Yandex</td> - <td align="right">18</td> - <td align="right">0.1%</td> - </tr> - <tr class="Even"> - <td>FastMail.FM</td> - <td align="right">17</td> - <td align="right">0.1%</td> - </tr> - <tr class="Odd"> - <td>SUSE</td> - <td align="right">7</td> - <td align="right">0.0%</td> - </tr> - </tbody> - </table> - </blockquote> - <p> Development work on LibreOffice is thus concentrated in a small number of companies, though it is rather more spread out than OpenOffice development. It is worth noting that the LibreOffice developers with unknown affiliation, who contributed 23% of the changes, make up 82% of the developer base, so there would appear to be a substantial community of developers contributing from outside the above-listed companies. </p> - <h4>Some conclusions</h4> - <p> Last October, some <a href="http://fakehost/Articles/637742/">concerns</a> were raised on the OpenOffice list about the health of that project's community. At the time, Rob Weir <a href="http://fakehost/Articles/637743/">shrugged them off</a> as the result of a marketing effort by the LibreOffice crowd. There can be no doubt that the war of words between these two projects has gotten tiresome at times, but, looking at the above numbers, it is hard not to conclude that there is an issue that goes beyond marketing hype here. </p> - <p> In the 4½ years since its founding, the LibreOffice project has put together a community with over 250 active developers. There is support from multiple companies and an impressive rate of patches going into the project's repository. The project's ability to sustain nearly monthly releases on two branches is a direct result of that community's work. Swearing at LibreOffice is one of your editor's favorite pastimes, but it seems clear that the project is on a solid footing with a healthy community. </p> - <p> OpenOffice, instead, is driven by four developers from a single company — a company that appears to have been deemphasizing OpenOffice work for some time. As a result, the project's commit rate is a fraction of what LibreOffice is able to sustain and releases are relatively rare. As of this writing, the <a href="https://blogs.apache.org/OOo/">OpenOffice + <h4>Maps in, maps out</h4> + <a href="http://fakehost/Articles/637749/"> <img align="right" alt="[QGIS simplify tool]" border="0" height="303" hspace="5" src="http://fakehost/images/2015/03-qgis-simplify-sm.png" width="300"></img></a> + <p>The process of working with on-screen map data picked up some improvements in the new release as well. Perhaps the most fundamental is that each map layer added to the canvas is now handled in its own thread, so fewer hangs in the user interface are experienced when re-rendering a layer (as happens whenever the user changes the look of points or shapes in a layer). Since remote databases can also be layers, this multi-threaded approach is more resilient against connectivity problems, too. The interface also now supports temporary "scratch" layers that can be used to merge, filter, or simply experiment with a data set, but are not saved when the current project is saved. </p> + <p>For working on the canvas itself, polygonal regions can now use raster images (tiled, if necessary) as fill colors, the map itself can be rotated arbitrarily, and objects can be "snapped" to align with items on any layer (not just the current layer). For working with raster image layers (e.g., aerial photographs) or simply creating new geometric shapes by hand, there is a new digitizing tool that can offer assistance by locking lines to specific angles, automatically keeping borders parallel, and other niceties. </p> + <p>There is a completely overhauled "simplify" tool that is used to reduce the number of extraneous vertices of a vector layer (thus reducing its size). The old simplify tool provided only a relative "tolerance" setting that did not correspond directly to any units. With the new tool, users can set a simplification threshold in terms of the underlying map units, layer-specific units, pixels, and more—and, in addition, the tool reports how much the simplify operation has reduced the size of the data.</p> + <a href="http://fakehost/Articles/637751/"> <img align="left" alt="[QGIS style editing]" border="0" height="286" hspace="5" src="http://fakehost/images/2015/03-qgis-style-sm.png" width="300"></img></a> + <p>There has also been an effort to present a uniform interface to one of the most important features of the map canvas: the ability to change the symbology used for an item based on some data attribute. The simplest example might be to change the line color of a road based on whether its road-type attribute is "highway," "service road," "residential," or so on. But the same feature is used to automatically highlight layer information based on the filtering and querying functionality discussed above. The new release allows many more map attributes to be controlled by these "data definition" settings, and provides a hard-to-miss button next to each attribute, through which a custom data definition can be set. </p> + <p>QGIS's composer module is the tool used to take project data and generate a map that can be used outside of the application (in print, as a static image, or as a layer for <a href="http://mapserver.org/">MapServer</a> or some other software tool, for example). Consequently, it is not a simple select-and-click-export tool; composing the output can involve a lot of choices about which data to make visible, how (and where) to label it, and how to make it generally accessible. </p> + <p>The updated composer in 2.8 now has a full-screen mode and sports several new options for configuring output. For instance, the user now has full control over how map axes are labeled. In previous releases, the grid coordinates of the map could be turned on or off, but the only options were all or nothing. Now, the user can individually choose whether coordinates are displayed on all four sides, and can even choose in which direction vertical text labels will run (so that they can be correctly justified to the edge of the map, for example). </p> + <p>There are, as usual, many more changes than there is room to discuss. Some particularly noteworthy improvements include the ability to save and load bookmarks for frequently used data sources (perhaps most useful for databases, web services, and other non-local data) and improvements to QGIS's server module. This module allows one QGIS instance to serve up data accessible to other QGIS applications (for example, to simply team projects). The server can now be extended with Python plugins and the data layers that it serves can be styled with style rules like those used in the desktop interface. </p> + <p>QGIS is one of those rare free-software applications that is both powerful enough for high-end work and yet also straightforward to use for the simple tasks that might attract a newcomer to GIS in the first place. The 2.8 release, particularly with its project-wide commitment to long-term support, appears to be an update well worth checking out, whether one needs to create a simple, custom map or to mine a database for obscure geo-referenced meaning. </p> + <p><a href="http://fakehost/Articles/637533/#Comments">Comments (3 posted)</a> </p> + + <h2 class="SummaryHL"><a href="http://fakehost/Articles/637735/">Development activity in LibreOffice and OpenOffice</a></h2> + <p> By <b>Jonathan Corbet</b> + <br></br>March 25, 2015 </p><p> The LibreOffice project was </p><a href="http://fakehost/Articles/407383/">announced</a><p> with great fanfare in September 2010. Nearly one year later, the OpenOffice.org project (from which LibreOffice was forked) </p><a href="http://fakehost/Articles/446093/">was +cut loose from Oracle</a><p> and found a new home as an Apache project. It is fair to say that the rivalry between the two projects in the time since then has been strong. Predictions that one project or the other would fail have not been borne out, but that does not mean that the two projects are equally successful. A look at the two projects' development communities reveals some interesting differences. + </p> + <h4>Release histories</h4> + <p> Apache OpenOffice has made two releases in the past year: <a href="https://blogs.apache.org/OOo/entry/the_apache_openoffice_project_announce">4.1</a> in April 2014 and <a href="https://blogs.apache.org/OOo/entry/announcing_apache_openoffice_4_1">4.1.1</a> (described as "a micro update" in the release announcement) in August. The main feature added during that time would appear to be significantly improved accessibility support. </p> + <p> The release history for LibreOffice tells a slightly different story: </p> + + <blockquote> + </blockquote> + <p> It seems clear that LibreOffice has maintained a rather more frenetic release cadence, generally putting out at least one release per month. The project typically keeps at least two major versions alive at any one time. Most of the releases are of the minor, bug-fix variety, but there have been two major releases in the last year as well. </p> + + <h4>Development statistics</h4> + <p> In the one-year period since late March 2014, there have been 381 changesets committed to the OpenOffice Subversion repository. The most active committers are: </p> + + <blockquote> + <table><tbody><tr><th align="center" colspan="2">Most active OpenOffice developers</th> + </tr><tr><td valign="top" width="50%"> + <table cellspacing="3"><tbody><tr><th colspan="3">By changesets</th> + </tr><tr class="Even"><td>Herbert Dürr</td> + <td align="right">63</td> + <td align="right">16.6%</td> + </tr><tr class="Odd"><td>Jürgen Schmidt </td> + <td align="right">56</td> + <td align="right">14.7%</td> + </tr><tr class="Even"><td>Armin Le Grand</td> + <td align="right">56</td> + <td align="right">14.7%</td> + </tr><tr class="Odd"><td>Oliver-Rainer Wittmann</td> + <td align="right">46</td> + <td align="right">12.1%</td> + </tr><tr class="Even"><td>Tsutomu Uchino</td> + <td align="right">33</td> + <td align="right">8.7%</td> + </tr><tr class="Odd"><td>Kay Schenk</td> + <td align="right">27</td> + <td align="right">7.1%</td> + </tr><tr class="Even"><td>Pedro Giffuni</td> + <td align="right">23</td> + <td align="right">6.1%</td> + </tr><tr class="Odd"><td>Ariel Constenla-Haile</td> + <td align="right">22</td> + <td align="right">5.8%</td> + </tr><tr class="Even"><td>Andrea Pescetti</td> + <td align="right">14</td> + <td align="right">3.7%</td> + </tr><tr class="Odd"><td>Steve Yin</td> + <td align="right">11</td> + <td align="right">2.9%</td> + </tr><tr class="Even"><td>Andre Fischer</td> + <td align="right">10</td> + <td align="right">2.6%</td> + </tr><tr class="Odd"><td>Yuri Dario</td> + <td align="right">7</td> + <td align="right">1.8%</td> + </tr><tr class="Even"><td>Regina Henschel</td> + <td align="right">6</td> + <td align="right">1.6%</td> + </tr><tr class="Odd"><td>Juan C. Sanz</td> + <td align="right">2</td> + <td align="right">0.5%</td> + </tr><tr class="Even"><td>Clarence Guo</td> + <td align="right">2</td> + <td align="right">0.5%</td> + </tr><tr class="Odd"><td>Tal Daniel</td> + <td align="right">2</td> + <td align="right">0.5%</td> + </tr></tbody></table></td> + <td valign="top" width="50%"> + <table cellspacing="3"><tbody><tr><th colspan="3">By changed lines</th> + </tr><tr class="Even"><td>Jürgen Schmidt </td> + <td align="right">455499</td> + <td align="right">88.1%</td> + </tr><tr class="Odd"><td>Andre Fischer</td> + <td align="right">26148</td> + <td align="right">3.8%</td> + </tr><tr class="Even"><td>Pedro Giffuni</td> + <td align="right">23183</td> + <td align="right">3.4%</td> + </tr><tr class="Odd"><td>Armin Le Grand</td> + <td align="right">11018</td> + <td align="right">1.6%</td> + </tr><tr class="Even"><td>Juan C. Sanz</td> + <td align="right">4582</td> + <td align="right">0.7%</td> + </tr><tr class="Odd"><td>Oliver-Rainer Wittmann</td> + <td align="right">4309</td> + <td align="right">0.6%</td> + </tr><tr class="Even"><td>Andrea Pescetti</td> + <td align="right">3908</td> + <td align="right">0.6%</td> + </tr><tr class="Odd"><td>Herbert Dürr</td> + <td align="right">2811</td> + <td align="right">0.4%</td> + </tr><tr class="Even"><td>Tsutomu Uchino</td> + <td align="right">1991</td> + <td align="right">0.3%</td> + </tr><tr class="Odd"><td>Ariel Constenla-Haile</td> + <td align="right">1258</td> + <td align="right">0.2%</td> + </tr><tr class="Even"><td>Steve Yin</td> + <td align="right">1010</td> + <td align="right">0.1%</td> + </tr><tr class="Odd"><td>Kay Schenk</td> + <td align="right">616</td> + <td align="right">0.1%</td> + </tr><tr class="Even"><td>Regina Henschel</td> + <td align="right">417</td> + <td align="right">0.1%</td> + </tr><tr class="Odd"><td>Yuri Dario</td> + <td align="right">268</td> + <td align="right">0.0%</td> + </tr><tr class="Even"><td>tal</td> + <td align="right">16</td> + <td align="right">0.0%</td> + </tr><tr class="Odd"><td>Clarence Guo</td> + <td align="right">11</td> + <td align="right">0.0%</td> + </tr></tbody></table></td> + </tr></tbody></table></blockquote> + <p> In truth, the above list is not just the most active OpenOffice developers — it is all of them; a total of 16 developers have committed changes to OpenOffice in the last year. Those developers changed 528,000 lines of code, but, as can be seen above, Jürgen Schmidt accounted for the bulk of those changes, which were mostly updates to translation files. </p> + <p> The top four developers in the "by changesets" column all work for IBM, so IBM is responsible for a minimum of about 60% of the changes to OpenOffice in the last year. </p> + <p> The picture for LibreOffice is just a little bit different; in the same one-year period, the project has committed 22,134 changesets from 268 developers. The most active of these developers were: </p> + + <blockquote> + <table><tbody><tr><th align="center" colspan="2">Most active LibreOffice developers</th> + </tr><tr><td valign="top" width="50%"> + <table cellspacing="3"><tbody><tr><th colspan="3">By changesets</th> + </tr><tr class="Even"><td>Caolán McNamara</td> + <td align="right">4307</td> + <td align="right">19.5%</td> + </tr><tr class="Odd"><td>Stephan Bergmann</td> + <td align="right">2351</td> + <td align="right">10.6%</td> + </tr><tr class="Even"><td>Miklos Vajna</td> + <td align="right">1449</td> + <td align="right">6.5%</td> + </tr><tr class="Odd"><td>Tor Lillqvist</td> + <td align="right">1159</td> + <td align="right">5.2%</td> + </tr><tr class="Even"><td>Noel Grandin</td> + <td align="right">1064</td> + <td align="right">4.8%</td> + </tr><tr class="Odd"><td>Markus Mohrhard</td> + <td align="right">935</td> + <td align="right">4.2%</td> + </tr><tr class="Even"><td>Michael Stahl</td> + <td align="right">915</td> + <td align="right">4.1%</td> + </tr><tr class="Odd"><td>Kohei Yoshida</td> + <td align="right">755</td> + <td align="right">3.4%</td> + </tr><tr class="Even"><td>Tomaž Vajngerl</td> + <td align="right">658</td> + <td align="right">3.0%</td> + </tr><tr class="Odd"><td>Thomas Arnhold</td> + <td align="right">619</td> + <td align="right">2.8%</td> + </tr><tr class="Even"><td>Jan Holesovsky</td> + <td align="right">466</td> + <td align="right">2.1%</td> + </tr><tr class="Odd"><td>Eike Rathke</td> + <td align="right">457</td> + <td align="right">2.1%</td> + </tr><tr class="Even"><td>Matteo Casalin</td> + <td align="right">442</td> + <td align="right">2.0%</td> + </tr><tr class="Odd"><td>Bjoern Michaelsen</td> + <td align="right">421</td> + <td align="right">1.9%</td> + </tr><tr class="Even"><td>Chris Sherlock</td> + <td align="right">396</td> + <td align="right">1.8%</td> + </tr><tr class="Odd"><td>David Tardon</td> + <td align="right">386</td> + <td align="right">1.7%</td> + </tr><tr class="Even"><td>Julien Nabet</td> + <td align="right">362</td> + <td align="right">1.6%</td> + </tr><tr class="Odd"><td>Zolnai Tamás</td> + <td align="right">338</td> + <td align="right">1.5%</td> + </tr><tr class="Even"><td>Matúš Kukan</td> + <td align="right">256</td> + <td align="right">1.2%</td> + </tr><tr class="Odd"><td>Robert Antoni Buj Gelonch</td> + <td align="right">231</td> + <td align="right">1.0%</td> + </tr></tbody></table></td> + <td valign="top" width="50%"> + <table cellspacing="3"><tbody><tr><th colspan="3">By changed lines</th> + </tr><tr class="Even"><td>Lionel Elie Mamane</td> + <td align="right">244062</td> + <td align="right">12.5%</td> + </tr><tr class="Odd"><td>Noel Grandin</td> + <td align="right">238711</td> + <td align="right">12.2%</td> + </tr><tr class="Even"><td>Stephan Bergmann</td> + <td align="right">161220</td> + <td align="right">8.3%</td> + </tr><tr class="Odd"><td>Miklos Vajna</td> + <td align="right">129325</td> + <td align="right">6.6%</td> + </tr><tr class="Even"><td>Caolán McNamara</td> + <td align="right">97544</td> + <td align="right">5.0%</td> + </tr><tr class="Odd"><td>Tomaž Vajngerl</td> + <td align="right">69404</td> + <td align="right">3.6%</td> + </tr><tr class="Even"><td>Tor Lillqvist</td> + <td align="right">59498</td> + <td align="right">3.1%</td> + </tr><tr class="Odd"><td>Laurent Balland-Poirier</td> + <td align="right">52802</td> + <td align="right">2.7%</td> + </tr><tr class="Even"><td>Markus Mohrhard</td> + <td align="right">50509</td> + <td align="right">2.6%</td> + </tr><tr class="Odd"><td>Kohei Yoshida</td> + <td align="right">45514</td> + <td align="right">2.3%</td> + </tr><tr class="Even"><td>Chris Sherlock</td> + <td align="right">36788</td> + <td align="right">1.9%</td> + </tr><tr class="Odd"><td>Peter Foley</td> + <td align="right">34305</td> + <td align="right">1.8%</td> + </tr><tr class="Even"><td>Christian Lohmaier</td> + <td align="right">33787</td> + <td align="right">1.7%</td> + </tr><tr class="Odd"><td>Thomas Arnhold</td> + <td align="right">32722</td> + <td align="right">1.7%</td> + </tr><tr class="Even"><td>David Tardon</td> + <td align="right">21681</td> + <td align="right">1.1%</td> + </tr><tr class="Odd"><td>David Ostrovsky</td> + <td align="right">21620</td> + <td align="right">1.1%</td> + </tr><tr class="Even"><td>Jan Holesovsky</td> + <td align="right">20792</td> + <td align="right">1.1%</td> + </tr><tr class="Odd"><td>Valentin Kettner</td> + <td align="right">20526</td> + <td align="right">1.1%</td> + </tr><tr class="Even"><td>Robert Antoni Buj Gelonch</td> + <td align="right">20447</td> + <td align="right">1.0%</td> + </tr><tr class="Odd"><td>Michael Stahl</td> + <td align="right">18216</td> + <td align="right">0.9%</td> + </tr></tbody></table></td> + </tr></tbody></table></blockquote> + <p> To a first approximation, the top ten companies supporting LibreOffice in the last year are: </p> + + <blockquote> + <table><tbody><tr><th colspan="3">Companies supporting LibreOffice development</th> + </tr><tr><th colspan="3">(by changesets)</th> + </tr><tr class="Even"><td>Red Hat</td> + <td align="right">8417</td> + <td align="right">38.0%</td> + </tr><tr class="Odd"><td>Collabora <strike>Multimedia</strike></td> + <td align="right">6531</td> + <td align="right">29.5%</td> + </tr><tr class="Even"><td>(Unknown)</td> + <td align="right">5126</td> + <td align="right">23.2%</td> + </tr><tr class="Odd"><td>(None)</td> + <td align="right">1490</td> + <td align="right">6.7%</td> + </tr><tr class="Even"><td>Canonical</td> + <td align="right">422</td> + <td align="right">1.9%</td> + </tr><tr class="Odd"><td>Igalia S.L.</td> + <td align="right">80</td> + <td align="right">0.4%</td> + </tr><tr class="Even"><td>Ericsson</td> + <td align="right">21</td> + <td align="right">0.1%</td> + </tr><tr class="Odd"><td>Yandex</td> + <td align="right">18</td> + <td align="right">0.1%</td> + </tr><tr class="Even"><td>FastMail.FM</td> + <td align="right">17</td> + <td align="right">0.1%</td> + </tr><tr class="Odd"><td>SUSE</td> + <td align="right">7</td> + <td align="right">0.0%</td> + </tr></tbody></table></blockquote> + <p> Development work on LibreOffice is thus concentrated in a small number of companies, though it is rather more spread out than OpenOffice development. It is worth noting that the LibreOffice developers with unknown affiliation, who contributed 23% of the changes, make up 82% of the developer base, so there would appear to be a substantial community of developers contributing from outside the above-listed companies. </p> + + <h4>Some conclusions</h4> + <p> Last October, some <a href="http://fakehost/Articles/637742/">concerns</a> were raised on the OpenOffice list about the health of that project's community. At the time, Rob Weir <a href="http://fakehost/Articles/637743/">shrugged them off</a> as the result of a marketing effort by the LibreOffice crowd. There can be no doubt that the war of words between these two projects has gotten tiresome at times, but, looking at the above numbers, it is hard not to conclude that there is an issue that goes beyond marketing hype here. </p> + <p> In the 4½ years since its founding, the LibreOffice project has put together a community with over 250 active developers. There is support from multiple companies and an impressive rate of patches going into the project's repository. The project's ability to sustain nearly monthly releases on two branches is a direct result of that community's work. Swearing at LibreOffice is one of your editor's favorite pastimes, but it seems clear that the project is on a solid footing with a healthy community. </p> + <p> OpenOffice, instead, is driven by four developers from a single company — a company that appears to have been deemphasizing OpenOffice work for some time. As a result, the project's commit rate is a fraction of what LibreOffice is able to sustain and releases are relatively rare. As of this writing, the <a href="https://blogs.apache.org/OOo/">OpenOffice blog</a> shows no posts in 2015. In the October discussion, Rob <a href="http://fakehost/Articles/637750/">said</a> that "<span>the dogs may bark but the caravan moves on.</span>" That may be true, but, in this case, the caravan does not appear to be moving with any great speed. </p> - <p> Anything can happen in the free-software development world; it is entirely possible that a reinvigorated OpenOffice.org may yet give LibreOffice a run for its money. But something will clearly have to change to bring that future around. As things stand now, it is hard not to conclude that LibreOffice has won the battle for developer participation. </p> - <p><a href="http://fakehost/Articles/637735/#Comments">Comments (74 posted)</a> </p> - <p> <b>Page editor</b>: Jonathan Corbet - <br/> </p> - <h2>Inside this week's LWN.net Weekly Edition</h2> - <ul> - <li> <a href="http://fakehost/Articles/637395/">Security</a>: Toward secure package downloads; New vulnerabilities in drupal, mozilla, openssl, python-django ... </li> - <li> <a href="http://fakehost/Articles/637396/">Kernel</a>: LSFMM coverage: NFS, defragmentation, epoll(), copy offload, and more. </li> - <li> <a href="http://fakehost/Articles/637397/">Distributions</a>: A look at Debian's 2015 DPL candidates; Debian, Fedora, ... </li> - <li> <a href="http://fakehost/Articles/637398/">Development</a>: A look at GlusterFS; LibreOffice Online; Open sourcing existing code; Secure Boot in Windows 10; ... </li> - <li> <a href="http://fakehost/Articles/637399/">Announcements</a>: A Turing award for Michael Stonebraker, Sébastien Jodogne, ReGlue are Free Software Award winners, Kat Walsh joins FSF board of directors, Cyanogen, ... </li> - </ul><b>Next page</b> - <p style="display: inline;" class="readability-styled">: </p><a href="http://fakehost/Articles/637395/">Security>></a> - <br/> - </div> - </td> - <td class="RightColumn"> </td>
\ No newline at end of file + <p> Anything can happen in the free-software development world; it is entirely possible that a reinvigorated OpenOffice.org may yet give LibreOffice a run for its money. But something will clearly have to change to bring that future around. As things stand now, it is hard not to conclude that LibreOffice has won the battle for developer participation. </p> + <p><a href="http://fakehost/Articles/637735/#Comments">Comments (74 posted)</a> </p> + + <p> <b>Page editor</b>: Jonathan Corbet + <br></br></p> + <h2>Inside this week's LWN.net Weekly Edition</h2> + <ul><li> <a href="http://fakehost/Articles/637395/">Security</a>: Toward secure package downloads; New vulnerabilities in drupal, mozilla, openssl, python-django ... </li> + <li> <a href="http://fakehost/Articles/637396/">Kernel</a>: LSFMM coverage: NFS, defragmentation, epoll(), copy offload, and more. </li> + <li> <a href="http://fakehost/Articles/637397/">Distributions</a>: A look at Debian's 2015 DPL candidates; Debian, Fedora, ... </li> + <li> <a href="http://fakehost/Articles/637398/">Development</a>: A look at GlusterFS; LibreOffice Online; Open sourcing existing code; Secure Boot in Windows 10; ... </li> + <li> <a href="http://fakehost/Articles/637399/">Announcements</a>: A Turing award for Michael Stonebraker, Sébastien Jodogne, ReGlue are Free Software Award winners, Kat Walsh joins FSF board of directors, Cyanogen, ... </li> + </ul><b>Next page</b><p>: </p><a href="http://fakehost/Articles/637395/">Security>></a> + <br></br></div> + + </td> + + <td class="RightColumn"> + + </td> + </div>
\ No newline at end of file diff --git a/test/test-pages/missing-paragraphs/expected.html b/test/test-pages/missing-paragraphs/expected.html index 44e7b16..39e027e 100644 --- a/test/test-pages/missing-paragraphs/expected.html +++ b/test/test-pages/missing-paragraphs/expected.html @@ -34,4 +34,17 @@ <h2>Secondary header</h2> + <p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy + eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam + voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet + clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit + amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam + nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, + sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. + Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor + sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed + diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, + sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. + Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor + sit amet.</p> </div>
\ No newline at end of file diff --git a/test/test-pages/mozilla-1/expected.html b/test/test-pages/mozilla-1/expected.html index 89af93d..ca0e111 100644 --- a/test/test-pages/mozilla-1/expected.html +++ b/test/test-pages/mozilla-1/expected.html @@ -1,118 +1,81 @@ -<div> - <section id="intro"> - <div class="container"> +<div><section id="intro"><div class="container"> + + <p class="lead">It’s easier than ever to personalize Firefox and make it work the way + you do. + <br class="wide-br"></br>No other browser gives you so much choice and flexibility.</p> + <div class="animation-wrapper" id="flexible-top-animation"> + <img alt="" class="fallback" src="http://mozorg.cdn.mozilla.net/media/img/firefox/desktop/customize/animations/flexible-top-fallback.c960365ba781.png"></img> + </div> + </div> + </section><section class="ga-section" data-ga-label="Designed to be redesigned" id="designed"><div class="container"> + <div id="designed-copy"> + <h2>Designed to <br class="wide-br"></br>be redesigned</h2> - <p class="lead">It’s easier than ever to personalize Firefox and make it work the way - you do. - <br class="wide-br"></br>No other browser gives you so much choice and flexibility.</p> - <div class="animation-wrapper" id="flexible-top-animation"> - <img alt="" class="fallback" - src="http://mozorg.cdn.mozilla.net/media/img/firefox/desktop/customize/animations/flexible-top-fallback.c960365ba781.png"></img> - </div> - </div> - </section> - <section class="ga-section" data-ga-label="Designed to be redesigned" id="designed"> - <div class="container"> - <div id="designed-copy"> - <h2>Designed to <br class="wide-br"></br>be redesigned</h2> + <p>Get fast and easy access to the features you use most in the new menu. + Open the “Customize” panel to add, move or remove any button you want. + Keep your favorite features — add-ons, private browsing, Sync and more + — one quick click away.</p> + <img alt="" class="js " data-high-res="true" data-high-res-src="//mozorg.cdn.mozilla.net/media/img/firefox/desktop/customize/designed-redesigned-high-res.6efd60766484.png" data-processed="false" data-src="//mozorg.cdn.mozilla.net/media/img/firefox/desktop/customize/designed-redesigned.fbd3ee9402e6.png" id="designed-mobile" src=""></img></div> + <div class="animation-wrapper" id="flexible-bottom-animation"> + <img alt="" class="fallback" src="http://mozorg.cdn.mozilla.net/media/img/firefox/desktop/customize/animations/flexible-bottom-fallback.cafd48a3d0a4.png"></img> + </div> + </div> + </section><section class="ga-section" data-ga-label="More ways to customize" id="customize"> + </section><div id="customizers-wrapper"> + <section aria-labelledby="customize-themes" class="customizer active" id="themes" role="tabpanel"><div class="container"> + <div class="customizer-copy"> + <h3>Themes</h3> - <p>Get fast and easy access to the features you use most in the new menu. - Open the “Customize” panel to add, move or remove any button you want. - Keep your favorite features — add-ons, private browsing, Sync and more - — one quick click away.</p> - <img alt="" class="js " data-high-res="true" - data-high-res-src="http://mozorg.cdn.mozilla.net/media/img/firefox/desktop/customize/designed-redesigned-high-res.6efd60766484.png" - data-processed="false" - data-src="http://mozorg.cdn.mozilla.net/media/img/firefox/desktop/customize/designed-redesigned.fbd3ee9402e6.png" - id="designed-mobile" src=""></img></div> - <div class="animation-wrapper" id="flexible-bottom-animation"> - <img alt="" class="fallback" - src="http://mozorg.cdn.mozilla.net/media/img/firefox/desktop/customize/animations/flexible-bottom-fallback.cafd48a3d0a4.png"></img> - </div> - </div> - </section> - <section class="ga-section" data-ga-label="More ways to customize" id="customize"> - </section> - <div id="customizers-wrapper"> - <section aria-labelledby="customize-themes" class="customizer active" id="themes" role="tabpanel"> - <div class="container"> - <div class="customizer-copy"> - <h3>Themes</h3> + <p class="lead">Make Firefox match your style. Choose from thousands of themes and dress + up your browser with a single click.</p> + <p> + <button aria-controls="theme-demo" id="theme-yellow" type="button">Preview yellow theme</button> + <button aria-controls="theme-demo" id="theme-green" type="button">Preview green theme</button> + <button aria-controls="theme-demo" id="theme-blue" type="button">Preview blue theme</button> + <button aria-controls="theme-demo" class="selected" id="theme-red" type="button">Preview red theme</button> + </p> <a class="more" href="https://addons.mozilla.org/firefox/themes/" rel="external">Try it now</a> - <p class="lead">Make Firefox match your style. Choose from thousands of themes and dress - up your browser with a single click.</p> - <p> - <button aria-controls="theme-demo" id="theme-yellow" type="button">Preview yellow theme</button> - <button aria-controls="theme-demo" id="theme-green" type="button">Preview green theme</button> - <button aria-controls="theme-demo" id="theme-blue" type="button">Preview blue theme</button> - <button aria-controls="theme-demo" class="selected" id="theme-red" type="button">Preview red - theme - </button> - </p> - <a class="more" href="https://addons.mozilla.org/firefox/themes/" rel="external">Try it now</a> + <br></br><a class="more" href="https://support.mozilla.org/kb/use-themes-change-look-of-firefox" rel="external">Learn more</a> - <br></br><a class="more" href="https://support.mozilla.org/kb/use-themes-change-look-of-firefox" - rel="external">Learn more</a> + </div> <a class="next show-customizer" href="#add-ons" role="button">Next</a> - </div> - <a class="next show-customizer" href="#add-ons" role="button">Next</a> + <div class="customizer-visual"> + <img alt="Preview of the currently selected theme" id="theme-demo" src="http://mozorg.cdn.mozilla.net/media/img/firefox/desktop/customize/theme-red.61611c5734ab.png"></img></div> + </div> + </section><section aria-labelledby="customize-addons" class="customizer" id="add-ons" role="tabpanel"><div class="container"> + <div class="customizer-copy"> + <h3>Add-ons</h3> + <a class="next show-customizer" href="#awesome-bar" role="button">Next</a> - <div class="customizer-visual"> - <img alt="Preview of the currently selected theme" id="theme-demo" - src="http://mozorg.cdn.mozilla.net/media/img/firefox/desktop/customize/theme-red.61611c5734ab.png"></img> - </div> - </div> - </section> - <section aria-labelledby="customize-addons" class="customizer" id="add-ons" role="tabpanel"> - <div class="container"> - <div class="customizer-copy"> - <h3>Add-ons</h3> - <a class="next show-customizer" href="#awesome-bar" role="button">Next</a> + <p class="lead">Add-ons are like apps that you install to add features to Firefox. They + let you compare prices, check the weather, listen to music, send a tweet + and more.</p> + <ul><li>Read the latest news & blogs</li> + <li>Manage your downloads</li> + <li>Watch videos & view photos</li> + </ul><a class="more" href="https://addons.mozilla.org/firefox/extensions/?sort=featured" rel="external">Here are a few of our favorites</a> - <p class="lead">Add-ons are like apps that you install to add features to Firefox. They - let you compare prices, check the weather, listen to music, send a tweet - and more.</p> - <ul> - <li>Read the latest news & blogs</li> - <li>Manage your downloads</li> - <li>Watch videos & view photos</li> - </ul> - <a class="more" href="https://addons.mozilla.org/firefox/extensions/?sort=featured" rel="external">Here - are a few of our favorites</a> + <br></br><a class="more" href="https://support.mozilla.org/kb/find-and-install-add-ons-add-features-to-firefox" rel="external">Learn more</a> - <br></br><a class="more" - href="https://support.mozilla.org/kb/find-and-install-add-ons-add-features-to-firefox" - rel="external">Learn more</a> + </div> + + <div class="customizer-visual"> + <img alt="" src="http://mozorg.cdn.mozilla.net/media/img/firefox/desktop/customize/add-ons.63a4b761f822.png"></img></div> + </div> + </section><section aria-labelledby="customize-awesomebar" class="customizer" id="awesome-bar" role="tabpanel"><div class="container"> + <div class="customizer-copy"> + <h3>Awesome Bar</h3> + <a class="next show-customizer" href="#themes" role="button">Next</a> - </div> - - <div class="customizer-visual"> - <img alt="" - src="http://mozorg.cdn.mozilla.net/media/img/firefox/desktop/customize/add-ons.63a4b761f822.png"></img> - </div> - </div> - </section> - <section aria-labelledby="customize-awesomebar" class="customizer" id="awesome-bar" role="tabpanel"> - <div class="container"> - <div class="customizer-copy"> - <h3>Awesome Bar</h3> - <a class="next show-customizer" href="#themes" role="button">Next</a> - - <p class="lead">The Awesome Bar learns as you browse to make your version of Firefox unique. - Find and return to your favorite sites without having to remember a URL.</p> - <a class="more" - href="https://support.mozilla.org/kb/awesome-bar-find-your-bookmarks-history-and-tabs" - rel="external">See what it can do for you</a> - </div> - <div class="customizer-visual"> - <img alt="Firefox Awesome Bar" - src="http://mozorg.cdn.mozilla.net/media/img/firefox/desktop/customize/awesome-bar.437df162126c.png"></img> - </div> - </div> - </section> - </div> - - <section class="ga-section" data-ga-label="Keep your Firefox in Sync" id="sync"> - </section> -</div>
\ No newline at end of file + <p class="lead">The Awesome Bar learns as you browse to make your version of Firefox unique. + Find and return to your favorite sites without having to remember a URL.</p> + <a class="more" href="https://support.mozilla.org/kb/awesome-bar-find-your-bookmarks-history-and-tabs" rel="external">See what it can do for you</a> + </div> + <div class="customizer-visual"> + <img alt="Firefox Awesome Bar" src="http://mozorg.cdn.mozilla.net/media/img/firefox/desktop/customize/awesome-bar.437df162126c.png"></img></div> + </div> + </section></div> + + <section class="ga-section" data-ga-label="Keep your Firefox in Sync" id="sync"> + </section></div>
\ No newline at end of file diff --git a/test/test-pages/mozilla-2/expected.html b/test/test-pages/mozilla-2/expected.html index 7a14801..c27cb2b 100644 --- a/test/test-pages/mozilla-2/expected.html +++ b/test/test-pages/mozilla-2/expected.html @@ -2,7 +2,7 @@ <p>Get to know the features that make it the most complete browser for building the Web.</p> </header><ul class="features"><li class="feature"> <a class="video-play" href="https://www.youtube.com/watch?v=1R9_WdXwUsE" rel="external"> - <img alt="Screenshot" class="screenshot" src="//mozorg.cdn.mozilla.net/media/img/firefox/firstrun/dev/feature-webide.16763db341cb.jpg"></img></a> + <img alt="Screenshot" class="screenshot" src="http://mozorg.cdn.mozilla.net/media/img/firefox/firstrun/dev/feature-webide.16763db341cb.jpg"></img></a> <h2>WebIDE</h2> <p>Develop, deploy and debug Firefox OS apps directly in your browser, or on a Firefox OS device, with this tool that replaces App Manager.</p> <a class="more" href="https://developer.mozilla.org/docs/Tools/WebIDE" rel="external">Learn more about WebIDE</a> @@ -10,7 +10,7 @@ </li> <li class="feature"> <a class="video-play" href="https://www.youtube.com/watch?v=eH0R10Ga4Hs" rel="external"> - <img alt="Screenshot" class="screenshot" src="//mozorg.cdn.mozilla.net/media/img/firefox/firstrun/dev/feature-valence.251f9def4d8d.jpg"></img></a> + <img alt="Screenshot" class="screenshot" src="http://mozorg.cdn.mozilla.net/media/img/firefox/firstrun/dev/feature-valence.251f9def4d8d.jpg"></img></a> <h2>Valence</h2> <p>Develop and debug your apps across multiple browsers and devices with this powerful extension that comes pre-installed with Firefox Developer Edition.</p> <a class="more" href="https://developer.mozilla.org/docs/Tools/Firefox_Tools_Adapter" rel="external">Learn more about Valence</a> @@ -27,7 +27,7 @@ <header><h2>Features and tools</h2> </header><ul class="features"><li class="feature"> <a class="video-play" href="https://www.youtube.com/watch?v=eQqNfkqIJdw" rel="external"> - <img alt="Screenshot" class="screenshot" src="//mozorg.cdn.mozilla.net/media/img/firefox/firstrun/dev/feature-inspector.c791bf1f1a59.jpg"></img></a> + <img alt="Screenshot" class="screenshot" src="http://mozorg.cdn.mozilla.net/media/img/firefox/firstrun/dev/feature-inspector.c791bf1f1a59.jpg"></img></a> <h2>Page Inspector</h2> <p>Examine the HTML and CSS of any Web page and easily modify the structure and layout of a page.</p> <a class="more" href="https://developer.mozilla.org/docs/Tools/Page_Inspector" rel="external">Learn more about Page Inspector</a> @@ -35,7 +35,7 @@ </li> <li class="feature"> <a class="video-play" href="https://www.youtube.com/watch?v=iEDk8o9ehlw" rel="external"> - <img alt="Screenshot" class="screenshot" src="//mozorg.cdn.mozilla.net/media/img/firefox/firstrun/dev/feature-console.42666aaf6d03.jpg"></img></a> + <img alt="Screenshot" class="screenshot" src="http://mozorg.cdn.mozilla.net/media/img/firefox/firstrun/dev/feature-console.42666aaf6d03.jpg"></img></a> <h2>Web Console</h2> <p>See logged information associated with a Web page and use Web Console to interact with Web pages using JavaScript.</p> <a class="more" href="https://developer.mozilla.org/docs/Tools/Web_Console" rel="external">Learn more about Web Console</a> @@ -43,7 +43,7 @@ </li> <li class="feature"> <a class="video-play" href="https://www.youtube.com/watch?v=OS4AxYFLCIE" rel="external"> - <img alt="Screenshot" class="screenshot" src="//mozorg.cdn.mozilla.net/media/img/firefox/firstrun/dev/feature-debugger.02ed86fb0c9f.jpg"></img></a> + <img alt="Screenshot" class="screenshot" src="http://mozorg.cdn.mozilla.net/media/img/firefox/firstrun/dev/feature-debugger.02ed86fb0c9f.jpg"></img></a> <h2>JavaScript Debugger</h2> <p>Step through JavaScript code and examine or modify its state to help track down bugs.</p> <a class="more" href="https://developer.mozilla.org/docs/Tools/Debugger" rel="external">Learn more about JavaScript Debugger</a> @@ -51,7 +51,7 @@ </li> <li class="feature"> <a class="video-play" href="https://www.youtube.com/watch?v=w4zSG53Qlbk" rel="external"> - <img alt="Screenshot" class="screenshot" src="//mozorg.cdn.mozilla.net/media/img/firefox/firstrun/dev/feature-network.740d6082b3f6.jpg"></img></a> + <img alt="Screenshot" class="screenshot" src="http://mozorg.cdn.mozilla.net/media/img/firefox/firstrun/dev/feature-network.740d6082b3f6.jpg"></img></a> <h2>Network Monitor</h2> <p>See all the network requests your browser makes, how long each request takes and details of each request.</p> <a class="more" href="https://developer.mozilla.org/docs/Tools/Network_Monitor" rel="external">Learn more about Network Monitor</a> @@ -59,7 +59,7 @@ </li> <li class="feature"> <a class="video-play" href="https://www.youtube.com/watch?v=R_qDaLQ8ghg" rel="external"> - <img alt="Screenshot" class="screenshot" src="//mozorg.cdn.mozilla.net/media/img/firefox/firstrun/dev/feature-webaudio.a10ebc48d017.jpg"></img></a> + <img alt="Screenshot" class="screenshot" src="http://mozorg.cdn.mozilla.net/media/img/firefox/firstrun/dev/feature-webaudio.a10ebc48d017.jpg"></img></a> <h2>Web Audio Editor</h2> <p>Inspect and interact with Web Audio API in real time to ensure that all audio nodes are connected in the way you expect.</p> <a class="more" href="https://developer.mozilla.org/docs/Tools/Web_Audio_Editor" rel="external">Learn more about Web Audio Editor</a> @@ -67,7 +67,7 @@ </li> <li class="feature"> <a class="video-play" href="https://www.youtube.com/watch?v=3kdBvvIZIqU" rel="external"> - <img alt="Screenshot" class="screenshot" src="//mozorg.cdn.mozilla.net/media/img/firefox/firstrun/dev/feature-style-editor.87c5d2017506.jpg"></img></a> + <img alt="Screenshot" class="screenshot" src="http://mozorg.cdn.mozilla.net/media/img/firefox/firstrun/dev/feature-style-editor.87c5d2017506.jpg"></img></a> <h2>Style Editor</h2> <p>View and edit CSS styles associated with a Web page, create new ones and apply existing CSS stylesheets to any page.</p> <a class="more" href="https://developer.mozilla.org/docs/Tools/Style_Editor" rel="external">Learn more about Style Editor</a> diff --git a/test/test-pages/normalize-spaces/expected-metadata.json b/test/test-pages/normalize-spaces/expected-metadata.json deleted file mode 100644 index 3887fbb..0000000 --- a/test/test-pages/normalize-spaces/expected-metadata.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "title": "Normalize space test", - "byline": null, - "excerpt": "Lorem\n ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod\n\ttab here\n incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,\n quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo\n consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse\n cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non\n proident, sunt in culpa qui officia deserunt mollit anim id est laborum.", - "readerable": false -} diff --git a/test/test-pages/normalize-spaces/expected.html b/test/test-pages/normalize-spaces/expected.html deleted file mode 100644 index c81a738..0000000 --- a/test/test-pages/normalize-spaces/expected.html +++ /dev/null @@ -1,3 +0,0 @@ - <article> - <p> Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tab here incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. </p> - <p> Tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. </p>
\ No newline at end of file diff --git a/test/test-pages/normalize-spaces/source.html b/test/test-pages/normalize-spaces/source.html deleted file mode 100644 index b230798..0000000 --- a/test/test-pages/normalize-spaces/source.html +++ /dev/null @@ -1,35 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <meta charset="utf-8"/> - <title>Normalize space test</title> -</head> -<body> - <article> - <h1>Lorem</h1> - <div> - Lorem - ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod - tab here - incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, - quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo - consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse - cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non - proident, sunt in culpa qui officia deserunt mollit anim id est laborum. - </div> - <h2>Foo</h2> - <div> - Tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, - quis nostrud exercitation - - - - - ullamco laboris nisi ut aliquip ex ea commodo - consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse - cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non - proident, sunt in culpa qui officia deserunt mollit anim id est laborum. - </div> - </article> -</body> -</html> diff --git a/test/test-pages/remove-extra-paragraphs/expected.html b/test/test-pages/remove-extra-paragraphs/expected.html index 11a4c51..0daf4cb 100644 --- a/test/test-pages/remove-extra-paragraphs/expected.html +++ b/test/test-pages/remove-extra-paragraphs/expected.html @@ -1,8 +1,23 @@ - <div> - <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> - <p>Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p> - <p>Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> - </div> - <div> - <p>Tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p> - <p>Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
\ No newline at end of file +<div> + <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod + tempor incididunt ut labore et dolore magna aliqua.</p> + + <p>Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo + consequat.</p> + + <p></p> + <p>Duis aute irure dolor in reprehenderit in voluptate velit esse + cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non + proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> + + </div><div> + <p>Tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo + consequat.</p> + + <p>Duis aute irure dolor in reprehenderit in voluptate velit esse + cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non + proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> + + </div>
\ No newline at end of file diff --git a/test/test-pages/replace-font-tags/expected.html b/test/test-pages/replace-font-tags/expected.html index 0734fb3..52a5cf3 100644 --- a/test/test-pages/replace-font-tags/expected.html +++ b/test/test-pages/replace-font-tags/expected.html @@ -1,3 +1,18 @@ - <article> - <p> <span face="Arial" size="2">Lorem ipsum dolor</span> sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. <span face="Arial" size="2">Duis</span> aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. </p> - <p> Tempor incididunt ut labore et <span face="Arial" size="2">dolore</span> magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. <span face="Arial" size="2">Excepteur sint occaecat</span> cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. </p>
\ No newline at end of file +<article> + <p> + <span face="Arial" size="2">Lorem ipsum dolor</span> sit amet, consectetur adipisicing elit, sed do eiusmod + tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo + consequat. <span face="Arial" size="2">Duis</span> aute irure dolor in reprehenderit in voluptate velit esse + cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non + proident, sunt in culpa qui officia deserunt mollit anim id est laborum. + </p> + + <p> + Tempor incididunt ut labore et <span face="Arial" size="2">dolore</span> magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo + consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse + cillum dolore eu fugiat nulla pariatur. <span face="Arial" size="2">Excepteur sint occaecat</span> cupidatat non + proident, sunt in culpa qui officia deserunt mollit anim id est laborum. + </p> + </article>
\ No newline at end of file diff --git a/test/test-pages/simplyfound-1/expected.html b/test/test-pages/simplyfound-1/expected.html index 32211dc..daea62d 100644 --- a/test/test-pages/simplyfound-1/expected.html +++ b/test/test-pages/simplyfound-1/expected.html @@ -1,8 +1,18 @@ - <div class="card-box-body"> - <p>The Raspberry Pi Foundation started by a handful of volunteers in 2012 when they released the original Raspberry Pi 256MB Model B without knowing what to expect. In a short four-year period they have grown to over sixty full-time employees and have shipped over <b>eight million</b> units to-date. Raspberry Pi has achieved new heights by being shipped to the International Space Station for research and by being an affordable computing platforms used by teachers throughout the world. "It has become the all-time best-selling computer in the UK".</p> - <p class="media-caption">Raspberry Pi 3 - A credit card sized PC that only costs $35 - Image: Raspberry Pi Foundation</p> - <p>Raspberry Pi Foundation is charity organization that pushes for a digital revolution with a mission to inspire kids to learn by creating computer-powered objects. The foundation also helps teachers learn computing skills through free training and readily available tutorials & example code for creating cool things such as music.</p> - <p class="media-caption">Raspberry Pi in educations - Image: Raspberry Pi Foundation</p> - <p>In celebration of their 4th year anniversary, the foundation has released <b>Raspberry Pi 3</b> with the same price tag of<b> </b>$35 USD. The 3rd revision features a <b>1.2GHz 64-bit quad-core</b> ARM CPU with integrated Bluetooth 4.1 and 802.11n wireless LAN chipsets. The ARM Cortex-A53 CPU along with other architectural enhancements making it the fastest Raspberry Pi to-date. The 3rd revision is reportedly about 50-60% times faster than its predecessor Raspberry Pi 2 and about 10 times faster then the original Raspberry PI.</p> - <p class="media-caption">Raspberry Pi - Various Usage</p> - <p>Raspberry Pi 3 is now available via many online resellers. At this time, you should use a recent <b>32-bit </b>NOOBS or Raspbian image from their <a href="https://www.raspberrypi.org/downloads/" rel="nofollow" target="_blank">downloads</a> page with a promise of a switch to a 64-bit version only if further investigation proves that there is indeed some value in moving to 64-bit mode.</p>
\ No newline at end of file +<div class="card-box-body"> + <p>The Raspberry Pi Foundation started by a handful of volunteers in 2012 when they released the original Raspberry Pi 256MB Model B without knowing what to expect. In a short four-year period they have grown to over sixty full-time employees and have shipped over <b>eight million</b> units to-date. Raspberry Pi has achieved new heights by being shipped to the International Space Station for research and by being an affordable computing platforms used by teachers throughout the world. "It has become the all-time best-selling computer in the UK".</p> + + + <p>Raspberry Pi 3 - A credit card sized PC that only costs $35 - Image: Raspberry Pi Foundation</p> + + <p>Raspberry Pi Foundation is charity organization that pushes for a digital revolution with a mission to inspire kids to learn by creating computer-powered objects. The foundation also helps teachers learn computing skills through free training and readily available tutorials & example code for creating cool things such as music.</p> + + + <p>Raspberry Pi in educations - Image: Raspberry Pi Foundation</p> + + <p>In celebration of their 4th year anniversary, the foundation has released <b>Raspberry Pi 3</b> with the same price tag of<b> </b>$35 USD. The 3rd revision features a <b>1.2GHz 64-bit quad-core</b> ARM CPU with integrated Bluetooth 4.1 and 802.11n wireless LAN chipsets. The ARM Cortex-A53 CPU along with other architectural enhancements making it the fastest Raspberry Pi to-date. The 3rd revision is reportedly about 50-60% times faster than its predecessor Raspberry Pi 2 and about 10 times faster then the original Raspberry PI.</p> + + + <p>Raspberry Pi - Various Usage</p> + + <p>Raspberry Pi 3 is now available via many online resellers. At this time, you should use a recent <b>32-bit </b>NOOBS or Raspbian image from their <a href="https://www.raspberrypi.org/downloads/" rel="nofollow" target="_blank">downloads</a> page with a promise of a switch to a 64-bit version only if further investigation proves that there is indeed some value in moving to 64-bit mode.</p> + </div>
\ No newline at end of file diff --git a/test/test-pages/style-tags-removal/expected.html b/test/test-pages/style-tags-removal/expected.html index 7d90ea1..6c26308 100644 --- a/test/test-pages/style-tags-removal/expected.html +++ b/test/test-pages/style-tags-removal/expected.html @@ -1,3 +1,18 @@ - <article> - <p> Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. </p> - <p> Tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. </p>
\ No newline at end of file +<article> + <p> + Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod + tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo + consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse + cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non + proident, sunt in culpa qui officia deserunt mollit anim id est laborum. + </p> + + <p> + Tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo + consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse + cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non + proident, sunt in culpa qui officia deserunt mollit anim id est laborum. + </p> + </article>
\ No newline at end of file diff --git a/test/test-pages/wapo-1/expected.html b/test/test-pages/wapo-1/expected.html index 4365128..e970c80 100644 --- a/test/test-pages/wapo-1/expected.html +++ b/test/test-pages/wapo-1/expected.html @@ -1,45 +1,146 @@ - <article> - <p> <span class="dateline">CAIRO —</span> Gunmen opened fire on visitors at Tunisia’s most renowned museum on Wednesday, killing at least 19 people, including 17 foreigners, in an assault that threatened to upset the fragile stability of a country seen as the lone success of the Arab Spring.</p> - <p>It was the most deadly terrorist attack in the North African nation in more than a decade. Although no group claimed responsibility, the bloodshed raised fears that militants linked to the Islamic State were expanding their operations.</p> - <p>The attackers, clad in military uniforms, <a href="http://www.washingtonpost.com/world/gunmen-storm-museum-in-tunisia-killing-at-least-8/2015/03/18/00202e76-cd73-11e4-8730-4f473416e759_story.html">stormed the Bardo National Museum</a> on Wednesday afternoon, seizing and gunning down foreign tourists before security forces raided the building to end the siege. The museum is a major tourist draw and is near the heavily guarded national parliament in downtown Tunis.</p> - <p>Tunisian Prime Minister Habib Essid said that in addition to the slain foreigners — from Italy, Poland, Germany and Spain — a local museum worker and a security official were killed. Two gunmen died, and three others may have escaped, officials said. About 50 other people were wounded, according to local news reports.</p> - <p>“Our nation is in danger,” Essid declared in a televised address Wednesday evening. He vowed that the country would be “merciless” in defending itself.</p> - <p channel="wp.com" class="interstitial-link"> <i> <a href="http://www.washingtonpost.com/blogs/worldviews/wp/2015/03/18/why-tunisia-the-arab-springs-sole-success-story-suffers-from-islamist-violence/">[Read: Why Tunisia, Arab Spring’s sole success story, suffers from Islamist violence]</a> </i> </p> - <p>Tunisia, a mostly Muslim nation of about 11 million people, was governed for decades by autocrats who imposed secularism. Its sun-drenched Mediterranean beaches drew thousands of bikini-clad tourists, and its governments promoted education and other rights for women. But the country has grappled with rising Islamist militancy since a popular uprising overthrew its dictator four years ago, setting the stage for the Arab Spring revolts across the region.</p> - <p>Thousands of Tunisians have flocked to join jihadist groups in Syria, including the Islamic State, making the country one of the major sources of foreign fighters in the conflict. Tunisian security forces have also fought increasing gunbattles with jihadists at home.</p> - <p>Despite this, the country has been hailed as a model of democratic transition as other governments that came to power after the Arab Spring collapsed, often in bloody confrontations. But the attack Wednesday — on a national landmark that showcases Tunisia’s rich heritage — could heighten tensions in a nation that has become deeply divided between pro- and anti-Islamist political factions.</p> - <p>Many Tunisians accuse the country’s political Islamists, who held power from 2011 to 2013, of having been slow to respond to the growing danger of terrorism. Islamist politicians have acknowledged that they did not realize the threat that would develop when radical Muslims, who had been repressed under authoritarian regimes, won the freedom to preach freely in mosques.</p> - <p>In Washington, White House press secretary Josh Earnest <a href="http://hosted2.ap.org/APDEFAULT/cae69a7523db45408eeb2b3a98c0c9c5/Article_2015-03-18-ML--Tunisia-Attack-The%20Latest/id-653822d829b24cef993c5bd6a7ce44b5">condemned the attack </a>and said the U.S. government was willing to assist Tunisian authorities in the investigation.</p> - <div class="inline-content inline-video"> - <p class="inline-video-caption"> <span class="pb-caption">Gunmen in military uniforms stormed Tunisia's national museum, killing at least 19 people, most of them foreign tourists. (Reuters)</span> </p> - </div> - <p>“This attack today is meant to threaten authorities, to frighten tourists and to negatively affect the economy,” said Lotfi Azzouz, Tunisia country director for Amnesty International, a London-based rights group.</p> - <p>Tourism is critical to Tunisia’s economy, accounting for 15 percent of its gross domestic product in 2013, according to the World Travel and Tourism Council, an industry body. The Bardo museum hosts one of the world’s most outstanding collections of Roman mosaics and is popular with tourists and Tunisians alike.</p> - <p channel="wp.com" class="interstitial-link"> <i>[<a href="http://www.washingtonpost.com/blogs/worldviews/wp/2015/03/18/tunisias-bardo-museum-attacked-by-terrorists-is-home-to-amazing-roman-treasures/">Bardo museum houses amazing Roman treasures</a>]</i> </p> - <p>The attack is “also aimed at the country’s security and stability during the transition period,” Azzouz said. “And it could have political repercussions — like the curtailing of human rights, or even less government transparency if there’s fear of further attacks.”</p> - <p>The attack raised concerns that the government, led by secularists, would be pressured to stage a wider crackdown on Islamists of all stripes. Lawmakers are drafting an anti-terrorism bill to give security forces additional tools to fight militants.</p> - <p channel="wp.com" class="interstitial-link"> <i> <a href="http://www.washingtonpost.com/world/national-security/tunisia-after-igniting-arab-spring-sends-the-most-fighters-to-islamic-state-in-syria/2014/10/28/b5db4faa-5971-11e4-8264-deed989ae9a2_story.html">[Read: Tunisia sends most foreign fighters to Islamic State in Syria]</a> </i> </p> - <p>“We must pay attention to what is written” in that law, Azzouz said. “There is worry the government will use the attack to justify some draconian measures.”</p> - <p>Tunisian Islamists and secular forces have worked together — often reluctantly — to defuse the country’s political crises in the years since the revolt.</p> - <p>Last fall, Tunisians elected a secular-minded president and parliament dominated by liberal forces after <a href="http://www.washingtonpost.com/world/middle_east/tunisias-islamists-get-sobering-lesson-in-governing/2014/11/20/b6fc8988-65ad-11e4-ab86-46000e1d0035_story.html">souring on Islamist-led rule</a>. In 2011, voters had elected a government led by the Ennahda party — a movement similar to Egypt’s Islamist Muslim Brotherhood. But a political stalemate developed as the party and others tried to draft the country’s new constitution. The Islamists failed to improve a slumping economy. And Ennahda came under fire for what many Tunisians saw as a failure to crack down on Islamist extremists.</p> - <div class="inline-content inline-graphic-linked"><span class="pb-caption">Map: Flow of foreign fighters to Syria</span></div> - <p>After the collapse of the authoritarian system in 2011, hard-line Muslims known as Salafists attacked bars and art galleries. Then, in 2012, hundreds of Islamists <a href="http://www.washingtonpost.com/world/middle_east/in-tunisia-embassy-attack-tests-fledgling-democracy/2012/09/20/19f3986a-0273-11e2-8102-ebee9c66e190_story.html">assaulted the U.S. Embassy </a>in Tunis, shattering windows and hurling gasoline bombs, after the release of a crude online video about the prophet Muhammad. - <a href="http://www.bbc.com/news/world-africa-23452979"></a>The government outlawed the group behind the attack — Ansar al-Sharia, an al-Qaeda-linked organization — and began a crackdown. But the killing <a href="http://www.bbc.com/news/world-africa-23452979">of two leftist politicians</a> in 2013 prompted a fresh political crisis, and Ennahda stepped down, replaced by a technocratic government.</p> - <p>Tunisia’s <a href="http://www.washingtonpost.com/blogs/monkey-cage/wp/2015/02/03/tunisia-opts-for-an-inclusive-new-government/">current coalition government</a> includes an Ennahda minister in the cabinet. Still, many leftist figures openly oppose collaboration with the movement’s leaders.</p> - <p>“Ennahda is responsible for the current deterioration of the situation, because they were careless with the extremists” while they were in power, Azzouz said.</p> - <p>The leader of Ennahda, Rachid Ghannouchi, condemned Wednesday’s attack, saying in a statement that it “will not break our people’s will and will not undermine our revolution and our democracy.”</p> - <p>Security officials are particularly concerned by the collapse of Libya, where various armed groups are vying for influence and jihadist militants have entrenched themselves in major cities. Tunisians worry that extremists can easily get arms and training in the neighboring country.</p> - <p>In January, Libyan militants loyal to the Islamic State <a href="http://www.washingtonpost.com/world/middle_east/video-shows-purported-beheading-of-egyptian-christians-in-libya/2015/02/15/b8d0f092-b548-11e4-bc30-a4e75503948a_story.html">beheaded 21 Christians</a> — 20 of them Egyptian Copts — along the country’s coast. They later seized the Libyan city of Sirte.</p> - <div class="inline-content inline-graphic-embedded"><img class="unprocessed" data-hi-res-src="https://img.washingtonpost.com/rf/image_1484w/2010-2019/WashingtonPost/2015/03/18/Foreign/Graphics/tunisia600.jpg?uuid=1_yuLs2LEeSHME9HNBbnWQ" data-low-res-src="https://img.washingtonpost.com/rf/image_480w/2010-2019/WashingtonPost/2015/03/18/Foreign/Graphics/tunisia600.jpg?uuid=1_yuLs2LEeSHME9HNBbnWQ" src="https://img.washingtonpost.com/rf/image_480w/2010-2019/WashingtonPost/2015/03/18/Foreign/Graphics/tunisia600.jpg?uuid=1_yuLs2LEeSHME9HNBbnWQ"/> - <br/> - </div> - <p>Officials are worried about the number of Tunisian militants who may have joined the jihadists in Libya — with the goal of returning home to fight the Tunis government.</p> - <p>Ajmi Lourimi, a member of Ennahda’s general secretariat, said he believed the attack would unite Tunisians in the face of terrorism.</p> - <p>“There is a consensus here that this [attack] is alien to our culture, to our way of life. We want to unify against this danger,” Lourimi said. He said he did not expect a wider government campaign against Islamists.</p> - <p>“We have nothing to fear,” he said of himself and fellow Ennahda members. “We believe the Interior Ministry should be trained and equipped to fight and counter this militancy.”</p> - <p>The last major attack on a civilian target in Tunisia was in 2002, when al-Qaeda militants killed more than 20 people in a car bombing outside a synagogue in the city of Djerba.</p> - <p>Heba Habib contributed to this report.</p> - <p channel="wp.com"> <b>Read more:</b> </p> - <p channel="wp.com"> <a href="http://www.washingtonpost.com/world/middle_east/tunisias-islamists-get-sobering-lesson-in-governing/2014/11/20/b6fc8988-65ad-11e4-ab86-46000e1d0035_story.html" title="www.washingtonpost.com">Tunisia’s Islamists get a sobering lesson in governing</a> </p> - <p channel="wp.com"> <a href="http://www.washingtonpost.com/world/national-security/tunisia-after-igniting-arab-spring-sends-the-most-fighters-to-islamic-state-in-syria/2014/10/28/b5db4faa-5971-11e4-8264-deed989ae9a2_story.html">Tunisia sends most foreign fighters to Islamic State in Syria</a> </p> - <p channel="wp.com"> <a href="http://www.washingtonpost.com/blogs/worldviews/wp/2015/03/18/tunisias-bardo-museum-attacked-by-terrorists-is-home-to-amazing-roman-treasures/">Tunisia’s Bardo museum is home to amazing Roman treasures</a> </p>
\ No newline at end of file +<article> + <p> <span class="dateline">CAIRO —</span> Gunmen opened fire on visitors at + Tunisia’s most renowned museum on Wednesday, killing at least 19 people, + including 17 foreigners, in an assault that threatened to upset the fragile + stability of a country seen as the lone success of the Arab Spring.</p> + <p>It was the most deadly terrorist attack in the North African nation in + more than a decade. Although no group claimed responsibility, the bloodshed + raised fears that militants linked to the Islamic State were expanding + their operations.</p> + <p>The attackers, clad in military uniforms, <a href="http://www.washingtonpost.com/world/gunmen-storm-museum-in-tunisia-killing-at-least-8/2015/03/18/00202e76-cd73-11e4-8730-4f473416e759_story.html">stormed the Bardo National Museum</a> on + Wednesday afternoon, seizing and gunning down foreign tourists before security + forces raided the building to end the siege. The museum is a major tourist + draw and is near the heavily guarded national parliament in downtown Tunis.</p> + <p>Tunisian Prime Minister Habib Essid said that in addition to the slain + foreigners — from Italy, Poland, Germany and Spain — a local museum worker + and a security official were killed. Two gunmen died, and three others + may have escaped, officials said. About 50 other people were wounded, according + to local news reports.</p> + <p>“Our nation is in danger,” Essid declared in a televised address Wednesday + evening. He vowed that the country would be “merciless” in defending itself.</p> + <p channel="wp.com" class="interstitial-link"> <i> <a href="http://www.washingtonpost.com/blogs/worldviews/wp/2015/03/18/why-tunisia-the-arab-springs-sole-success-story-suffers-from-islamist-violence/">[Read: Why Tunisia, Arab Spring’s sole success story, suffers from Islamist violence]</a> </i> + </p> + <p>Tunisia, a mostly Muslim nation of about 11 million people, was governed + for decades by autocrats who imposed secularism. Its sun-drenched Mediterranean + beaches drew thousands of bikini-clad tourists, and its governments promoted + education and other rights for women. But the country has grappled with + rising Islamist militancy since a popular uprising overthrew its dictator + four years ago, setting the stage for the Arab Spring revolts across the + region.</p> + <p>Thousands of Tunisians have flocked to join jihadist groups in Syria, + including the Islamic State, making the country one of the major sources + of foreign fighters in the conflict. Tunisian security forces have also + fought increasing gunbattles with jihadists at home.</p> + <p>Despite this, the country has been hailed as a model of democratic transition + as other governments that came to power after the Arab Spring collapsed, + often in bloody confrontations. But the attack Wednesday — on a national + landmark that showcases Tunisia’s rich heritage — could heighten tensions + in a nation that has become deeply divided between pro- and anti-Islamist + political factions.</p> + <p>Many Tunisians accuse the country’s political Islamists, who held power + from 2011 to 2013, of having been slow to respond to the growing danger + of terrorism. Islamist politicians have acknowledged that they did not + realize the threat that would develop when radical Muslims, who had been + repressed under authoritarian regimes, won the freedom to preach freely + in mosques.</p> + <p>In Washington, White House press secretary Josh Earnest <a href="http://hosted2.ap.org/APDEFAULT/cae69a7523db45408eeb2b3a98c0c9c5/Article_2015-03-18-ML--Tunisia-Attack-The%20Latest/id-653822d829b24cef993c5bd6a7ce44b5">condemned the attack </a>and + said the U.S. government was willing to assist Tunisian authorities in + the investigation.</p> + <div class="inline-content inline-video"> + + <p> <span class="pb-caption">Gunmen in military uniforms stormed Tunisia's national museum, killing at least 19 people, most of them foreign tourists. (Reuters)</span> + </p> + </div> + <p>“This attack today is meant to threaten authorities, to frighten tourists + and to negatively affect the economy,” said Lotfi Azzouz, Tunisia country + director for Amnesty International, a London-based rights group.</p> + <p>Tourism is critical to Tunisia’s economy, accounting for 15 percent of + its gross domestic product in 2013, according to the World Travel and Tourism + Council, an industry body. The Bardo museum hosts one of the world’s most + outstanding collections of Roman mosaics and is popular with tourists and + Tunisians alike.</p> + <p channel="wp.com" class="interstitial-link"> <i>[<a href="http://www.washingtonpost.com/blogs/worldviews/wp/2015/03/18/tunisias-bardo-museum-attacked-by-terrorists-is-home-to-amazing-roman-treasures/">Bardo museum houses amazing Roman treasures</a>]</i> + </p> + <p>The attack is “also aimed at the country’s security and stability during + the transition period,” Azzouz said. “And it could have political repercussions + — like the curtailing of human rights, or even less government transparency + if there’s fear of further attacks.”</p> + <p>The attack raised concerns that the government, led by secularists, would + be pressured to stage a wider crackdown on Islamists of all stripes. Lawmakers + are drafting an anti-terrorism bill to give security forces additional + tools to fight militants.</p> + + <p channel="wp.com" class="interstitial-link"> <i> <a href="http://www.washingtonpost.com/world/national-security/tunisia-after-igniting-arab-spring-sends-the-most-fighters-to-islamic-state-in-syria/2014/10/28/b5db4faa-5971-11e4-8264-deed989ae9a2_story.html">[Read: Tunisia sends most foreign fighters to Islamic State in Syria]</a> </i> + </p> + <p>“We must pay attention to what is written” in that law, Azzouz said. “There + is worry the government will use the attack to justify some draconian measures.”</p> + <p>Tunisian Islamists and secular forces have worked together — often reluctantly + — to defuse the country’s political crises in the years since the revolt.</p> + <p>Last fall, Tunisians elected a secular-minded president and parliament + dominated by liberal forces after <a href="http://www.washingtonpost.com/world/middle_east/tunisias-islamists-get-sobering-lesson-in-governing/2014/11/20/b6fc8988-65ad-11e4-ab86-46000e1d0035_story.html">souring on Islamist-led rule</a>. + In 2011, voters had elected a government led by the Ennahda party — a movement + similar to Egypt’s Islamist Muslim Brotherhood. But a political stalemate + developed as the party and others tried to draft the country’s new constitution. + The Islamists failed to improve a slumping economy. And Ennahda came under + fire for what many Tunisians saw as a failure to crack down on Islamist + extremists.</p> + <div class="inline-content inline-graphic-linked"> + <span class="pb-caption">Map: Flow of foreign fighters to Syria</span> + </div> + <p>After the collapse of the authoritarian system in 2011, hard-line Muslims + known as Salafists attacked bars and art galleries. Then, in 2012, hundreds + of Islamists <a href="http://www.washingtonpost.com/world/middle_east/in-tunisia-embassy-attack-tests-fledgling-democracy/2012/09/20/19f3986a-0273-11e2-8102-ebee9c66e190_story.html">assaulted the U.S. Embassy </a>in + Tunis, shattering windows and hurling gasoline bombs, after the release + of a crude online video about the prophet Muhammad. <a href="http://www.bbc.com/news/world-africa-23452979"></a>The + government outlawed the group behind the attack — Ansar al-Sharia, an al-Qaeda-linked + organization — and began a crackdown. But the killing <a href="http://www.bbc.com/news/world-africa-23452979">of two leftist politicians</a> in + 2013 prompted a fresh political crisis, and Ennahda stepped down, replaced + by a technocratic government.</p> + <p>Tunisia’s <a href="http://www.washingtonpost.com/blogs/monkey-cage/wp/2015/02/03/tunisia-opts-for-an-inclusive-new-government/">current coalition government</a> includes + an Ennahda minister in the cabinet. Still, many leftist figures openly + oppose collaboration with the movement’s leaders.</p> + <p>“Ennahda is responsible for the current deterioration of the situation, + because they were careless with the extremists” while they were in power, + Azzouz said.</p> + <p>The leader of Ennahda, Rachid Ghannouchi, condemned Wednesday’s attack, + saying in a statement that it “will not break our people’s will and will + not undermine our revolution and our democracy.”</p> + <p>Security officials are particularly concerned by the collapse of Libya, + where various armed groups are vying for influence and jihadist militants + have entrenched themselves in major cities. Tunisians worry that extremists + can easily get arms and training in the neighboring country.</p> + <p>In January, Libyan militants loyal to the Islamic State <a href="http://www.washingtonpost.com/world/middle_east/video-shows-purported-beheading-of-egyptian-christians-in-libya/2015/02/15/b8d0f092-b548-11e4-bc30-a4e75503948a_story.html">beheaded 21 Christians</a> — + 20 of them Egyptian Copts — along the country’s coast. They later seized + the Libyan city of Sirte.</p> + <div class="inline-content inline-graphic-embedded"> + <img class="unprocessed" data-hi-res-src="https://img.washingtonpost.com/rf/image_1484w/2010-2019/WashingtonPost/2015/03/18/Foreign/Graphics/tunisia600.jpg?uuid=1_yuLs2LEeSHME9HNBbnWQ" data-low-res-src="https://img.washingtonpost.com/rf/image_480w/2010-2019/WashingtonPost/2015/03/18/Foreign/Graphics/tunisia600.jpg?uuid=1_yuLs2LEeSHME9HNBbnWQ" src="https://img.washingtonpost.com/rf/image_480w/2010-2019/WashingtonPost/2015/03/18/Foreign/Graphics/tunisia600.jpg?uuid=1_yuLs2LEeSHME9HNBbnWQ"></img><br></br></div> + <p>Officials are worried about the number of Tunisian militants who may have + joined the jihadists in Libya — with the goal of returning home to fight + the Tunis government.</p> + <p>Ajmi Lourimi, a member of Ennahda’s general secretariat, said he believed + the attack would unite Tunisians in the face of terrorism.</p> + <p>“There is a consensus here that this [attack] is alien to our culture, + to our way of life. We want to unify against this danger,” Lourimi said. + He said he did not expect a wider government campaign against Islamists.</p> + <p>“We have nothing to fear,” he said of himself and fellow Ennahda members. + “We believe the Interior Ministry should be trained and equipped to fight + and counter this militancy.”</p> + <p>The last major attack on a civilian target in Tunisia was in 2002, when + al-Qaeda militants killed more than 20 people in a car bombing outside + a synagogue in the city of Djerba.</p> + + <p>Heba Habib contributed to this report.</p> + + <p> <i></i> + </p> + + <p channel="wp.com"> <b>Read more:</b> + </p> + <p channel="wp.com"> <a href="http://www.washingtonpost.com/world/middle_east/tunisias-islamists-get-sobering-lesson-in-governing/2014/11/20/b6fc8988-65ad-11e4-ab86-46000e1d0035_story.html" title="www.washingtonpost.com">Tunisia’s Islamists get a sobering lesson in governing</a> + </p> + <p channel="wp.com"> <a href="http://www.washingtonpost.com/world/national-security/tunisia-after-igniting-arab-spring-sends-the-most-fighters-to-islamic-state-in-syria/2014/10/28/b5db4faa-5971-11e4-8264-deed989ae9a2_story.html">Tunisia sends most foreign fighters to Islamic State in Syria</a> + </p> + <p channel="wp.com"> <a href="http://www.washingtonpost.com/blogs/worldviews/wp/2015/03/18/tunisias-bardo-museum-attacked-by-terrorists-is-home-to-amazing-roman-treasures/">Tunisia’s Bardo museum is home to amazing Roman treasures</a> + </p> + + </article>
\ No newline at end of file diff --git a/test/test-pages/webmd-1/expected-metadata.json b/test/test-pages/webmd-1/expected-metadata.json deleted file mode 100644 index 4ceddcf..0000000 --- a/test/test-pages/webmd-1/expected-metadata.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "title": "Babies Who Eat Peanuts Early May Avoid Allergy", - "byline": "By Brenda Goodman, MA\n WebMD Health News", - "excerpt": "Life-threatening peanut allergies have mysteriously been on the rise in the past decade, with little hope for a cure. But a groundbreaking new study may offer a way to stem that rise, while another may offer some hope for those who are already allergic.", - "readerable": true -} diff --git a/test/test-pages/webmd-1/expected.html b/test/test-pages/webmd-1/expected.html deleted file mode 100644 index aedbfdd..0000000 --- a/test/test-pages/webmd-1/expected.html +++ /dev/null @@ -1,14 +0,0 @@ - <div id="textArea" class="copyNormal"> - <h3></h3> - <p>Feb. 23, 2015 -- Life-threatening peanut allergies have mysteriously been on the rise in the past decade, with little hope for a cure.</p> - <p xmlns:xalan="http://xml.apache.org/xalan">But a groundbreaking new study may offer a way to stem that rise, while another may offer some hope for those who are already allergic.</p> - <p>Parents have been told for years to avoid giving foods containing peanuts to babies for fear of triggering an allergy. Now research shows the opposite is true: Feeding babies snacks made with peanuts before their first birthday appears to prevent that from happening.</p> - <p>The study is published in the <i>New England Journal of Medicine,</i> and it was presented at the annual meeting of the American Academy of Allergy, Asthma and Immunology in Houston. It found that among children at high risk for getting peanut allergies, eating peanut snacks by 11 months of age and continuing to eat them at least three times a week until age 5 cut their chances of becoming allergic by more than 80% compared to kids who avoided peanuts. Those at high risk were already allergic to egg, they had the skin condition <a href="http://www.webmd.com/skin-problems-and-treatments/eczema/default.htm" onclick="return sl(this,'','embd-lnk');" class="Article">eczema</a>, or both.</p> - <p>Overall, about 3% of kids who ate peanut butter or peanut snacks before their first birthday got an allergy, compared to about 17% of kids who didn’t eat them.</p> - <p>“I think this study is an astounding and groundbreaking study, really,” says Katie Allen, MD, PhD. She's the director of the Center for Food and Allergy Research at the Murdoch Children’s Research Institute in Melbourne, Australia. Allen was not involved in the research.</p> - <p>Experts say the research should shift thinking about how kids develop <a href="http://www.webmd.com/allergies/guide/food-allergy-intolerances" onclick="return sl(this,'','embd-lnk');" class="Article">food allergies</a>, and it should change the guidance doctors give to parents.</p> - <p>Meanwhile, for children and adults who are already <a href="http://www.webmd.com/allergies/guide/nut-allergy" onclick="return sl(this,'','embd-lnk');" class="Article">allergic to peanuts</a>, another study presented at the same meeting held out hope of a treatment.</p> - <p>A new skin patch called Viaskin allowed people with peanut allergies to eat tiny amounts of peanuts after they wore it for a year.</p> - <a name="1"> </a> - <h3>A Change in Guidelines?</h3> - <p>Allergies to peanuts and other foods are on the rise. In the U.S., more than 2% of people react to peanuts, a 400% increase since 1997. And reactions to peanuts and other tree nuts can be especially severe. Nuts are the main reason people get a life-threatening problem called <a href="http://www.webmd.com/allergies/guide/anaphylaxis" onclick="return sl(this,'','embd-lnk');" class="Article">anaphylaxis</a>.</p>
\ No newline at end of file diff --git a/test/test-pages/webmd-1/source.html b/test/test-pages/webmd-1/source.html deleted file mode 100644 index f88057c..0000000 --- a/test/test-pages/webmd-1/source.html +++ /dev/null @@ -1,2411 +0,0 @@ -<!DOCTYPE html> -<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en" class="no-js"> - - <head> - <title>Babies Who Eat Peanuts Early May Avoid Allergy</title> - <meta http-equiv="X-UA-Compatible" - content="IE=Edge"/> - <script type="text/javascript"> - var s_topic="1625" - ,s_business_reference="News" - ,s_publication_source="WebMD Health News" - ,s_sponsor_brand="Dey_EpiPen" - ,s_sponsor_program="Dey_EpiPen_Patient Select Allergies" - ,s_package_type="topic targeted - sp" - ,s_package_name="" - ,s_channel_super_portal="" - ,s_channel_health="Allergies" - ,s_channel_topic_miniguide_guide="" - ,s_channel_mini="" - ,s_channel_micro="" - ,s_tug="2321" - ,s_topic_dir="false" - ,s_mrt="" - ,s_site="core" - ,s_assetname="" - ,s_searchterm=""; - </script> - <script language="javascript" type="text/javascript"> - var s_furl="/allergies/news/20150220/child-peanut-allergy-findings"; var s_sponsor_program=""; var s_sensitive="false"; var s_mrt=""; var image_server_url="http://img.webmd.com/dtmcms/live";var s_uk_user="false"; - </script> - <meta name="description" content="Life-threatening peanut allergies have mysteriously been on the rise in the past decade, with little hope for a cure. But a groundbreaking new study may offer a way to stem that rise, while another may offer some hope for those who are already allergic."/> - <meta name="keywords" content="peanuts, peanut allergy, eczema, peanut allergies, babies and peanuts"/> - <link rel="alternate" type="application/rss+xml" title="RSS" href="http://rssfeeds.webmd.com/rss/rss.aspx?RSSSource=RSS_PUBLIC"/> - <link rel="alternate" media="only screen and (max-width: 640px)" href="http://www.m.webmd.com/allergies/news/20150220/child-peanut-allergy-findings"/> - <script language="javascript1.2" type="text/javascript"> - <!-- - var center="health"; var center_name="Allergies"; var center_id=893; var center_prefix="www"; var center_url="/allergies/default.htm";//--> - </script> - <meta http-equiv="CACHE-CONTROL" content="NO-CACHE"/> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> - <link rel="shortcut icon" href="http://img.webmd.com/dtmcms/live/images/favicon/webmd.ico"/> - <link href="http://img.webmd.com/dtmcms/live/webmd/PageBuilder_Assets/CSS/layout.css" - type="text/css" rel="stylesheet"/> - <link rel="apple-touch-icon-precomposed" href="/favico/apple-touch-icon-precomposed.png"/> - <link rel="apple-touch-icon-precomposed" sizes="72x72" href="/favico/apple-touch-icon-72x72-precomposed.png"/> - <link rel="apple-touch-icon-precomposed" sizes="114x114" href="/favico/apple-touch-icon-114x114-precomposed.png"/> - <link rel="stylesheet" type="text/css" href="http://css.webmd.com/dtmcms/live/webmd/PageBuilder_Assets/CSS/Site/WebMD_091e9c5e8004a22432.css"/> - <link rel="stylesheet" type="text/css" href="http://css.webmd.com/dtmcms/live/webmd/PageBuilder_Assets/CSS_Aggr/Allergies News CAP/page_Allergies News CAP_091e9c5e80030184_psmodules_css_1224.css"/> - <link rel="stylesheet" type="text/css" href="http://css.webmd.com/dtmcms/live/webmd/PageBuilder_Assets/CSS_Aggr/Base Template/template_Base Template_091e9c5e80020366_tmodules_css_4157.css"/> - <link rel="stylesheet" type="text/css" href="http://css.webmd.com/dtmcms/live/webmd/PageBuilder_Assets/CSS_Aggr/Allergies Health Center/template_Allergies Health Center_091e9c5e80022c47_tmodules_css_4718.css"/> - <link rel="stylesheet" type="text/css" href="http://css.webmd.com/dtmcms/live/webmd/PageBuilder_Assets/CSS_Aggr/Allergies News/template_Allergies News_091e9c5e8002e053_tmodules_css_1593.css"/> - <link rel="stylesheet" type="text/css" href="http://css.webmd.com/dtmcms/live/webmd/PageBuilder_Assets/CSS_Aggr/Allergies News CAP/page_Allergies News CAP_091e9c5e80030184_pmodules_css_3838.css"/> - <link rel="stylesheet" type="text/css" href="http://css.webmd.com/dtmcms/live/webmd/PageBuilder_Assets/CSS/Atlanta/reskin/reskin12.css"/> - <script language="javascript" type="text/javascript" src="http://img.webmd.com/dtmcms/live/webmd/PageBuilder_Assets/JS/webmd.dynamicMobileThrottling.min13.js"></script> - <script language="javascript" type="text/javascript" src="http://img.webmd.com/dtmcms/live/webmd/PageBuilder_Assets/JS/scripts373.js"></script> - <script language="javascript" type="text/javascript" src="http://img.webmd.com/dtmcms/live/webmd/PageBuilder_Assets/JS/masthead36.js"></script> - <script language="javascript" type="text/javascript" src="http://img.webmd.com/dtmcms/live/webmd/PageBuilder_Assets/JS/reskin/reskin14.js"></script> - <script language="javascript" type="text/javascript" src="http://img.webmd.com/dtmcms/live/webmd/PageBuilder_Assets/JS/modules/webmd.m.mostPopSS9.js"></script> - <script language="javascript" type="text/javascript" src="http://img.webmd.com/dtmcms/live/webmd/PageBuilder_Assets/JS/guide_navigation42.js"></script> - <script language="javascript" type="text/javascript" src="http://img.webmd.com/dtmcms/live/webmd/PageBuilder_Assets/JS/oas69.js"></script> - <script language="javascript" type="text/javascript" src="http://img.webmd.com/dtmcms/live/webmd/PageBuilder_Assets/JS/topic-directory/webmd.m.dynamicnav17.js"></script> - <script language="javascript" type="text/javascript" src="http://img.webmd.com/dtmcms/live/webmd/PageBuilder_Assets/JS/topic-directory/webmd.m.dynrelart28.js"></script> - <script language="javascript" type="text/javascript" src="http://img.webmd.com/dtmcms/live/webmd/PageBuilder_Assets/JS/modules/answers3_promo17.js"></script> - <script language="javascript" type="text/javascript" src="http://img.webmd.com/dtmcms/live/webmd/PageBuilder_Assets/JS/hover-reg32.js"></script> - </head> - - <body> - <div id="centering_area"> - <div id="page_area"> - <div id="bannerAd_ctr"> - <div id="ContentPane1"> - <script type="text/javascript"> - // write mboxes for OTT - if (window.$ && window.webmd && window.mboxCreate) { - if (window.webmd.mbox) { - webmd.mbox.init(); - } - } - </script> - <!-- define the Facebook share thumbnail --> - <link rel="image_src" href="http://img.webmd.com/dtmcms/live/webmd/consumer_assets/site_images/miscellaneous/webmd_FB_logo_bluebkgrd.jpg?v=1"/> - <!--<ul><li>$adsystem = DFP</li><li>$pos = 101</li><li>$print = false</li></ul><ul><li>adtype = iFRAME</li><li>iframeheight = 90</li><li>iframewidth = 728</li><li>adserver = as.webmd.com</li></ul><ul><li>affiliate = 20</li><li>apg = 1625</li><li>artid = 091e9c5e810fb2ee</li><li>au1 = </li><li>au2 = </li><li>bc = _age121_l23_age122_j30_t780_</li><li>brand = 0</li><li>cc = 17</li><li>env = </li><li>hcent = 893</li><li>mcent = </li><li>micro = </li><li>pkg = &leaf=</li><li>pos = 101</li><li>pug = __</li><li>scent = </li><li>sec = </li><li>segval = </li><li>site = 2</li><li>tile = 365904714</li><li>tmg = </li><li>transactionID = 442451382</li><li>tug = 2321</li><li>uri = %2fallergies%2fnews%2f20150220%2fchild-peanut-allergy-findings</li></ul>--> - <script> - var priTopId='1625', secTopId=''; - </script> - <div id="bannerAd_rdr"> - <div class="bannerAd_top_fmt"></div> - <div id="bannerAd_fmt" class="bannerAd_BG_fmt loaded"> - <div id="ads2-pos-101-bannerAd" class="ad_placeholder"></div> - </div> - </div> - <script> - webmd.ads2Consumer.defineAd({targets:{art:'091e9c5e810fb2ee',cc:'17',env:'',hcent:'893',leaf:'&leaf=',mcent:'',mic:'',pt:'1625',sec:'',pug:'__',scent:'',tmg:'',tug:'2321',uri:'%2fallergies%2fnews%2f20150220%2fchild-peanut-allergy-findings'},blockCodes:'_age121_l23_age122_j30_t780_',id:'ads2-pos-101-bannerAd',pos:'101',sizes:[[728,90],[970, 90],[970,250]]}); - </script> - </div> - </div> - <div id="header_ctr"> - <div id="ContentPane2"> - <header id="masthead" class="bottom_header"> - <div id="global_overlay"></div><a href="#mainContentContainer_area" class="jawsonly">Skip to content</a> - <div - id="banner" role="banner"> - <div id="logo"><a onclick="sl(this,'','logo')" href="http://www.webmd.com/www/default.htm"><img src="http://img.webmd.com/dtmcms/live/webmd/consumer_assets/site_images/usability/2012/LBi_Masthead/logo_trans.png" class="logo_rdr" alt="WebMD: Better information. Better health."/></a> - </div> - <div id="search_container" role="search"> - <form action="http://www.webmd.com/search/search_results/default.aspx" - method="get" name="searchForm"> - <label class="jawsonly" for="searchQuery_fmt">Enter Search Keywords. Use the arrow keys to navigate suggestions.</label> - <input - type="text" id="searchQuery_fmt" name="query" maxlength="200" value="" - autocomplete="off" title="Enter Search Keywords"/> - <input type="submit" class="searchButton_fmt" name="searchButton_fmt" - value="" title="Search" onclick="return sl(this,'','srch-bar_submit')"/> - </form> - <ul id="searchTypeahead_fmt" aria-live="assertive"></ul> - </div> - <div id="lln-srchbarlnks"><a onclick="return sl(this,'','lln-srchbarlnks_schk')" class="lln-symptoms" - href="http://www.webmd.com/symptoms/default.htm">Symptoms</a><span class="pipe">|</span> - <a - onclick="return sl(this,'','lln-srchbarlnks_phyd')" class="lln-doctors" - href="http://doctor.webmd.com/home">Doctors</a><span class="pipe">|</span> <a onclick="return sl(this,'','lln-srchbarlnks_hins')" - class="lln-insurance" href="http://www.webmd.com/health-insurance/default.htm">Health Care Reform</a> - </div> - </div> - <nav id="nav" role="navigation"> - <ul> - <li id="nav_1" class="nav nav_reference"><a href="http://www.webmd.com/a-to-z-guides/common-topics/default.htm" - id="nav_link_1" aria-haspopup="true" class="nav_link" onclick="return sl(this,'','hicb1-tab')">Health A-Z</a> - <div - id="menu_1" class="nav_dropdown" role="menu" aria-expanded="false" aria-hidden="true"> - <div class="nav_dropdown_col_1a"> - <div id="nav_1_1"> - <p>Common Conditions</p><span><a href="http://www.webmd.com/a-to-z-guides/common-topics/default.htm" onclick="return sl(this,'','hicb1-ccnd_more')">View All</a></span> - <ul - class="half" role="menu"> - <li><a href="http://www.webmd.com/add-adhd/default.htm" onclick="return sl(this,'','hicb1-ccnd_1')">ADD/ADHD</a> - </li> - <li><a href="http://www.webmd.com/allergies/default.htm" onclick="return sl(this,'','hicb1-ccnd_2')">Allergies</a> - </li> - <li><a href="http://www.webmd.com/arthritis/default.htm" onclick="return sl(this,'','hicb1-ccnd_3')">Arthritis</a> - </li> - <li><a href="http://www.webmd.com/cancer/default.htm" onclick="return sl(this,'','hicb1-ccnd_4')">Cancer</a> - </li> - <li><a href="http://www.webmd.com/cold-and-flu/default.htm" onclick="return sl(this,'','hicb1-ccnd_5')">Cold, Flu & Cough</a> - </li> - <li><a href="http://www.webmd.com/depression/default.htm" onclick="return sl(this,'','hicb1-ccnd_6')">Depression</a> - </li> - <li><a href="http://www.webmd.com/diabetes/default.htm" onclick="return sl(this,'','hicb1-ccnd_7')">Diabetes</a> - </li> - </ul> - <ul class="half" role="menu"> - <li><a href="http://www.webmd.com/eye-health/default.htm" onclick="return sl(this,'','hicb1-ccnd_8')">Eye Health</a> - </li> - <li><a href="http://www.webmd.com/heart-disease/default.htm" onclick="return sl(this,'','hicb1-ccnd_9')">Heart Disease</a> - </li> - <li><a href="http://www.webmd.com/heartburn-gerd/default.htm" onclick="return sl(this,'','hicb1-ccnd_10')">Heartburn/GERD</a> - </li> - <li><a href="http://www.webmd.com/pain-management/default.htm" onclick="return sl(this,'','hicb1-ccnd_11')">Pain Management</a> - </li> - <li><a href="http://www.webmd.com/sexual-conditions/default.htm" onclick="return sl(this,'','hicb1-ccnd_12')">Sexual Conditions</a> - </li> - <li><a href="http://www.webmd.com/skin-problems-and-treatments/default.htm" - onclick="return sl(this,'','hicb1-ccnd_13')">Skin Problems</a> - </li> - <li><a href="http://www.webmd.com/sleep-disorders/default.htm" onclick="return sl(this,'','hicb1-ccnd_14')">Sleep Disorders</a> - </li> - </ul> - </div> - <div id="nav_1_2"> - <p>Featured Topics</p> - <ul role="menu"> - <li id="pb1" class="hide_link"><a href="http://www.webmd.com/allergies/ss/slideshow-bad-bugs" class="type_ss" - onclick="return sl(this,'','hicb1-ftpc_1')">Identifying Bugs and Their Bites <i></i></a> - </li> - <li id="pb2" class="hide_link"><a href="http://www.webmd.com/women/yeast-evaluator/default.htm" onclick="return sl(this,'','hicb1-ftpc_2')">Bothered by Yeast Infections?</a> - </li> - <li id="pb3" class="hide_link"><a href="http://www.webmd.com/pain-management/ss/slideshow-worst-shoes-for-your-feet" - class="type_ss" onclick="return sl(this,'','hicb1-ftpc_3')">The Worst Shoes for Your Feet <i></i></a> - </li> - </ul> - </div> - </div> - <div class="nav_dropdown_col_2a" id="symptom_checker_col"> - <div id="nav_1_3"><a href="http://www.webmd.com/symptoms/default.htm" id="symptom_checker_logo" - onclick="return sl(this,'','hicb1-schk_1')">WebMD Symptom Checker</a> - <p - class="bold">Health concern on your mind?</p> - <p>See what your medical symptoms could mean, and learn about possible conditions.</p> - <a - href="http://www.webmd.com/symptoms/default.htm" class="webmd-btn webmd-btn-pr webmd-btn-m" - onclick="return sl(this,'','hicb1-schk_sub')">Get Started</a> - </div> - </div> - <div class="nav_dropdown_col_3"> - <div id="nav_1_4"> - <p>Resources</p> - <ul role="menu"> - <li><a href="http://www.webmd.com/blogs/default.htm" onclick="return sl(this,'','hicb1-xchng_blg')"><strong>Second Opinion:</strong> Read expert perspectives on popular health topics.</a> - </li> - <li><a href="http://www.webmd.com/exchanges/default.htm" onclick="return sl(this,'','hicb1-xchng_cmty')"><strong>Communities:</strong> Connect with people like you, and get expert guidance on living a healthy life.</a> - </li> - <li><a href="http://www.webmd.com/health-insurance/default.htm" onclick="return sl(this,'','hicb1-ins_ctr')"><strong>Insurance Guide:</strong> Get ready for changes to your health care coverage.</a> - </li> - <li><a href="http://doctor.webmd.com" onclick="return sl(this,'','hicb1-phy_dir')"><strong>Physician Directory:</strong> Find a doctor in your area.</a> - </li> - </ul> - </div> - <div id="nav_1_6"> - <p>WebMD Pain Coach</p><a href="http://www.webmd.com/webmdpaincoachapp" onclick="return sl(this,'','hicb1-app_1')" - class="nav_image"><img src="http://img.webmd.com/dtmcms/live/webmd/consumer_assets/site_images/modules/masthead_test/50x50_pain_app.jpg" alt="WebMD pain app"/></a> - <a - href="http://www.webmd.com/webmdpaincoachapp" onclick="return sl(this,'','hicb1-app_1')">Track your pain levels, triggers, and treatments. Set goals and get tips - with our app for iPhone.</a> - </div> - </div> - </div> - </li> - <li id="nav_2" class="nav nav_reference"><a href="http://www.webmd.com/drugs/index-drugs.aspx" id="nav_link_2" - class="nav_link" aria-haspopup="true" onclick="return sl(this,'','hicb2-tab')">Drugs & Supplements</a> - <div - id="menu_2" class="nav_dropdown" role="menu" aria-expanded="false" aria-hidden="true"> - <div class="nav_dropdown_col_1a"> - <div id="nav_2_1"> - <p>Find Information About:</p> - <p class="bold">Drugs & Supplements</p> - <p>Get information and reviews on prescription drugs, over-the-counter medications, - vitamins, and supplements. Search by name or medical condition.</p> - <ul - role="menu" class="bottom_border"> - <li><a href="http://www.webmd.com/drugs/index-drugs.aspx" onclick="return sl(this,'','hicb2-drgsp_1')">Find or Review a Drug</a> - </li> - <li><a href="http://www.webmd.com/vitamins-supplements/default.aspx" onclick="return sl(this,'','hicb2-drgsp_2')">Find or Review a Vitamin or Supplement</a> - </li> - <li><a href="http://www.webmd.com/interaction-checker/default.htm" onclick="return sl(this,'','hicb2-drgsp_3')">Check for Drug Interactions</a> - </li> - </ul> - <p class="bold">Drug Basics & Safety</p> - <ul role="menu"> - <li><a href="http://www.webmd.com/a-to-z-guides/ss/slideshow-commonly-abused-drugs" - onclick="return sl(this,'','hicb2-drgsf_1')" class="type_ss">Commonly Abused Drugs <i></i></a> - </li> - <li><a href="http://www.webmd.com/drug-medication/medicationawareness/default.htm" - onclick="return sl(this,'','hicb2-drgsf_2')">What's Your Medication IQ?</a> - </li> - <li><a href="http://www.webmd.com/baby/taking-prescription-medications-during-pregnancy" - onclick="return sl(this,'','hicb2-drgsf_3')">Taking Medications During Pregnancy</a> - </li> - </ul> - </div> - </div> - <div id="pill_identifier_col" class="nav_dropdown_col_2a"> - <div id="nav_2_2" class="bottom_border pill_identifier_section"><a href="http://www.webmd.com/pill-identification/default.htm" id="pill_identifier_logo" - onclick="return sl(this,'','hicb2-pid_1')">WebMD Pill Identifier</a> - <p - class="bold">Having trouble identifying your pills?</p> - <p>Enter the shape, color, or imprint of your prescription or OTC drug. Our - <a - href="http://www.webmd.com/pill-identification/default.htm" onclick="return sl(this,'','hicb2-pid_2')">pill identification tool</a>will display pictures that you can compare - to your pill.</p><a href="http://www.webmd.com/pill-identification/default.htm" - class="webmd-btn webmd-btn-pr webmd-btn-m" onclick="return sl(this,'','hicb2-pid_sub')">Get Started</a> - </div> - <div id="nav_2_5" class="my_medicine_section"><a href="http://www.webmd.com/my-medicine/default.htm" id="my_medicine_logo" - onclick="return sl(this,'','hicb2-ic_2')">WebMD My Medicine</a> - <p>Save your medicine, check interactions, sign up for FDA alerts, create - family profiles and more.</p><a href="http://www.webmd.com/my-medicine/default.htm" - class="webmd-btn webmd-btn-pr webmd-btn-m" onclick="return sl(this,'','hicb2-ic_sub')">Get Started</a> - </div> - </div> - <div class="nav_dropdown_col_3"> - <div id="nav_2_3"> - <p>Drug News</p> - <ul role="menu"> - <li id="pb5" class="hide_link"><a href="http://www.webmd.com/news/default.htm" onclick="return sl(this,'','hicb2-dnws_1')">Get the Latest Drug Approvals & Alerts</a> - </li> - <li id="pb6" class="hide_link"><a href="http://www.webmd.com/fda/default.htm" onclick="return sl(this,'','hicb2-dnws_2')">Find FDA Consumer Updates</a> - </li> - <li id="pb7" class="hide_link"><a href="https://member.webmd.com/newsletters/newsletters.aspx" onclick="return sl(this,'','hicb2-dnws_3')">Sign up to receive WebMD's award-winning content delivered to your inbox.</a> - </li> - <li id="pb8" class="hide_pb_link"><a href="http://www.webmd.com/diet/news/20120627/fda-approves-diet-pill-belviq" - onclick="return sl(this,'','hicb2-dnws_4')">FDA Approves Diet Pill Belviq</a> - </li> - <li id="pb9" class="hide_pb_link"><a href="http://www.webmd.com/dvt/news/20120625/fda-delays-decision-on-blood-thinner-eliquis" - onclick="return sl(this,'','hicb2-dnws_5')">FDA Delays Decision on Blood Thinner Eliquis</a> - </li> - </ul> - </div> - <div id="nav_2_4"> - <p>WebMD Mobile Drug Information App</p><a href="http://www.webmd.com/webmdapp" - onclick="return sl(this,'','hicb2-app_1')" class="nav_image"><img src="http://img.webmd.com/dtmcms/live/webmd/consumer_assets/site_images/modules/masthead_test/50x50_webmd_mobile_app.png" alt="WebMD logo"/></a> - <a - href="http://www.webmd.com/webmdapp" onclick="return sl(this,'','hicb2-app_1')">Drug, supplement, and vitamin information on the go.</a> - </div> - </div> - </div> - </li> - <li id="nav_3" class="nav nav_health"><a href="http://www.webmd.com/living-healthy" id="nav_link_3" class="nav_link" - aria-haspopup="true" onclick="return sl(this,'','hicb3-tab')">Living Healthy</a> - <div - id="menu_3" class="nav_dropdown" role="menu" aria-expanded="false" aria-hidden="true"> - <div class="nav_dropdown_col_1b"> - <div id="nav_3_1"> - <p>Featured Content</p> - <div id="pb11" class="hide_link"> - <img src="http://img.webmd.com/dtmcms/live/webmd/consumer_assets/site_images/modules/masthead_test/210x130_healthy_living_feature.jpg" - alt="Women with hair wrapped in towel"/> <a href="http://www.webmd.com/healthy-beauty/ss/slideshow-best-kept-hair-secrets" - onclick="return sl(this,'','hicb3-ftr_1')" class="bold">Want luxurious locks?</a> - <p>WebMD cuts through the hype to reveal the best kept secrets for healthy - hair.</p><a href="http://www.webmd.com/healthy-beauty/ss/slideshow-best-kept-hair-secrets" - onclick="return sl(this,'','hicb3-ftr_1')" class="link_overlay" tabindex="-1"></a> - </div> - </div> - </div> - <div class="nav_dropdown_col_2b"> - <div id="nav_3_2"> - <p>Living Healthy Centers</p><span><a href="http://www.webmd.com/a-to-z-guides/healthy-living/default.htm" onclick="return sl(this,'','hicb3-chl_more')">View All</a></span> - <div - class="third right_border"><a href="http://www.webmd.com/living-healthy" onclick="return sl(this,'','hicb3-cdt_1')" - class="nav_image"><img src="http://img.webmd.com/dtmcms/live/webmd/consumer_assets/site_images/modules/masthead_test/110x70_healthy_living_diet_food.png" alt="grilled salmon and vegetables"/></a> - <p - class="bold more_bottom_margin">Diet, Food & Fitness</p> - <ul> - <li><a href="http://www.webmd.com/diet/default.htm" onclick="return sl(this,'','hicb3-cdt_1')">Weight Loss & Diet Plans</a> - </li> - <li><a href="http://www.webmd.com/food-recipes/default.htm" onclick="return sl(this,'','hicb3-cdt_2')">Food & Recipes</a> - </li> - <li><a href="http://www.webmd.com/fitness-exercise/default.htm" onclick="return sl(this,'','hicb3-cdt_3')">Fitness & Exercise</a> - </li> - </ul> - </div> - <div class="third right_border"><a href="http://www.webmd.com/living-healthy" onclick="return sl(this,'','hicb3-cbt_1')" - class="nav_image"><img src="http://img.webmd.com/dtmcms/live/webmd/consumer_assets/site_images/modules/masthead_test/110x70_healthy_living_beauty_balance.png" alt="man and woman smiling"/></a> - <p - class="bold">Beauty, Balance & Love</p> - <ul> - <li><a href="http://www.webmd.com/healthy-beauty/default.htm" onclick="return sl(this,'','hicb3-cbt_1')">Healthy Beauty</a> - </li> - <li><a href="http://www.webmd.com/balance/default.htm" onclick="return sl(this,'','hicb3-cbt_2')">Health & Balance</a> - </li> - <li><a href="http://www.webmd.com/sex-relationships/default.htm" onclick="return sl(this,'','hicb3-cbt_3')">Sex & Relationships</a> - </li> - <li><a href="http://www.webmd.com/oral-health/default.htm" onclick="return sl(this,'','hicb3-cbt_4')">Oral Care</a> - </li> - </ul> - </div> - <div class="third"><a href="http://www.webmd.com/living-healthy" onclick="return sl(this,'','hicb3-clw_1')" - class="nav_image"><img src="http://img.webmd.com/dtmcms/live/webmd/consumer_assets/site_images/modules/masthead_test/110x70_healthy_living_women_men.png" alt="women doing yoga"/></a> - <p - class="bold more_bottom_margin">Living Well</p> - <ul> - <li><a href="http://www.webmd.com/women/default.htm" onclick="return sl(this,'','hicb3-clw_1')">Women's Health</a> - </li> - <li><a href="http://www.webmd.com/men/default.htm" onclick="return sl(this,'','hicb3-clw_2')">Men's Health</a> - </li> - <li><a href="http://www.webmd.com/healthy-aging/default.htm" onclick="return sl(this,'','hicb3-clw_3')">Aging Well</a> - </li> - <li><a href="http://www.webmd.com/teens/default.htm" onclick="return sl(this,'','hicb3-clw_4')">Teens</a> - </li> - </ul> - </div> - </div> - </div> - <div class="nav_dropdown_col_3"> - <div id="nav_3_3"> - <p>Featured Topics</p> - <ul> - <li id="pb13" class="hide_link"><a href="http://www.webmd.com/diet/calc-bmi-plus" onclick="return sl(this,'','hicb3-ftpc_1')">BMI Calculator: Get Personalized Results</a> - </li> - <li id="pb14" class="hide_link"><a href="http://www.webmd.com/diet/healthtool-portion-size-plate" onclick="return sl(this,'','hicb3-ftpc_2')">Portion Size Plate: Easy Serving Size Guide</a> - </li> - <li id="pb15" class="hide_link"><a href="http://www.webmd.com/sex/birth-control/default.htm" onclick="return sl(this,'','hicb3-ftpc_3')">Your Birth Control Options</a> - </li> - <li id="pb16" class="hide_link"><a href="http://www.webmd.com/men/ss/slideshow-secrets-women-wish-you-knew" - class="type_ss" onclick="return sl(this,'','hicb3-ftpc_4')">19 Secrets Men Wish Women Knew <i></i></a> - </li> - <li id="pb17" class="hide_link"><a href="http://www.webmd.com/teens/rm-quiz-crazy-dreams" onclick="return sl(this,'','hicb3-ftpc_5')">Quiz: Weird, Crazy Dreams</a> - </li> - <li id="pb18" class="hide_pb_link"><a href="http://www.webmd.com/diet/food-fitness-planner/default.htm" onclick="return sl(this,'','hicb3-ftpc_6')">Food & Fitness Planner: Personalize Your Weight Loss Plan</a> - </li> - </ul> - </div> - <div id="nav_3_4"> - <p>WebMD Allergy App for iPhone</p><a href="http://www.webmd.com/allergy-app" - onclick="return sl(this,'','hicb3-app_1')" class="nav_image"><img src="http://img.webmd.com/dtmcms/live/webmd/consumer_assets/site_images/article_thumbnails/other/allergy_app_other/50x50_allergy_app_other.jpg" alt="WebMD Allergy App logo"/></a> - <a - href="http://www.webmd.com/allergy-app" onclick="return sl(this,'','hicb3-app_1')">Fight allergies with daily forecasts, local alerts, and personalized tips.</a> - </div> - </div> - </div> - </li> - <li id="nav_4" class="nav nav_health"><a href="http://www.webmd.com/family-pregnancy" id="nav_link_4" class="nav_link" - aria-haspopup="true" onclick="return sl(this,'','hicb4-tab')">Family & Pregnancy</a> - <div - id="menu_4" class="nav_dropdown" role="menu" aria-expanded="false" aria-hidden="true"> - <div class="nav_dropdown_col_1b"> - <div id="nav_4_1"> - <p>Featured Content</p> - <div id="pb20" class="hide_link"> - <img src="http://img.webmd.com/dtmcms/live/webmd/consumer_assets/site_images/modules/masthead_test/210x130_family_feature.jpg" - alt="Family at airport"/> <a href="http://www.webmd.com/vaccines/ss/slideshow-travel-health" onclick="return sl(this,'','hicb4-ftr_1')" - class="bold">Traveling abroad?</a> - <p>Protect yourself and your family by learning which health precautions - and vaccines are advised for your destination.</p><a href="http://www.webmd.com/vaccines/ss/slideshow-travel-health" - onclick="return sl(this,'','hicb4-ftr_1')" class="link_overlay" tabindex="-1"></a> - </div> - </div> - </div> - <div class="nav_dropdown_col_2b"> - <div id="nav_4_2"> - <p>Family and Pregnancy Centers</p> - <div class="third right_border"><a href="http://www.webmd.com/baby" onclick="return sl(this,'','hicb4-cpg_1')" - class="nav_image"><img src="http://img.webmd.com/dtmcms/live/webmd/consumer_assets/site_images/modules/masthead_test/110x70_family_pregnancy.png" alt="pregnant woman"/></a> - <a - href="http://www.webmd.com/baby" onclick="return sl(this,'','hicb4-cpg_1')" - class="heading">Pregnancy</a> - <ul> - <li><a href="http://www.webmd.com/baby/guide/getting-pregnant" onclick="return sl(this,'','hicb4-cpg_2')">Trying to Conceive</a> - </li> - <li><a href="http://www.webmd.com/baby/guide/first-trimester" onclick="return sl(this,'','hicb4-cpg_3')">First Trimester</a> - </li> - <li><a href="http://www.webmd.com/baby/guide/health-baby-second-trimester" - onclick="return sl(this,'','hicb4-cpg_4')">Second Trimester</a> - </li> - <li><a href="http://www.webmd.com/baby/guide/third-trimester" onclick="return sl(this,'','hicb4-cpg_5')">Third Trimester</a> - </li> - </ul> - </div> - <div class="third right_border"><a href="http://www.webmd.com/parenting/default.htm" onclick="return sl(this,'','hicb4-cpt_1')" - class="nav_image"><img src="http://img.webmd.com/dtmcms/live/webmd/consumer_assets/site_images/modules/masthead_test/110x70_family_parenting.png" alt="mom, dad, and baby"/></a> - <a - href="http://www.webmd.com/parenting/default.htm" onclick="return sl(this,'','hicb4-cpt_1')" - class="heading">Parenting</a> - <ul> - <li><a href="http://www.webmd.com/parenting/baby/default.htm" onclick="return sl(this,'','hicb4-cpt_2')">Newborn & Baby</a> - </li> - <li><a href="http://www.webmd.com/children/default.htm" onclick="return sl(this,'','hicb4-cpt_3')">Children's Health</a> - </li> - <li><a href="http://www.webmd.com/children/vaccines/default.htm" onclick="return sl(this,'','hicb4-cpt_4')">Children's Vaccines</a> - </li> - <li><a href="http://www.webmd.com/parenting/raising-fit-kids/default.htm" - onclick="return sl(this,'','hicb4-cpt_5')">Raising Fit Kids</a> - </li> - </ul> - </div> - <div class="third"><a href="http://www.webmd.com/pets/default.htm" onclick="return sl(this,'','hicb4-cpet_1')" - class="nav_image"><img src="http://img.webmd.com/dtmcms/live/webmd/consumer_assets/site_images/modules/masthead_test/110x70_family_pets.png" alt="Cat and dog on grass"/></a> - <a - href="http://www.webmd.com/pets/default.htm" onclick="return sl(this,'','hicb4-cpet_1')" - class="heading">Pets</a> - <ul> - <li><a href="http://www.webmd.com/pets/cats/default.htm" onclick="return sl(this,'','hicb4-cpet_2')">Healthy Cats</a> - </li> - <li><a href="http://www.webmd.com/pets/dogs/default.htm" onclick="return sl(this,'','hicb4-cpet_3')">Healthy Dogs</a> - </li> - </ul> - </div> - </div> - </div> - <div class="nav_dropdown_col_3"> - <div id="nav_4_3"> - <p>Featured Topics</p> - <ul> - <li id="pb22" class="hide_link"><a href="http://www.webmd.com/baby/guide/pregnancy-am-i-pregnant" onclick="return sl(this,'','hicb4-ftpc_1')">Know the Signs of Early Pregnancy?</a> - </li> - <li id="pb23" class="hide_link"><a href="http://www.webmd.com/baby/rm-quiz-pregnancy-food-facts" onclick="return sl(this,'','hicb4-ftpc_2')">Test Your Smarts: What's Safe to Eat When You're Pregnant?</a> - </li> - <li id="pb24" class="hide_link"><a href="http://www.webmd.com/baby/ss/slideshow-fetal-development" class="type_ss" - onclick="return sl(this,'','hicb4-ftpc_3')">Peek Inside the Womb to See How Baby Grows <i></i></a> - </li> - <li id="pb25" class="hide_link"><a href="http://www.webmd.com/children/video/healthy-school-lunches" class="type_vid" - onclick="return sl(this,'','hicb4-ftpc_4')">Healthy School Lunches <i></i></a> - </li> - <li id="pb26" class="hide_link"><a href="http://www.webmd.com/parenting/raising-fit-kids/mood/rm-quiz-how-to-prevent-a-toddler-meltdown" - onclick="return sl(this,'','hicb4-ftpc_5')">Quiz: Know How to Avoid The Next Toddler Meltdown?</a> - </li> - <li id="pb27" class="hide_pb_link"><a href="http://www.webmd.com/vaccinetracker/" onclick="return sl(this,'','hicb4-ftpc_6')">WebMD Vaccine Tracker: Manage Vaccinations for Your Entire Family</a> - </li> - </ul> - </div> - <div id="nav_4_4"> - <p>WebMD Pregnancy App for iPhone</p><a href="http://www.webmd.com/pregnancyapp" - onclick="return sl(this,'','hicb4-app_1')" class="nav_image"><img src="http://img.webmd.com/dtmcms/live/webmd/consumer_assets/site_images/article_thumbnails/other/pregnancy_app_other/50x50_pregnancy_app_other.jpg" alt="WebMD Pregnancy App logo"/></a> - <a - href="http://www.webmd.com/pregnancyapp" onclick="return sl(this,'','hicb4-app_1')">The big day is coming! Get organized and track baby's weekly development.</a> - </div> - </div> - </div> - </li> - <li id="nav_5" class="nav nav_news"><a href="http://www.webmd.com/news/default.htm" id="nav_link_5" class="nav_link" - aria-haspopup="true" onclick="return sl(this,'','hicb5-tab')">News & Experts</a> - <div - id="menu_5" class="nav_dropdown" role="menu" aria-expanded="false" aria-hidden="true"> - <div class="nav_dropdown_col_1c"> - <div id="nav_5_1"> - <p>News</p><span><a href="http://www.webmd.com/news/default.htm" onclick="return sl(this,'','hicb5-news_more')">View All</a></span> - <div - class="nav_block hide_link" id="pb29"><a href="http://www.webmd.com/news/default.htm" class="nav_image" onclick="return sl(this,'','hicb5-news_1')"><img src="http://img.webmd.com/dtmcms/live/webmd/consumer_assets/site_images/modules/masthead_test/110x70_webmd_1.jpg" alt="WebMD logo"/></a> - <a - href="http://www.webmd.com/news/default.htm" onclick="return sl(this,'','hicb5-news_1')" - class="shorter">Today's Top Health Headlines</a> - </div> - <div class="nav_block hide_link" id="pb30"><a href="http://www.webmd.com/news/default.htm" class="nav_image" onclick="return sl(this,'','hicb5-news_2')"><img src="http://img.webmd.com/dtmcms/live/webmd/consumer_assets/site_images/modules/masthead_test/110x70_webmd_1.jpg" alt="WebMD logo"/></a> - <a - href="http://www.webmd.com/news/default.htm" onclick="return sl(this,'','hicb5-news_2')" - class="shorter">Get the Latest Drug Approvals & Alerts</a> - </div> - <ul> - <li id="pb31" class="hide_link"><a href="http://www.webmd.com/fda/default.htm" onclick="return sl(this,'','hicb5-news_3')">Find FDA Consumer Updates</a> - </li> - <li id="pb32" class="hide_link"><a href="http://www.webmd.com/fda/slideshow-fda-mobile-laboratories" class="type_ss" - onclick="return sl(this,'','hicb5-news_4')">On The Road Again: FDA Mobile Laboratories <i></i></a> - </li> - <li id="pb33" class="hide_link"><a href="https://member.webmd.com/newsletters/newsletters.aspx" onclick="return sl(this,'','hicb5-news_5')">Sign up to receive WebMD's award-winning content delivered to your inbox.</a> - </li> - </ul> - </div> - </div> - <div id="wide_header"> - <p>WebMD Health Experts and Community</p> - </div> - <div class="nav_dropdown_col_2c"> - <div id="nav_5_2"> - <p>Talk to health experts and other people like you in WebMD's Communities. - It's a safe forum where you can create or participate in support groups - and discussions about health topics that interest you.</p> - <div class="nav_block"><a href="http://www.webmd.com/blogs/default.htm" onclick="return sl(this,'','hicb5-xchng_blg')" - class="nav_image"><img src="http://img.webmd.com/dtmcms/live/webmd/consumer_assets/site_images/modules/masthead_test/50x50_expert.png" alt=""/></a> - <p - class="bold">WebMD Second Opinion</p><a href="http://www.webmd.com/blogs/default.htm" - onclick="return sl(this,'','hicb5-xchng_blg')">Read expert perspectives on popular health topics.</a> - </div> - <div class="nav_block"><a href="http://www.webmd.com/exchanges/default.htm" onclick="return sl(this,'','hicb5-xchng_cmty')" - class="nav_image"><img src="http://img.webmd.com/dtmcms/live/webmd/consumer_assets/site_images/modules/masthead_test/50x50_community.png" alt=""/></a> - <p - class="bold">WebMD Communities</p><a href="http://www.webmd.com/exchanges/default.htm" - onclick="return sl(this,'','hicb5-xchng_cmty')">Connect with people like you, and get expert guidance on living a healthy life.</a> - </div> - </div> - </div> - <div class="nav_dropdown_col_3"> - <div id="nav_5_3"><a href="http://answers.webmd.com/" id="webmd_answers_logo" onclick="return sl(this,'','hicb5-ans_1')">WebMD Answers</a> - <p>Got a health question? Get answers provided by leading organizations, - doctors, and experts.</p><a href="http://answers.webmd.com/" class="webmd-btn webmd-btn-pr webmd-btn-m" - onclick="return sl(this,'','hicb5-ans_sub')">Get Answers</a> - </div> - <div id="nav_5_4"> - <p>WebMD Newsletters</p><a href="https://member.webmd.com/newsletters/newsletters.aspx" - onclick="return sl(this,'','hicb5-nwsltr_1')" class="nav_image"><img src="http://img.webmd.com/dtmcms/live/webmd/consumer_assets/site_images/modules/masthead_test/50x50_newsletter.png" alt="closeup of newsletter"/></a> - <a - href="https://member.webmd.com/newsletters/newsletters.aspx" onclick="return sl(this,'','hicb5-nwsltr_1')">Sign up to receive WebMD's award-winning content delivered to your inbox.</a> - </div> - </div> - </div> - </li> - </ul> - </nav> - <div id="authorization"> - <div id="login_tab-b"></div> - <div id="why_webmd"><a href="https://member.webmd.com/signin" onclick="return sl(this,'','reg-login')">Sign In</a>| - <a - href="https://member.webmd.com/register" onclick="return sl(this,'','reg-signup')">Sign Up</a>| <a href="https://member.webmd.com/subscribe" onclick="return sl(this,'','nl-mast_sub')">Subscribe</a> - </div> - <div id="logged_in_text"><a href="https://member.webmd.com/applications.aspx" onclick="return sl(this,'','mymd_mt')" - id="logged_in_logo"><span class="jawsonly">My WebMD</span></a><span id="greeting"></span> - </div> - <div id="logged_in"><a href="#" id="logged_in_tab" aria-haspopup="true">Show Menu</a> - <div - id="logged_in_dropdown" aria-expanded="false" aria-hidden="true"> - <ul role="menu"> - <li><a href="https://member.webmd.com/applications.aspx" onclick="return sl(this,'','ov-mymd_mt')">My Tools</a> - </li> - <li class="bottom_border"><a href="https://member.webmd.com/bookmarks.aspx" onclick="return sl(this,'','ov-mymd_mybkmrk')">My WebMD Pages</a> - </li> - <li class="bottom_border"><a href="https://member.webmd.com/profile.aspx" onclick="return sl(this,'','ov-mymd_ma')">My Account</a> - </li> - <li><a href="http://www.webmd.com/signout.asp" onclick="return sl(this,'','ov-mymd_so')">Sign Out</a> - </li> - </ul> - </div> - </div> - </div> - <div id="social_icons"><a class="facebook" href="http://www.webmd.com/click?url=http%3A//www.facebook.com/WebMD%3Fref=ts" - onclick="return sl(this,'nw','soc_fb-h')">Facebook</a><a href="http://www.webmd.com/click?url=http%3A//twitter.com/WebMD" - class="twitter" onclick="return sl(this,'nw','soc_tw-h')">Twitter</a> - <a - href="http://www.webmd.com/click?url=http://pinterest.com/webmd/" class="pinterest" - onclick="return sl(this,'nw','soc_pn-h')">Pinterest</a> - </div> - <div id="divider"></div> - </header> - <script type="text/javascript"> - if(window.webmd && window.webmd.p && window.webmd.p.masthead) { - webmd.p.masthead.init(); - } - </script> - </div> - </div> - <div id="mainContentContainer_area"> - <div class="bottomBackground_fmt"> - <div id="breadcrumb_ctr"> - <div id="ContentPane3"> - <div id="breadcrumb_rdr"> <span class="bc_0"> - <a href="/www/">WebMD Home</a> - <img src="http://img.webmd.com/dtmcms/live/webmd/consumer_assets/site_images/layout/shared/divider_breadcrumb.gif" alt="next page" width="6" height="10" align="absmiddle"/> - </span> - <span class="bc_1"> - <a href="http://www.webmd.com/allergies/default.htm" onclick="return sl(this,'','brdcrmb');">Allergies Health Center</a> <img src="http://img.webmd.com/dtmcms/live/webmd/consumer_assets/site_images/layout/shared/divider_breadcrumb.gif" alt="next page" width="6" height="10" align="absmiddle"/> </span> - - <span - class="bc_2"> <a href="http://www.webmd.com/allergies/news/default.htm" onclick="return sl(this,'','brdcrmb');" - class="breadcrumbActive">Allergies News</a> - </span> - </div> - <div id="headerLinks_email" class="headerLinks_fmt"> <a href="#" title="Email this page to a friend" class="triggerEmailOverlay" - onclick="wmdPageLink('email-friend_link');return false;">Email a Friend</a> - - </div> - <div id="headerLinks_print" class="headerLinks_fmt"> <a rel="nofollow" href="?print=true" onclick="printWindow(); ctrs('prtfrnd'); return false" - title="Print this article">Print Article</a> - - <script> - if (pf_param == "true") { - printElements(); - } - </script> - </div> - <div id="ht-nav"> - <p>Allergies Trends:</p> - <ul id="ht-nav-list"> - <li id="first"> <a href="http://www.webmd.com/allergies/nonallergic-rhinitis" onclick="return sl(this,'','hot-trends_1');">Rhinitis</a> - - </li> - <li> <a href="http://www.webmd.com/allergies/guide/allergy-shots" onclick="return sl(this,'','hot-trends_2');">Allergy Shots</a> - - </li> - <li> <a href="http://www.webmd.com/allergies/guide/poison-ivy-oak-sumac" onclick="return sl(this,'','hot-trends_3');">Poison Oak</a> - - </li> - <li> <a href="http://www.webmd.com/allergies/guide/casein-allergy-overview" - onclick="return sl(this,'','hot-trends_4');">Casein</a> - - </li> - <li> <a href="http://www.webmd.com/allergies/guide/nasal-polyps-symptoms-and-treatments" - onclick="return sl(this,'','hot-trends_5');">Nasal Polyps</a> - - </li> - <li> <a href="http://www.webmd.com/allergies/guide/nut-allergy" onclick="return sl(this,'','hot-trends_6');">Nut Allergy</a> - - </li> - </ul> - </div> - </div> - </div> - <div id="contentBackground_fmt"> - <div id="mainContent_ThirdCol_ctr"> - <div id="ContentPane4"> - <div class="titlebar" id="hdr"> - <div class="tb_main"> - <h1>Allergies Health Center</h1> - - </div> - </div> - <script type="text/javascript"> - (function() { - var that = function() { - var h = $("#mainContent_ThirdCol_ctr").outerHeight(); - $("#navColumn_area").css('margin-top', '-'+h+'px'); - }; - try{ that(); } catch(e) {} - $(window).load( function() { try{ that(); } catch(e) {} } ); - })(); - </script> - </div> - </div> - <div id="mainContent_area"> - <div id="mainContent_ctr"> - <div id="middleContent_fmt"> - <div id="ContentPane5"> - <div class="pop_toolst_rdr" id="lln-toolsres"> - <script type="text/javascript"> - //Removes Popular Tools from TOC pages or where www.webmd.com is followed by "news-features" - /* :: 2015.02.04 rewrite :: */ - // Create array(s) of the ID's to add the Tools module to - var s_topic = s_topic || "", s_business_reference = s_business_reference || "", s_publication_source = s_publication_source ||"", s_channel_health = s_channel_health || "", cssBlockOverride = ['Glossary', 'Nav - A-Z page', 'TOC', 'TOC - Channel', 'TOC - Guide', 'TOC - Mini-Center Topic', 'WebMD Image Collection'], sTopicException = ['7002','7006','7022','7023','7024']; - - //if the s_publication_source is !== to the array OR s_business_reference is !== to the array OR s_channel_health is === to the array - if ( cssBlockOverride.indexOf(s_publication_source) === -1 || ssBlockOverride.indexOf(s_business_reference) === -1 || s_channel_health === 'Health Insurance and Medicare') { - // if the s_topic ID's first number is not equal to 7 OR the s_topic ID is == the array AND s_business_reference != the array - if ((s_topic.substring(0, 1) !== "7" || sTopicException.indexOf(s_topic) >= 0) && cssBlockOverride.indexOf(s_business_reference) === -1) { - $('.pop_toolst_rdr').css('display', 'block'); - webmd.oas = window.webmd.oas || {}; - webmd.oas.mapping = window.webmd.oas.mapping || {}; - webmd.oas.mapping['oas_tools_and_resources'] = ['x56', 'x57', 'x58', 'x59', 'x60', 'x61']; - } - } - </script> - <div class="pop_toolst_top_fmt"> - <h2>Tools & Resources</h2> - <ul> - <li id="x56"><a href="http://www.webmd.com/allergies/suspect-food-allergy" onclick="return sl(this,'','lln-toolsres_1');">Think You Have a Food Allergy?</a> - </li> - <li id="x57"><a href="http://www.webmd.com/allergies/ss/slideshow-allergy-medicines" - class="type_ss" onclick="return sl(this,'','lln-toolsres_2');">Essential Items for Allergy Relief <i> </i></a> - </li> - <div class="breaker_fmt"></div> - <li id="x58"><a href="http://www.webmd.com/allergies/ss/slideshow-pets-and-allergies" - class="type_ss" onclick="return sl(this,'','lln-toolsres_3');">Pets and Allergies<i> </i></a> - </li> - <li id="x59"><a href="http://www.webmd.com/allergies/allergy-relief-10/slideshow-allergy-myths-facts" - class="type_ss" onclick="return sl(this,'','lln-toolsres_4');">Allergies: Myths vs. Facts<i> </i></a> - </li> - <div class="breaker_fmt"></div> - <li id="x60"><a href="http://www.webmd.com/allergies/how-to-control-allergens-in-your-home" - onclick="return sl(this,'','lln-toolsres_5');">Controlling Home Allergies</a> - </li> - <li id="x61"><a href="http://www.webmd.com/allergies/video/indoor-allergies-in-the-office" - class="type_vid" onclick="return sl(this,'','lln-toolsres_6');">Allergies in the Workplace<i> </i></a> - </li> - <div class="breaker_fmt"></div> - </ul> - <div class="breaker"></div> - </div> - <script class="oas_template" id="oas_tools_and_resources" type="text/html"> - <a class="{type_prefix}{type}" onclick="return sl(this,'','lln-toolsres_{link_position}');" href="{href}">{alt}{i_tag}</a> - </script> - <div class="pop_toolst_bot_fmt"></div> - </div> - <script type="text/javascript"> - if (window.$) { - $(document).ready(function() { - // produce array from value(s) of 'secTopId' - var mySplitResultsecTopId = secTopId.split("|"); - var wloop = mySplitResultsecTopId.length; - var sTopicException = ['7002','7006','7022','7023','7024']; - // Hides the Pop Tools list on pages with a sensitive secondary topic id. - // Updated 2015.02.04 by David Ware - for (i = 0; i < wloop; i++) { - // if this is a sensitive topic and the topicId is not in the list - if (mySplitResultsecTopId[i].substring(0,1) === '7' && sTopicException.indexOf(mySplitResultsecTopId[i]) === -1){ - $('.pop_toolst_rdr').css('display','none'); - } - } - //Hides the Pop Tools list on Actionset Pages - if ($('.actionset').length) { - $('.pop_toolst_rdr').css('display','none'); - } - }); - } - </script> - <div class="article_rdr"> - <div class="share_bar"> - <script> - webmd.m.share.init(); - </script> - </div> - <div class="font_sizer_fmt rs_skip"> - <div class="font_sizer_text_fmt">Font Size</div> - <div class="font_sizer_001_fmt"></div> - <div id="fs_01" class="font_sizer_002b_fmt"> <a class="copyA_fmt" title="Small font" href="javascript:setClass('textArea', 'copyNormal');javascript:setClass('fs_01', 'font_sizer_002b_fmt');javascript:setClass('fs_02', 'font_sizer_002a_fmt');javascript:setClass('fs_03', 'font_sizer_002a_fmt');">A</a> - - </div> - <div id="fs_02" class="font_sizer_002a_fmt"> <a class="copyB_fmt" title="Medium font" href="javascript:setClass('textArea', 'copyMedium');javascript:setClass('fs_01', 'font_sizer_002a_fmt');javascript:setClass('fs_02', 'font_sizer_002b_fmt');javascript:setClass('fs_03', 'font_sizer_002a_fmt');">A</a> - - </div> - <div id="fs_03" class="font_sizer_002a_fmt"> <a class="copyC_fmt" title="Large font" href="javascript:setClass('textArea', 'copyLarge');javascript:setClass('fs_01', 'font_sizer_002a_fmt');javascript:setClass('fs_02', 'font_sizer_002a_fmt');javascript:setClass('fs_03', 'font_sizer_002b_fmt');">A</a> - - </div> - <div class="font_sizer_003_fmt"></div> - </div> - <div class="font_sizer"> - <script> - webmd.m.fontSizer.init(); - </script> - </div> - <script type="text/javascript" src="http://img.webmd.com/dtmcms/live/webmd/PageBuilder_Assets/JS_static/widgets/webmd.m.add_article_save.js"> -</script> - <div id="readspeaker_area" style="display: none;"> - <div id="readspeaker_button1" class="rs_skip"> <a accesskey="L" href="http://app.readspeaker.com/cgi-bin/rsent?customerid=5841&lang=en_us&readid=textArea" - target="_blank" onclick="readpage(this.href, 'xp1'); return false;"> - <img src="http://img.webmd.com/dtmcms/live/webmd/consumer_assets/site_images/modules/article/readspeaker/listen_en_us.gif" alt="Listen to this page using ReadSpeaker" title="Listen to this page using ReadSpeaker"/> - </a> - - </div> - <script src="http://img.webmd.com/dtmcms/live/webmd/consumer_assets/site_images/javascript/readspeaker/en.js" - type="text/javascript"> -</script> - <script type="text/javascript"> - (function(){ - $(document).ready(function(){ - webmd.readspeakerPrep.init({pages:5}); - }); - })(); - </script> - <div id="xp1"></div> - </div> - <script type="text/javascript"> - $(function(){ - var el = $("#readspeaker_area"); - if(el){ - if(s_sponsor_program == "" || typeof(s_sponsor_program) == 'undefined' ){ - el.addClass('non-spon-listen'); - el.find('a').append("Listen"); - el.css("display", "block"); - } - } - }); - </script> - <div id="textArea" class="copyNormal"> - <h2>Babies Who Eat Peanuts Early May Avoid Allergy</h2> - - <div class="subhead_fmt"></div> - <div class="author_fmt">By <a rel="author" href="http://www.webmd.com/brenda-goodman" onclick="return sl(this,'','prog-lnk');">Brenda Goodman, MA</a> - <br/>WebMD Health News</div> - <div class="reviewedBy_fmt">Reviewed by <a onclick="return sl(this,'','prog-lnk');" href="http://www.webmd.com/hansa-bhargava">Hansa D. Bhargava, MD</a> - </div> - <div class="clearBoth_fmt clearing-div"></div> - <h3></h3> - - <p></p> - <p>Feb. 23, 2015 -- Life-threatening peanut allergies have mysteriously been - on the rise in the past decade, with little hope for a cure.</p> - <p xmlns:xalan="http://xml.apache.org/xalan">But a groundbreaking new study may offer a way to stem that rise, while - another may offer some hope for those who are already allergic.</p> - <p>Parents have been told for years to avoid giving foods containing peanuts - to babies for fear of triggering an allergy. Now research shows the opposite - is true: Feeding babies snacks made with peanuts before their first birthday - appears to prevent that from happening.</p> - <p>The study is published in the <i>New England Journal of Medicine,</i> and - it was presented at the annual meeting of the American Academy of Allergy, - Asthma and Immunology in Houston. It found that among children at high - risk for getting peanut allergies, eating peanut snacks by 11 months of - age and continuing to eat them at least three times a week until age 5 - cut their chances of becoming allergic by more than 80% compared to kids - who avoided peanuts. Those at high risk were already allergic to egg, they - had the skin condition <a href="http://www.webmd.com/skin-problems-and-treatments/eczema/default.htm" - onclick="return sl(this,'','embd-lnk');" class="Article">eczema</a>, or - both.</p> - <p>Overall, about 3% of kids who ate peanut butter or peanut snacks before - their first birthday got an allergy, compared to about 17% of kids who - didn’t eat them.</p> - <p>“I think this study is an astounding and groundbreaking study, really,” - says Katie Allen, MD, PhD. She's the director of the Center for Food and - Allergy Research at the Murdoch Children’s Research Institute in Melbourne, - Australia. Allen was not involved in the research.</p> - <p>Experts say the research should shift thinking about how kids develop - <a - href="http://www.webmd.com/allergies/guide/food-allergy-intolerances" onclick="return sl(this,'','embd-lnk');" - class="Article">food allergies</a>, and it should change the guidance doctors give to - parents.</p> - <p>Meanwhile, for children and adults who are already <a href="http://www.webmd.com/allergies/guide/nut-allergy" - onclick="return sl(this,'','embd-lnk');" class="Article">allergic to peanuts</a>, - another study presented at the same meeting held out hope of a treatment.</p> - <p>A new skin patch called Viaskin allowed people with peanut allergies to - eat tiny amounts of peanuts after they wore it for a year.</p> - <p></p> <a name="1"> </a> - - <h3>A Change in Guidelines?</h3> - - <p>Allergies to peanuts and other foods are on the rise. In the U.S., more - than 2% of people react to peanuts, a 400% increase since 1997. And reactions - to peanuts and other tree nuts can be especially severe. Nuts are the main - reason people get a life-threatening problem called <a href="http://www.webmd.com/allergies/guide/anaphylaxis" - onclick="return sl(this,'','embd-lnk');" class="Article">anaphylaxis</a>.</p> - </div> - </div> - <div class="attribution_rdr"> - <script type="text/javascript"> - var pagination_title=new Array(); - var pagination_current=1; - - pagination_title[1]=""; - pagination_title[2]="A Change in Guidelines? continued..."; - pagination_title[3]="Gathering Evidence"; - pagination_title[4]="‘Landmark’ Results"; - pagination_title[5]="More Hope on the Horizon continued..."; - </script> - <div class="pagination_fmt"> - <div class="left_fmt"></div> - <div class="right_fmt"> <span class="current_fmt">1</span> - <span class="pipe_fmt">|</span> - <a href="?page=2" - title="Page 2" onclick="return sl(this,'','pagenum-art_2');">2</a> - - <span - class="pipe_fmt">|</span> <a href="?page=3" title="Page 3" onclick="return sl(this,'','pagenum-art_3');">3</a> - - <span - class="pipe_fmt">|</span> <a href="?page=4" title="Page 4" onclick="return sl(this,'','pagenum-art_4');">4</a> - - <span - class="pipe_fmt">|</span> <a href="?page=5" title="Page 5" onclick="return sl(this,'','pagenum-art_5');">5</a> - - <div - class="outline_fmt right"> <a href="?page=2" onclick="return sl(this,'','pagenum-art_next');">Next Page <span class="symbol_fmt">></span></a> - - </div> - </div> - </div> - </div> - <div class="moduleSpacer_rdr"></div> - <div id="remoteAd_rdr"> - <div class="centerAd_r1_rdr"> - <div class="centerAd_BG_fmt"> - <div class="conta" style="color:#737373; clear:both; display:none;">Continue reading below...</div> - <div class="remoteAd_top_fmt"></div> - <div id="remoteAd_fmt" class="remoteAd_BG_fmt"> - <div class="ad_placeholder"></div> - </div> - <div class="remoteAd_bottom_fmt"></div> - </div> - </div> - <div class="moduleSpacer_rdr"></div> - </div> - <script type="text/javascript"> - /* using this to pop up interstitial instead of /click as going to the /click URL with all the other parameters becomes an encoding issue */ - function popInterstitial() { - var interstitial = window.open("/privacy_window.html","privacy_window","width=325,height=175,resizable=no,toolbar=no,left=350,top=300"); - if (interstitial) { - interstitial.focus(); - - } - return false; - } - </script> - <div id="triggerFlyin"></div> - <script type="text/javascript"> - require(['fly_in/1/fly_in'], function(flyIn){ - flyIn.init('#triggerFlyin'); - }); - </script> - <div class="moduleSpacer_rdr"></div> - <script language="javascript1.2" type="text/javascript"> - function getPubType() { - return "editorial"; - } - - function checkPartners(){ - - /* Array of Partner Names */ - var partnerNames=[ - "Good Housekeeping", - "Redbook", - "Esquire", - "Country Living", - "Marie Claire", - "Oxmoor House", - "\"Health", - "Southern Living", - "Psychology Today", - "EatingWell", - "DrGreene.com", - "Men's Health", - "Women's Health", - "Prevention", - "eDiets", - "soul\" Magazine", - "Runner's World", - "Men's Fitness\" Magazine", - "Shape\" Magazine", - "Fit Pregnancy\" Magazine", - "Natural Health\" Magazine", - "\"Best Life\" Magazine", - "\"Cure\" Magazine", - "WebMD Veterinary Reference from the ASPCA", - "WebMD Veterinary Reference from ASPCA Virtual Pet Behaviorist", - "COPD Foundation", - "Elle", - "Woman's Day" - ] - - /* Array of names that go with files in partners node */ - var partnerScripts=[ - "goodHousekeeping", - "redbook", - "esquire", - "countryLiving", - "marieClaire", - "cookingLight", - "health", - "southernLiving", - "psychToday", - "eatingWell", - "drGreene", - "mensHealth", - "womensHealth", - "prevention", - "eDiets", - "bodySoul", - "runnersWorld", - "mensFitness", - "shapeMag", - "fitPregnancy", - "naturalHealth", - "bestLife", - "cure", - "aspca", - "aspca", - "copdf", - "elle", - "womansDay" - ] - - /* Variables for whether a partner exists and which one in the array it is */ - var isThere; - var whichOne = -1; - - /* Pulls the pub source out of the XML */ - var pubSource = 'WebMD Medical News'; - - /* Runs through the different partners and sees if one of them exists in the pub source */ - for (var i=0; i <= partnerNames.length-1; i++) { isThere = pubSource.search(partnerNames[i]); if (isThere != -1) {whichOne = i} } - - /* If it found one, makes the JS calls and also populates the correct divs with the files out of partners node */ - if (whichOne != -1) { - - var JSCall = 'ht' + 'tp://img.web' + 'md.com/dtmcms/live/webmd/consumer_assets/site_images/javascript/partners/' + partnerScripts[whichOne] + '.js'; - - var JSElement = document.createElement("script"); - JSElement.type = "text/javascript"; - JSElement.src = JSCall; - - document.getElementsByTagName("head")[0].appendChild(JSElement); - - var moduleCenter = "ContentPane8"; - var moduleRight = "ContentPane25"; - - addLoadEvent(function() { - $('#'+moduleCenter).append(writePartnerCenter()); - $('#'+moduleRight).prepend(writePartnerRight()); - }) - } - } - - checkPartners(); - </script> - <script type="text/javascript"> - if (document.getElementById("headerLinks_print")) { - setClass('headerLinks_print','headerLinks_fmt_on'); - }; - </script> - <link rel="stylesheet" type="text/css" href="http://img.webmd.com/dtmcms/live/webmd/PageBuilder_Assets/CSS/print.css" - media="print"/> - <style media="screen"> - #url_reference {display: none}; - </style> - <style media="print"> - #url_reference { display: block; line-height: 150%; margin-bottom: 10px; } - #logo_rdr img { visibility: visible; } - .titleBar_rdr .titleBarMiddle_fmt { padding-top: 1.5em !important;} - </style> - <script type="text/javascript"> - var insert1 = document.getElementById("ContentPane2"); - var urlDiv = articleUrl(); - if (insert1) { - insert1.appendChild(urlDiv); - } - </script> - </div> - <div id="ContentPane6"></div> - <div id="ContentPane7"></div> - <div id="ContentPane8"> - <div class="related_reading_rdr" id="rltd-p-893"> - <h4>Top Picks</h4> - - <ul> - <li id="x62" class="first"> <a href="http://www.webmd.com/allergies/guide/insect-stings" onclick="return sl(this,'','rltd-p-893_1');">Insect Sting Allergies</a> - - </li> - <li id="x63"> <a href="http://www.webmd.com/allergies/features/allergy-tips" onclick="return sl(this,'','rltd-p-893_2');">Housecleaning Tips for Indoor Allergies</a> - - </li> - <li id="x64"> <a href="http://www.webmd.com/allergies/rm-quiz-facts-allergies" onclick="return sl(this,'','rltd-p-893_3');">Allergies: How Much Do You Know?</a> - - </li> - <li id="x65"> <a href="http://www.webmd.com/allergies/features/the-truth-about-mucus" - onclick="return sl(this,'','rltd-p-893_4');">The Truth About Mucus</a> - - </li> - <li id="x66"> <a class="type_vid" href="http://www.webmd.com/allergies/anaphylaxis-13/video-preparing-for-emergencies" - onclick="return sl(this,'','rltd-p-893_5');">Signs of a Dangerous Allergic Reaction<i> </i></a> - - </li> - <li id="x67" class="last"> <a href="http://www.webmd.com/allergies/rm-quiz-colds-allergies" onclick="return sl(this,'','rltd-p-893_6');">Cold or Allergy? Quiz Yourself</a> - - </li> - </ul> - <script class="oas_template" id="oas_top_picks" type="text/html"> - <a class="{type_prefix}{type}" onclick="return sl(this,'','rltd-p-893_{link_position}');" href="{href}">{alt}{i_tag}</a> - </script> - <script type="text/javascript"> - webmd.oas = window.webmd.oas || {}; webmd.oas.mapping = window.webmd.oas.mapping || {}; webmd.oas.mapping['oas_top_picks'] = ['x62','x63','x64','x65','x66','x67']; - </script> - </div> - <script type="text/javascript"> - function moveMustSeeArticles() { - /* make the swap function available internally */ - function doSwap() { - /* get must-see articles, remove from the DOM */ - var msa = $('#mainContentContainer_area .related_reading_rdr').clone(); - $('#mainContentContainer_area .related_reading_rdr').remove(); - - /* get the pagination if it exists */ - var pagination = $('.attribution_rdr .pagination_fmt'); - var contextual = $('.other_context_links_rdr'); - var article = $('.article_rdr'); - - /* certain pages use another format: - // the top picks module is in .related_wrapper .dyn_related - // as the second div with this class. - // it has an id, unlike the other div */ - var dyn_related = $('.related_wrapper .dyn_related[id]'); - - /* if dyn_related, it is handled one way */ - if(dyn_related.html()) { - /* on last page, .related_wrapper is displayed and "Top Picks" should stay - // on other pages, it should move down */ - if(dyn_related.parent().css('display') === 'none') { - var dyn_related_clone = dyn_related.clone(); - dyn_related.remove(); - $(pagination).after('<div class="related_wrapper" style="display: block;" id="related_wrapper_2"></div>') - $('#related_wrapper_2').append(dyn_related_clone); - } - /* if not dyn_related, it is handled this way */ - } else { - /* if pagination exists, insert must-see articles before the pagination, - else insert before the next node after the contextual related links, - else insert before the next node after the article */ - if (pagination.html()) { - $(pagination).after(msa); - msa.css('padding-top','30px'); - } else if (contextual.html()) { - $(contextual).after(msa); - } else { - $(article).after(msa); - } - } - - /* show */ - $('#mainContentContainer_area .related_reading_rdr').show(); - - } - - - - /* do the swap unless the function getPubType exists and returns the value 'third_party', unless it is Healthy Day content */ - if (s_publication_source = 'WebMD News from HealthDay'){ - doSwap(); - } else if(typeof(getPubType) == 'function') { - (getPubType() == 'third_party') ? null : doSwap(); - } else { - doSwap(); - } - } - if (window.$) { - moveMustSeeArticles(); - $('.share_rdr').hide(); - } - - $(document).ready(function() - { - $('.related_wrapper').css('display','block'); - $('.dyn_related').css('padding-top','0px'); - }); - </script> - </div> - <div id="ContentPane9"></div> - <div id="ContentPane10"></div> - <div id="ContentPane11"></div> - <div id="ContentPane12"></div> - <div id="ContentPane13"></div> - <div id="ContentPane14"></div> - <div id="ContentPane15"></div> - <div id="ContentPane16"></div> - <div id="ContentPane17"></div> - <div id="ContentPane18"> - <!--<ul><li>$adsystem = DFP</li><li>$pos = 5000</li><li>$print = false</li></ul><ul><li>adtype = iFRAME</li><li>iframeheight = 1</li><li>iframewidth = 1</li><li>adserver = as.webmd.com</li></ul><ul><li>affiliate = 20</li><li>apg = 1625</li><li>artid = 091e9c5e810fb2ee</li><li>au1 = </li><li>au2 = </li><li>bc = _age121_l23_age122_j30_t780_</li><li>brand = 0</li><li>cc = 17</li><li>env = </li><li>hcent = 893</li><li>mcent = </li><li>micro = </li><li>pkg = &leaf=</li><li>pos = 5000</li><li>pug = __</li><li>scent = </li><li>sec = </li><li>segval = </li><li>site = 2</li><li>tile = 365904714</li><li>tmg = </li><li>transactionID = 442451382</li><li>tug = 2321</li><li>uri = %2fallergies%2fnews%2f20150220%2fchild-peanut-allergy-findings</li></ul>--> - <script> - var priTopId='1625', secTopId=''; - </script> - <script> - // self executing function for scope - (function() { - var isDFP; - - isDFP = true; - - - // Moving the ad up into the article: - // Finds all possible locations to insert, moves the ad location up into the article, before handling the Ad Seed Call - - // Updates Paragraphs - $(".article_rdr p").each(function() { - $(this).addClass("node"); - }); - - - // Updates Unordered Lists - $(".article_rdr .copyNormal ul").each(function() { - $(this).addClass("node"); - }); - - - //Removes nodes from paragraphs where it shouldnt be? - $(".article_rdr .share_bar p").each(function() { - $(this).removeClass("node"); - }); - $(".article_rdr .aia_rdr p").each(function() { - $(this).removeClass("node"); - }); - $(".article_rdr .share_bar ul").each(function() { - $(this).removeClass("node"); - }); - $(".article_rdr .aia_rdr ul").each(function() { - $(this).removeClass("node"); - }); - $(".contextual_links_fmt p").each(function() { - $(this).removeClass("node"); - }); - $(".article_rdr table p").each(function() { - $(this).removeClass("node"); - }); - $(".article_rdr .verifiedBox_rdr p").each(function() { - $(this).removeClass("node"); - }); - $(".article_rdr .copyNormal table ul").each(function() { - $(this).removeClass("node"); - }); - - // Finds the number of paragraphs / List items within the article. - sbposition = ($('.article_rdr .node').length); - - //Is this Healthwise Content?? - if (s_publication_source.indexOf("Healthwise") != -1) { - //Healthwise Steps, if different; - } else { - //Moves the sponsor box placeholder up into the document - if (sbposition >= 8) { - $('#remoteAd_rdr').insertAfter('.node:eq(5)'); - } - if (sbposition == 7) { - $('#remoteAd_rdr').insertAfter('.node:eq(4)'); - } - if (sbposition == 6) { - $('#remoteAd_rdr').insertAfter('.node:eq(4)'); - } - if (sbposition == 5) { - $('#remoteAd_rdr').insertAfter('.node:eq(4)'); - } - if (sbposition == 4) { - $('#remoteAd_rdr').insertAfter('.node:eq(3)'); - } - if (sbposition == 4) { - $('#remoteAd_rdr').insertAfter('.node:eq(3)'); - } - //End else - } - - - setTimeout(function() { - var iframeURLOutOfPB = 'http://as.webmd.com/html.ng/transactionID=442451382&tile=365904714&tug=2321&pug=__&site=2&affiliate=20&hcent=893&scent=&pos=113&xpg=1625&sec=&au1=&au2=&uri=%2fallergies%2fnews%2f20150220%2fchild-peanut-allergy-findings&artid=091e9c5e810fb2ee&inst=0&leaf=&segm=0&cc=17&tmg=&bc=_age121_l23_age122_j30_t780_&mcent=µ='; - - var cleanIframeURL = iframeURLOutOfPB.replace(/&/g, '&'); - - - var ad = { - adLocation: 'remote', - adURL: cleanIframeURL, - trans: '442451382', - tile: '365904714', - pos: '5000' - }; - - // check to make sure this seed call functionality exists, if it does, dooo it - if (webmd.object.exists('//webmd.ads.handleAdSeedCall')) { - if(!isDFP){ - webmd.ads.handleAdSeedCall(ad); - } - - setTimeout(function() { - updateRemoteAd(); - }, 2000); - } - }, 2000); - - - function updateRemoteAd() { - $('.chapterList_fmt #remoteAd_rdr').css('position', 'relative'); - $('.chapterList_fmt #remoteAd_rdr').css('left', '-14px'); - $('#remoteAd_Iframe').contents().find("body").attr('id', 'mainContent_area'); - if ($('#remoteAd_Iframe').contents().find('body').text().length && sbposition >= 4) { - $('.conta').css('display', 'block'); - $('#remoteAd_rdr').css('display', 'block'); - } - } - - })(); - </script> - <script type="text/javascript"> - var priTopId = "1625"; - var secTopId = ""; - </script> - <!--<ul><li>$adsystem = DFP</li><li>$pos = 5001</li><li>$print = false</li></ul><ul><li>adtype = iFRAME</li><li>iframeheight = 1</li><li>iframewidth = 1</li><li>adserver = as.webmd.com</li></ul><ul><li>affiliate = 20</li><li>apg = 1625</li><li>artid = 091e9c5e810fb2ee</li><li>au1 = </li><li>au2 = </li><li>bc = _age121_l23_age122_j30_t780_</li><li>brand = 0</li><li>cc = 17</li><li>env = </li><li>hcent = 893</li><li>mcent = </li><li>micro = </li><li>pkg = &leaf=</li><li>pos = 5001</li><li>pug = __</li><li>scent = </li><li>sec = </li><li>segval = </li><li>site = 2</li><li>tile = 365904714</li><li>tmg = </li><li>transactionID = 442451382</li><li>tug = 2321</li><li>uri = %2fallergies%2fnews%2f20150220%2fchild-peanut-allergy-findings</li></ul>--> - <script> - var priTopId='1625', secTopId=''; - </script> - <div class="centerAd_r1_rdr"> - <div id="centerAd_fmt" class="centerAd_BG_fmt"> - <div id="ads2-pos-5001-ad_cw2_icm" class="ad_placeholder"></div> - <script> - webmd.ads2Consumer.defineAd({targets:{art:'091e9c5e810fb2ee',cc:'17',env:'',hcent:'893',leaf:'&leaf=',mcent:'',mic:'',pt:'1625',sec:'',pug:'__',scent:'',tmg:'',tug:'2321',uri:'%2fallergies%2fnews%2f20150220%2fchild-peanut-allergy-findings'},blockCodes:'_age121_l23_age122_j30_t780_',id:'ads2-pos-5001-ad_cw2_icm',pos:'5001',sizes:[1,2]}); - </script> - </div> - </div> - <div class="moduleSpacer_rdr"></div> - </div> - <div id="ContentPane19"></div> - <div id="ContentPane20"></div> - </div> - </div> - </div> - <div id="navColumn_area"> - <div id="navColumn_ctr"> - <div id="ContentPane30"></div> - <div id="ContentPane31"></div> - <div id="ContentPane22"> - <div id="guidenav_rdr"> - <div class="top_fmt"></div> - <div id="centernav_fmt"> - <ul> - <li class="header_fmt"> <a href="http://www.webmd.com/allergies/default.htm" onclick="return sl(this,'','lln-ctrcnav_11-1');">Allergies Home</a> - - </li> - <li> <a href="http://www.webmd.com/allergies/news-features" onclick="return sl(this,'','lln-ctrcnav_ll-2');">News & Features</a> - - </li> - <li> <a href="http://www.webmd.com/allergies/quiz-index" onclick="return sl(this,'','lln-ctrcnav_ll-3');">Quizzes</a> - - </li> - <li> <a href="http://www.webmd.com/allergies/ss/slideshow-index" onclick="return sl(this,'','lln-ctrcnav_ll-4');">Slideshows</a> - - </li> - <li> <a href="http://www.webmd.com/allergies/video/video-index" onclick="return sl(this,'','lln-ctrcnav_ll-5');">Videos</a> - - </li> - <li> <a href="http://www.webmd.com/allergies/medical-reference-index" onclick="return sl(this,'','lln-ctrcnav_ll-6');">Reference</a> - - </li> - <li> <a href="http://doctor.webmd.com/find-a-doctor/allergy" onclick="return sl(this,'','lln-ctrcnav_ll-7');">Find an Allergist</a> - - </li> - </ul> - </div> - <div id="standardSubnav_fmt"> - <div class="header_fmt"> - <div class="icon_fmt"> <a href="http://www.webmd.com/allergies/guide/default.htm" onclick="return sl(this,'','gd-fullgd_1');"> - <img src="http://img.webmd.com/dtmcms/live/webmd/consumer_assets/site_images/modules/icon_guide.gif" border="0" alt="Guide"/> - </a> - - </div> - <div class="link_fmt"> <a href="http://www.webmd.com/allergies/guide/default.htm" onclick="return sl(this,'','gd-fullgd_1');">Allergies Guide</a> - - </div> - </div> - <div class="moduleSpacer_rdr"></div> - <div class="number_fmt">1</div> - <div class="chapter_fmt"> <a href="http://www.webmd.com/allergies/guide/allergies-overview" onclick="return sl(this,'','gd-fullgd_2');">Allergy Facts</a> - - </div> - <div class="number_fmt">2</div> - <div class="chapter_fmt"> <a href="http://www.webmd.com/allergies/guide/allergy-symptoms-types" - onclick="return sl(this,'','gd-fullgd_3');">Allergy Types</a> - - </div> - <div class="number_fmt">3</div> - <div class="chapter_fmt"> <a href="http://www.webmd.com/allergies/guide/allergies-diagnosis-tests" - onclick="return sl(this,'','gd-fullgd_4');">Allergy Tests</a> - - </div> - <div class="number_fmt">4</div> - <div class="chapter_fmt"> <a href="http://www.webmd.com/allergies/guide/allergies-treatment-care" - onclick="return sl(this,'','gd-fullgd_5');">Allergy Treatment</a> - - </div> - <div class="number_fmt">5</div> - <div class="chapter_fmt"> <a href="http://www.webmd.com/allergies/guide/allergies-living-managing" - onclick="return sl(this,'','gd-fullgd_6');">Living & Managing</a> - - </div> - <div class="number_fmt">6</div> - <div class="chapter_fmt"> <a href="http://www.webmd.com/allergies/guide/allergies-support-resources" - onclick="return sl(this,'','gd-fullgd_7');">Allergy Resources</a> - - </div> - </div> - <div class="bottom_fmt"></div> - </div> - <script type="text/javascript"> - var chapters = [ - 'http://www.webmd.com/allergies/guide/default.htm', - - 'http://www.webmd.com/allergies/guide/allergies-overview', - - 'http://www.webmd.com/allergies/guide/allergy-symptoms-types', - - 'http://www.webmd.com/allergies/guide/allergies-diagnosis-tests', - - 'http://www.webmd.com/allergies/guide/allergies-treatment-care', - - 'http://www.webmd.com/allergies/guide/allergies-living-managing', - - 'http://www.webmd.com/allergies/guide/allergies-support-resources', - '','']; - - - var c1_1 = [ - 'http://www.webmd.com/allergies/guide/allergy-basics', - 'http://www.webmd.com/allergies/guide/eye-allergies-1', - 'http://www.webmd.com/allergies/guide/chronic-allergies-causes',]; - - var c1_2 = [ - 'http://www.webmd.com/allergies/guide/allergic-reaction-causes', - 'http://www.webmd.com/allergies/guide/allergy-triggers', - 'http://www.webmd.com/allergies/guide/nasal-polyps-symptoms-and-treatments']; - - var c1_3 = [ - 'http://www.webmd.com/allergies/guide/who-gets-allergies']; - - var c1_4 = [ - 'http://www.webmd.com/allergies/guide/allergy-prevention', - 'http://www.webmd.com/allergies/guide/neti-pot-nasal-irrigation-pros-and-cons']; - - var c1_5 = [ - 'http://www.webmd.com/allergies/guide/asthma-allergies', - 'http://www.webmd.com/allergies/guide/sleep-and-allergies', - 'http://www.webmd.com/allergies/guide/allergies-sinusitis', - 'http://www.webmd.com/allergies/guide/anaphylaxis']; - - var c2_1 = [ - 'http://www.webmd.com/allergies/guide/food-allergy-intolerances', - 'http://www.webmd.com/allergies/guide/milk-allergy', - 'http://www.webmd.com/allergies/guide/egg-allergy', - 'http://www.webmd.com/allergies/guide/wheat-allergy', - 'http://www.webmd.com/allergies/guide/nut-allergy', - 'http://www.webmd.com/allergies/guide/fish-allergy', - 'http://www.webmd.com/allergies/guide/shellfish-allergy', - 'http://www.webmd.com/allergies/guide/sulfite-sensitivity', - 'http://www.webmd.com/allergies/guide/soy-allergy', - 'http://www.webmd.com/allergies/guide/casein-allergy-overview']; - - var c2_2 = [ - 'http://www.webmd.com/allergies/guide/spring-allergies', - 'http://www.webmd.com/allergies/guide/summer-allergies', - 'http://www.webmd.com/allergies/guide/fall-allergy-relief', - 'http://www.webmd.com/allergies/guide/winter-allergies']; - - var c2_3 = [ - 'http://www.webmd.com/allergies/guide/dog-allergies', - 'http://www.webmd.com/allergies/guide/cat-allergies']; - - var c2_4 = [ - 'http://www.webmd.com/allergies/guide/understanding-hay-fever-basics', - 'http://www.webmd.com/allergies/guide/conjunctivitis', - 'http://www.webmd.com/allergies/guide/hives-urticaria-angioedema', - 'http://www.webmd.com/allergies/guide/poison-ivy-oak-sumac', - 'http://www.webmd.com/allergies/guide/insect-stings', - 'http://www.webmd.com/allergies/guide/mold-allergy', - 'http://www.webmd.com/allergies/guide/pollen-allergies-symptoms-triggers-treatments', - 'http://www.webmd.com/allergies/guide/sun-reactions', - 'http://www.webmd.com/allergies/guide/salicylate-allergy', - 'http://www.webmd.com/allergies/guide/cosmetics', - 'http://www.webmd.com/allergies/guide/nickel-jewelry-allergy', - 'http://www.webmd.com/allergies/guide/drug-allergies', - 'http://www.webmd.com/allergies/guide/dust-allergies', - 'http://www.webmd.com/allergies/guide/chemical-allergies', - 'http://www.webmd.com/allergies/guide/penicillin-allergy-topic-overview']; - - var c3_1 = [ - 'http://www.webmd.com/allergies/guide/allergies-doctor-exam', - 'http://www.webmd.com/allergies/guide/food-allergy-testing', - 'http://www.webmd.com/allergies/guide/food-allergy-symptom-diary', - 'http://www.webmd.com/allergies/guide/allergies-elimination-diet']; - - var c3_2 = [ - 'http://www.webmd.com/allergies/guide/skin-test', - 'http://www.webmd.com/allergies/guide/blood-test']; - - var c4 = [ - 'http://www.webmd.com/allergies/guide/allergy-medications', - 'http://www.webmd.com/allergies/guide/antihistamines-for-allergies', - 'http://www.webmd.com/allergies/guide/decongestants', - 'http://www.webmd.com/allergies/guide/anticholinergic-nasal-allergy-sprays', - 'http://www.webmd.com/allergies/guide/steroid_nasal_sprays', - 'http://www.webmd.com/allergies/guide/allergy-eye-drops', - 'http://www.webmd.com/allergies/guide/singulair-leukotriene-inhibitors', - 'http://www.webmd.com/allergies/guide/mast-cell-inhibitors', - 'http://www.webmd.com/allergies/guide/allergy-shots', - 'http://www.webmd.com/allergies/guide/skin-allergies', - 'http://www.webmd.com/allergies/guide/dehumidifiers-for-allergies', - 'http://www.webmd.com/allergies/guide/allergies-when-to-use-auto-injector']; - - var c5 = [ - 'http://www.webmd.com/allergies/guide/allergic-reaction-home-treatment-options', - 'http://www.webmd.com/allergies/guide/food-diary-helping-uncover-food-allergy-triggers', - 'http://www.webmd.com/allergies/guide/dust-mite-mattress-and-pillow-covers-for-allergy-relief', - 'http://www.webmd.com/allergies/guide/allergy-proof-your-environment', - 'http://www.webmd.com/allergies/guide/tips-for-handling-allergies-in-school']; - - var c6 = [ - 'http://www.webmd.com/allergies/guide/resource', - 'http://www.webmd.com/allergies/guide/allergy-suggested-reading',]; - </script> - <script type="text/javascript"> - function definePage () { - - var parentChapter, tabChapter, s_pagenameCheck; - var subChapter ="1"; - var theUrl=location.href; - s_pagenameCheck = theUrl.toLowerCase(); - - if (s_pagenameCheck.lastIndexOf("?") > 0) { - var s_pagenameCheck = s_pagenameCheck.substring(0,s_pagenameCheck.lastIndexOf("?")); - } - - if( s_pagenameCheck in oc(chapters) ) { - parentChapter = s_pagenameCheck; - highlightLeftBin(parentChapter); - highlightCenterBin(parentChapter); - highlightTab(); - } else { - - if( s_pagenameCheck in oc(c1_1) ) { parentChapter = chapters[1]; tabChapter = "1";subChapter = "1";} - - if( s_pagenameCheck in oc(c1_2) ) { parentChapter = chapters[1]; tabChapter = "1";subChapter = "2";} - - if( s_pagenameCheck in oc(c1_3) ) { parentChapter = chapters[1]; tabChapter = "1";subChapter = "3";} - - if( s_pagenameCheck in oc(c1_4) ) { parentChapter = chapters[1]; tabChapter = "1";subChapter = "4";} - - if( s_pagenameCheck in oc(c1_5) ) { parentChapter = chapters[1]; tabChapter = "1";subChapter = "5";} - - if( s_pagenameCheck in oc(c2_1) ) { parentChapter = chapters[2]; tabChapter = "2";subChapter = "1";} - - if( s_pagenameCheck in oc(c2_2) ) { parentChapter = chapters[2]; tabChapter = "2";subChapter = "2";} - - if( s_pagenameCheck in oc(c2_3) ) { parentChapter = chapters[2]; tabChapter = "2";subChapter = "3";} - - if( s_pagenameCheck in oc(c2_4) ) { parentChapter = chapters[2]; tabChapter = "2";subChapter = "4";} - - if( s_pagenameCheck in oc(c3_1) ) { parentChapter = chapters[3]; tabChapter = "3";subChapter = "1";} - - if( s_pagenameCheck in oc(c3_2) ) { parentChapter = chapters[3]; tabChapter = "3";subChapter = "2";} - - if( s_pagenameCheck in oc(c4) ) { parentChapter = chapters[3]; tabChapter = "4";} - - if( s_pagenameCheck in oc(c5) ) { parentChapter = chapters[4]; tabChapter = "5";} - - if( s_pagenameCheck in oc(c6) ) { parentChapter = chapters[5]; tabChapter = "6";} - - if ((typeof(parentChapter)!="undefined") & (typeof(tabChapter)!="undefined")) { - highlightLeftBin(parentChapter); - highlightCenterBin(parentChapter); - setNavState(tabChapter, subChapter); - } - } - } - - definePage(); - </script> - <div class="moduleSpacer_rdr"></div> - </div> - <div id="ContentPane32"></div> - <div id="ContentPane33"></div> - <div id="ContentPane34"></div> - <div id="ContentPane26"> - <div class="gen_ll" id="lln-rltdto"> - <h3>Related to Allergies</h3> - - <ul> - <li class="first"> <a href="http://www.webmd.com/asthma/default.htm" onclick="return sl(this,'','lln-rltdto_1');">Asthma</a> - - </li> - <li class="odd"> <a href="http://www.webmd.com/cold-and-flu/default.htm" onclick="return sl(this,'','lln-rltdto_2');">Cold, Cough & Flu</a> - - </li> - <li> <a href="http://www.webmd.com/interaction-checker/default.htm" onclick="return sl(this,'','lln-rltdto_3');">Drug Interaction Checker</a> - - </li> - <li class="odd"> <a href="http://www.webmd.com/eye-health/ss/slideshow-eye-allergies" onclick="return sl(this,'','lln-rltdto_4');" - class="type_ss">Eye Allergies<i> </i></a> - - </li> - <li> <a href="http://www.webmd.com/allergies/guide/food-allergy-intolerances" - onclick="return sl(this,'','lln-rltdto_5');">Food Allergies</a> - - </li> - <li class="odd"> <a href="http://symptoms.webmd.com/seasonal-allergy-map-tool/default.htm" - onclick="return sl(this,'','lln-rltdto_6');">Map: Track Allergy Symptoms</a> - - </li> - <li> <a href="http://www.webmd.com/skin-problems-and-treatments/default.htm" - onclick="return sl(this,'','lln-rltdto_7');">Skin Problems & Treatments</a> - - </li> - <li class="odd last"> <a href="http://www.webmd.com/allergies/directory-index" onclick="return sl(this,'','lln-rltdto_8');">More Related Topics </a> - - </li> - </ul> - </div> - </div> - <div id="ContentPane35"></div> - <div id="ContentPane36"></div> - <div id="ContentPane37"></div> - <div id="ContentPane27"> - <!--<ul><li>$adsystem = DFP</li><li>$pos = 113</li><li>$print = false</li></ul><ul><li>adtype = iFRAME</li><li>iframeheight = 600</li><li>iframewidth = 160</li><li>adserver = as.webmd.com</li></ul><ul><li>affiliate = 20</li><li>apg = 1625</li><li>artid = 091e9c5e810fb2ee</li><li>au1 = </li><li>au2 = </li><li>bc = _age121_l23_age122_j30_t780_</li><li>brand = 0</li><li>cc = 17</li><li>env = </li><li>hcent = 893</li><li>mcent = </li><li>micro = </li><li>pkg = &leaf=</li><li>pos = 113</li><li>pug = __</li><li>scent = </li><li>sec = </li><li>segval = </li><li>site = 2</li><li>tile = 365904714</li><li>tmg = </li><li>transactionID = 442451382</li><li>tug = 2321</li><li>uri = %2fallergies%2fnews%2f20150220%2fchild-peanut-allergy-findings</li></ul>--> - <script> - var priTopId='1625', secTopId=''; - </script> - <div id="leftAd_rdr"> - <div class="leftAd_top_fmt"></div> - <div id="leftAd_fmt" class="leftAd_BG_fmt loaded"> - <div id="ads2-pos-113-ad" class="ad_placeholder"></div> - </div> - <div class="leftAd_bottom_fmt"></div> - </div> - <div class="moduleSpacer_rdr"></div> - <script> - webmd.ads2Consumer.defineAd({targets:{art:'091e9c5e810fb2ee',cc:'17',env:'',hcent:'893',leaf:'&leaf=',mcent:'',mic:'',pt:'1625',sec:'',pug:'__',scent:'',tmg:'',tug:'2321',uri:'%2fallergies%2fnews%2f20150220%2fchild-peanut-allergy-findings'},blockCodes:'_age121_l23_age122_j30_t780_',id:'ads2-pos-113-ad',pos:'113',sizes:[160,600]}); - </script> - </div> - <div id="ContentPane38"></div> - <div id="ContentPane39"></div> - </div> - </div> - <div id="thirdCol_area"> - <div id="thirdCol_ctr"> - <div id="ContentPane40"></div> - <div id="ContentPane41"></div> - <div id="ContentPane21"> - <div id="ed-urr" class="unified_right_v2_rdr"> - <h2>Today on WebMD</h2> - - <div class="unified_right_inner_v2_rdr"> - <div class="entry_fmt" id="x52"> <a href="http://www.webmd.com/allergies/ss/slideshow-natural-relief" onclick="return sl(this,'','ed-urr_1othr');"> - <img src="http://img.webmd.com/dtmcms/live/webmd/consumer_assets/site_images/article_thumbnails/news/2013/01_2013/cdc_flu_update_02012013xml/110x70_cdc_flu_update_02012013xml.jpg" alt="man blowing nose"/> - </a> - - <div class="link_fmt"> <a href="http://www.webmd.com/allergies/ss/slideshow-natural-relief" onclick="return sl(this,'','ed-urr_1othr');">12 Natural Ways to Defeat Allergies</a> - - </div> - <div class="header_fmt">Make these tweaks to your diet, home, and lifestyle.</div> - </div> - <div class="entry_fmt" id="x53"> <a href="http://www.webmd.com/allergies/ss/slideshow-nasal-allergy-relief-products" - onclick="return sl(this,'','ed-urr_2othr');"> - <img src="http://img.webmd.com/dtmcms/live/webmd/consumer_assets/site_images/article_thumbnails/slideshows/nasal_allergy_relief/110x70_nasal_allergy_relief.jpg" alt="Allergy capsule"/> - </a> - - <div class="link_fmt"> <a href="http://www.webmd.com/allergies/ss/slideshow-nasal-allergy-relief-products" - onclick="return sl(this,'','ed-urr_2othr');">Need Nasal Allergy Relief?</a> - - </div> - <div class="header_fmt">Breathe easier with these products.</div> - </div> - <div class="clear_fmt"> </div> - <div class="entry_fmt" id="x54"> <a href="http://www.webmd.com/allergies/ss/slideshow-pets-and-allergies" - onclick="return sl(this,'','ed-urr_3othr');"> - <img src="http://img.webmd.com/dtmcms/live/webmd/consumer_assets/site_images/article_thumbnails/health_checks/pet_health_evaluator_healthcheck/110x70_pet_health_evaluator_cat_healthcheck.jpg" alt="cat on couch"/> - </a> - - <div class="link_fmt"> <a href="http://www.webmd.com/allergies/ss/slideshow-pets-and-allergies" - onclick="return sl(this,'','ed-urr_3othr');">5 Tips to Cut Pet Allergies</a> - - </div> - <div class="header_fmt">Live in harmony with your cat or dog.</div> - </div> - <div class="entry_fmt" id="x55"> <a href="http://www.webmd.com/allergies/ss/slideshow-common-allergy-triggers" - onclick="return sl(this,'','ed-urr_4othr');"> - <img src="http://img.webmd.com/dtmcms/live/webmd/consumer_assets/site_images/article_thumbnails/slideshows/allergy_triggers_slideshow/110x70_allergy_triggers_slideshow.jpg" alt="Woman sneezing with tissue in meadow"/> - </a> - - <div class="link_fmt"> <a href="http://www.webmd.com/allergies/ss/slideshow-common-allergy-triggers" - onclick="return sl(this,'','ed-urr_4othr');">10 Common Allergy Triggers</a> - - </div> - <div class="header_fmt">Which ones affect you?</div> - </div> - <div class="clear_fmt"> </div> - </div> - </div> - <script class="oas_template" id="urr_V20" type="text/html"> - <a onclick="return sl(this,'','thumb-link0_{link_position}{onclick_append}');" href="{href}"> - <img src="{img}" alt="{alt_text}" /> - </a> - <div class="link_fmt"> - <a onclick="return sl(this,'','thumb-link0_{link_position}{onclick_append}');" href="{href}">{alt}</a> - </div> - <div class="header_fmt">{text}</div> - </script> - <script type="text/javascript"> - webmd.oas = window.webmd.oas || {}; webmd.oas.mapping = window.webmd.oas.mapping || {}; - webmd.oas.mapping['urr_V20'] = ['x52','x53','x54','x55']; - </script> - </div> - <div id="ContentPane42"></div> - <div id="ContentPane43"></div> - <div id="ContentPane44"></div> - <div id="ContentPane24"> - <!--<ul><li>$adsystem = DFP</li><li>$pos = 121</li><li>$print = false</li></ul><ul><li>adtype = iFRAME</li><li>iframeheight = 250</li><li>iframewidth = 300</li><li>adserver = as.webmd.com</li></ul><ul><li>affiliate = 20</li><li>apg = 1625</li><li>artid = 091e9c5e810fb2ee</li><li>au1 = </li><li>au2 = </li><li>bc = _age121_l23_age122_j30_t780_</li><li>brand = 0</li><li>cc = 17</li><li>env = </li><li>hcent = 893</li><li>mcent = </li><li>micro = </li><li>pkg = &leaf=</li><li>pos = 121</li><li>pug = __</li><li>scent = </li><li>sec = </li><li>segval = </li><li>site = 2</li><li>tile = 365904714</li><li>tmg = </li><li>transactionID = 442451382</li><li>tug = 2321</li><li>uri = %2fallergies%2fnews%2f20150220%2fchild-peanut-allergy-findings</li></ul>--> - <script> - var priTopId='1625', secTopId=''; - </script> - <div id="rightAd_rdr"> - <div class="rightAd_top_fmt"></div> - <div id="rightAd_fmt" class="rightAd_BG_fmt loaded"> - <div id="ads2-pos-121-ad" class="ad_placeholder"></div> - </div> - <div class="rightAd_bottom_fmt"></div> - </div> - <div class="moduleSpacer_rdr"></div> - <script> - webmd.ads2Consumer.defineAd({targets:{art:'091e9c5e810fb2ee',cc:'17',env:'',hcent:'893',leaf:'&leaf=',mcent:'',mic:'',pt:'1625',sec:'',pug:'__',scent:'',tmg:'',tug:'2321',uri:'%2fallergies%2fnews%2f20150220%2fchild-peanut-allergy-findings'},blockCodes:'_age121_l23_age122_j30_t780_',id:'ads2-pos-121-ad',pos:'121',sizes:[[300,250],[300, 600],[300,1050]]}); - </script> - <div id="thumb-link1" class="unified_right_rdr"> - <h2></h2> - - <div class="unified_right_inner_rdr"> - <div class="entry_fmt" id="x20"> <a href="http://www.webmd.com/allergies/features/the-truth-about-mucus" - onclick="return sl(this,'','thumb-link1_1othr');"> - <img src="http://img.webmd.com/dtmcms/live/webmd/consumer_assets/site_images/article_thumbnails/features/_2012/04_2012/truth_about_mucus_features/69x75_truth_about_mucus_features.jpg" alt="blowing nose"/> - </a> - - <div class="header_fmt">Article</div> - <div class="link_fmt"> <a href="http://www.webmd.com/allergies/features/the-truth-about-mucus" - onclick="return sl(this,'','thumb-link1_1othr');">The Truth About Mucus</a> - - </div> - </div> - <div class="entry_fmt" id="x21"> <a href="http://www.webmd.com/allergies/postnasal-drip" onclick="return sl(this,'','thumb-link1_2othr');"> - <img src="http://img.webmd.com/dtmcms/live/webmd/consumer_assets/site_images/article_thumbnails/news/2011/11_2011/acne_and_sore_throat/69x75_acne_and_sore_throat.jpg" alt="woman with sore throat"/> - </a> - - <div class="header_fmt">Article</div> - <div class="link_fmt"> <a href="http://www.webmd.com/allergies/postnasal-drip" onclick="return sl(this,'','thumb-link1_2othr');">What Is Postnasal Drip?</a> - - </div> - </div> - <div class="clear_fmt"> </div> - <div class="entry_fmt" id="x22"> <a href="http://www.webmd.com/allergies/ss/slideshow-bad-bugs" onclick="return sl(this,'','thumb-link1_3ss');"> - <img src="http://img.webmd.com/dtmcms/live/webmd/consumer_assets/site_images/article_thumbnails/news/2012/08_2012/new_tickborne_disease/69x75_new_tickborne_disease.jpg" alt="lone star tick"/> - </a> - - <div class="header_fmt">Slideshow</div> - <div class="link_fmt"> <a href="http://www.webmd.com/allergies/ss/slideshow-bad-bugs" onclick="return sl(this,'','thumb-link1_3ss');">Identify Bugs and Their Bites</a> - - </div> - </div> - <div class="entry_fmt" id="x23"> <a href="http://www.webmd.com/allergies/ss/slideshow-natural-relief" onclick="return sl(this,'','thumb-link1_4ss');"> - <img src="http://img.webmd.com/dtmcms/live/webmd/consumer_assets/site_images/article_thumbnails/slideshows/12_natural_ways_to_defeat_allergies/69x75_12_natural_ways_to_defeat_allergies.jpg" alt="Woman blowing nose"/> - </a> - - <div class="header_fmt">Slideshow</div> - <div class="link_fmt"> <a href="http://www.webmd.com/allergies/ss/slideshow-natural-relief" onclick="return sl(this,'','thumb-link1_4ss');">12 Natural Ways to Defeat Allergies</a> - - </div> - </div> - <div class="clear_fmt"> </div> - <script class="oas_template" id="oas_urr_1" type="text/html"> - <a onclick="return sl(this,'','thumb-link1_{link_position}{onclick_append}');" href="{href}"> - <img src="{img}" alt="{alt_text}" /> - </a> - <div class="header_fmt">{text}</div> - <div class="link_fmt"> - <a onclick="return sl(this,'','thumb-link1_{link_position}{onclick_append}');" href="{href}">{alt}</a> - </div> - </script> - <script type="text/javascript"> - webmd.oas = window.webmd.oas || {}; webmd.oas.mapping = window.webmd.oas.mapping || {}; - webmd.oas.mapping['oas_urr_1'] = ['x20','x21','x22','x23']; - </script> - </div> - </div> - </div> - <div id="ContentPane45"> - <style> - #allergyappsmsemailgen90 { - box-sizing: border-box; - position: relative; - width: 300px; - height: 90px; - padding: 5px 9px 0 79px; - background: url(http://img.webmd.com/dtmcms/live/webmd/consumer_assets/site_images/mobile/app-marketing/allergy/modules/gen_allergy_woman_sneezing_sm.jpg) no-repeat 10px 50%; - border: 1px solid #989898; - font-family: 'Lato', sans-serif; - margin: 0 auto 1em; - } - #allergyappsmsemailgen90, - #allergyappsmsemailgen90 p, - #allergyappsmsemailgen90 a, - #allergyappsmsemailgen90 input, - #allergyappsmsemailgen90 label, - #allergyappsmsemailgen90 h1, - #allergyappsmsemailgen90 h2, - #allergyappsmsemailgen90 h4, - #allergyappsmsemailgen90 .pane h1, - #allergyappsmsemailgen90 .pane h2 { - font-family: 'Lato', sans-serif; - } - - #allergyappsmsemailgen90 *, - #allergyappsmsemailgen90 *:before, - #allergyappsmsemailgen90 *:after { - box-sizing: border-box; - } - #allergyappsmsemailgen90 .pane { - display: block; - } - /*#allergyappsmsemailgen90 .paneIntro,*/ - #allergyappsmsemailgen90 .paneSystemError { - display: none; - } - #allergyappsmsemailgen90 .paneBusy { - display: none; - margin-top: 1em; - overflow: hidden; - } - #allergyappsmsemailgen90 .paneBusy p { - line-height: 20px; - float: left; - margin-left: .5em; - } - #allergyappsmsemailgen90 .loading_small { - float: left; - } - #allergyappsmsemailgen90 .paneSystemError p { - margin: 10px 0; - } - #allergyappsmsemailgen90 .paneDone { - display: none; - } - #allergyappsmsemailgen90 h1 { - margin: 12px 0 0 0; - line-height: 1em; - color: #222; - font-size: 27px; - font-weight: bold; - } - #allergyappsmsemailgen90 h2 { - margin: 18px 0 10px 0; - line-height: 1em; - color: #222; - font-size: 18px; - font-weight: normal; - } - #allergyappsmsemailgen90 h3 { - margin: 0; - line-height: 1em; - color: #222; - font-size: 14px; - font-weight: bold; - } - #allergyappsmsemailgen90 p { - margin: 0; - line-height: 1em; - color: #222; - font-size: 14px; - font-weight: normal; - } - #allergyappsmsemailgen90 .allergyapplogo { - width: 163px; - height: 20px; - font-size: 0; - line-height: 0; - background: url(http://img.webmd.com/dtmcms/live/webmd/consumer_assets/site_images/mobile/app-marketing/allergy/modules/webmd-allergy-app-logo_163x20.png); - } - #allergyappsmsemailgen90 form { - position: absolute; - bottom: 0; - left: 0; - width: 100%; - height: 64px; - padding: 0 9px 9px 79px; - display: none; - } - #allergyappsmsemailgen90 .sender, - #allergyappsmsemailgen90 .controls { - float: left; - } - #allergyappsmsemailgen90 form p { - color: #222; - line-height: 1em; - font-size: 14px; - font-weight: bold; - text-align:left; - } - #allergyappsmsemailgen90 input[type=text] { - position: absolute; - bottom: 4px; - left: 79px; - width: 133px; - height: 30px; - margin: 0 10px 0 0; - padding: 0 4px; - background: #fff; - color: #666; - border: 1px solid #d5d5d5; - border-radius: 3px; - font-size: 14px; - font-weight: normal; - } - #allergyappsmsemailgen90 input[type=submit] { - position: absolute; - bottom: 4px; - right: 9px; - width: 67px; - height: 30px; - margin: 0; - padding: 0; - background: #f57f20; - color: #fff; - border: none; - border-radius: 3px; - font-size: 15px; - font-weight: bold; - } - #allergyappsmsemailgen90 input.invalid { - background: #fcc; - border: 1px solid #ffb3b3; - box-shadow: inset 0 0 1.2rem #ffabab; - color: #f33; - } - </style> - <div id="allergyappsmsemailgen90" class="small"> - <div class="allergyapplogo thankyou">WebMD Allergy App</div> - <div class="pane paneForm"> - <form action="#" method="get"> - <p>Send yourself a link to download the app.</p> - <div class="sender"> - <input type="text" id="email" name="toAddress" value="Your email address" - class="placeholder"/> - </div> - <div class="controls"> - <input type="submit" value="Submit"/> - </div> - </form> - </div> - <div class="pane paneBusy"> - <div class="loading_small">Loading ...</div> - <p>Please wait...</p> - </div> - <div class="pane paneSystemError"> - <p>This feature is temporarily unavailable. Please try again later.</p> - </div> - <div class="pane paneDone"> - <h3>Thanks!</h3> - - <p>Now check your email account on your mobile phone to download your new - app.</p> - </div> - </div> - <script type="text/javascript"> - require(['allergy_app/1/allergy_app_sms_email'], function(allergyappsmsemail) { - var allergyappsmsemailgen90 = webmd.object(allergyappsmsemail); - allergyappsmsemailgen90.init({wrapper:'allergyappsmsemailgen90'}); - }); - </script> - </div> - <div id="ContentPane46"> - <div id="thumb-link2" class="unified_right_rdr"> - <h2></h2> - - <div class="unified_right_inner_rdr"> - <div class="entry_fmt" id="x24"> <a href="http://www.webmd.com/allergies/guide/cat-allergies" onclick="return sl(this,'','thumb-link2_1othr');"> - <img src="http://img.webmd.com/dtmcms/live/webmd/consumer_assets/site_images/article_thumbnails/features/_2011/11_2011/healthy_cat_gift_guide_features/69x75_healthy_cat_gift_guide_features.jpg" alt="cat lying on shelf"/> - </a> - - <div class="header_fmt">Article</div> - <div class="link_fmt"> <a href="http://www.webmd.com/allergies/guide/cat-allergies" onclick="return sl(this,'','thumb-link2_1othr');">Causes of Cat Allergies</a> - - </div> - </div> - <div class="entry_fmt" id="x25"> <a href="http://www.webmd.com/allergies/indoor-outdoor-relief-14/video-allergy-testing-and-shots" - onclick="return sl(this,'','thumb-link2_2othr');"> - <img src="http://img.webmd.com/dtmcms/live/webmd/consumer_assets/site_images/article_thumbnails/reference_guide/allergy_tests_ref_guide/69x75_allergy_tests_ref_guide.jpg" alt="Allergy prick test"/> - </a> - - <div class="header_fmt">VIDEO</div> - <div class="link_fmt"> <a href="http://www.webmd.com/allergies/indoor-outdoor-relief-14/video-allergy-testing-and-shots" - onclick="return sl(this,'','thumb-link2_2othr');">Types of Allergy Tests</a> - - </div> - </div> - <div class="clear_fmt"> </div> - <div class="entry_fmt" id="x26"> <a href="http://www.webmd.com/allergies/allergies-assessment/default.htm" - onclick="return sl(this,'','thumb-link2_3othr');"> - <img src="http://img.webmd.com/dtmcms/live/webmd/consumer_assets/site_images/article_thumbnails/health_checks/allergy_sinus_symptoms_evaluator/69x75_allergy_sinus_symptoms_evaluator.jpg" alt="Man sneezing into tissue"/> - </a> - - <div class="header_fmt">Assessment</div> - <div class="link_fmt"> <a href="http://www.webmd.com/allergies/allergies-assessment/default.htm" - onclick="return sl(this,'','thumb-link2_3othr');">Get Personalized Allergy & Sinus Tips</a> - - </div> - </div> - <div class="entry_fmt" id="x27"> <a href="http://www.webmd.com/allergies/rm-quiz-indoor-allergies" onclick="return sl(this,'','thumb-link2_4rmq');"> - <img src="http://img.webmd.com/dtmcms/live/webmd/consumer_assets/site_images/article_thumbnails/quizzes/indoor_allergies_rmq/69x75_indoor_allergies_rmq.jpg" alt="Woman holding feather duster up to face, twitching"/> - </a> - - <div class="header_fmt">Quiz</div> - <div class="link_fmt"> <a href="http://www.webmd.com/allergies/rm-quiz-indoor-allergies" onclick="return sl(this,'','thumb-link2_4rmq');">Test Your Indoor Allergy Smarts</a> - - </div> - </div> - <div class="clear_fmt"> </div> - <script class="oas_template" id="oas_urr_2" type="text/html"> - <a onclick="return sl(this,'','thumb-link2_{link_position}{onclick_append}');" href="{href}"> - <img src="{img}" alt="{alt_text}" /> - </a> - <div class="header_fmt">{text}</div> - <div class="link_fmt"> - <a onclick="return sl(this,'','thumb-link2_{link_position}{onclick_append}');" href="{href}">{alt}</a> - </div> - </script> - <script type="text/javascript"> - webmd.oas = window.webmd.oas || {}; webmd.oas.mapping = window.webmd.oas.mapping || {}; - webmd.oas.mapping['oas_urr_2'] = ['x24','x25','x26','x27']; - </script> - </div> - </div> - </div> - <div id="ContentPane47"></div> - <div id="ContentPane25"> - <div id="newsletter-mapping-center"></div> - <script type="text/javascript"> - require(['newsletter/1/mapping-centers-desktop','css!newsletter/1/newsletter-module-desktop.css'], function(module){ - module.init({ - selector: "#newsletter-mapping-center", - template: { - successMsg: '<p class="success"><span>{email}</span><br //>You will receive your first newsletter with our next scheduled circulation!</p>', - content: '' + - '<div class="newsletterFmt"></div>\n' + - '<div class="wrapper">\n' + - '<div class="nls-header">{header}</div>\n' + - '{preContent}' + - '<div class="nls-content">\n' + - '{preForm}' + - '<form class="nls-form" action="#" novalidate="novalidate">\n' + - '<div class="validationWrapper"><div class="checkbox-container clearfix">{inputs}</div></div>\n' + - '<div class="privacy-disclaimer">' + - "<em>By clicking submit I agree to WebMD's <a href='http://www.webmd.com/about-webmd-policies/about-privacy-policy' target='_blank'>Privacy Policy</a></em>" + - '</div>' + - '<div class="input-container">\n' + - '<div class="email-container validationWrapper">\n' + - '<input type="email" class="nls-email" name="email" autocapitalize="off" autocorrect="off" placeholder="Enter email address" /> ' + - '<button name="nl-submit" formnovalidate class="off {submitClass}" type="submit"><span>Submit</span></button>\n' + - '<div class="clearfix"></div>' + - '</div>\n' + // .email-container - '</div>\n' + // .input-container - '</form>\n' + - '<a class="nl-link" href="https://member.webmd.com/newsletters/newsletters.aspx" onclick="return sl(this,"nw","nl-multie_s")">Sign up for more topics!</a>' + - '{postForm}' + - '</div>\n' + // .nls-content - '{postContent}' + - '</div>', - submitClass: 'webmd-btn webmd-btn-pr webmd-btn-s', - successHeader: '<h2>Thank You For Signing Up.</h2>', - promo: '<div class="promo"><div class="promo-content clearfix"><img src="{image}" alt="WebMD App" /><div class="promo-description"><p>{text}</p><p class="promoLink"><a href="{url}" class="webmd-btn webmd-btn-pr webmd-btn-m" onclick="wmdPageLink(\'nlupgrd_sub\')">{button}</a></p><div class="clearfix"></div></div></div></div>' - - } - }); - }); - </script> - <div class="specialSectionsList_rdr" id="lln-spec"> - <div class="tomtest"></div> - <div class="headTop_fmt"></div> - <div class="header_fmt"> - <h3>WebMD Special Sections</h3> - - </div> - <div class="headBot_fmt"></div> - <div class="content_fmt"> - <ul> - <li> <a href="http://www.webmd.com/allergies/indoor-outdoor-relief-14/video-allergy-testing-and-shots" - onclick="return sl(this,'','lln-spec_1');">Indoor and Outdoor Allergy Relief</a> - - </li> - <li> <a href="http://www.webmd.com/allergies/anaphylaxis-15/default.htm" onclick="return sl(this,'','lln-spec_2');">Anaphylaxis: When Allergies Threaten Lives</a> - - </li> - <li> <a href="http://symptoms.webmd.com/seasonal-allergy-map-tool/default.htm" - onclick="return sl(this,'','lln-spec_3');">Seasonal Allergy Symptoms Nationwide</a> - - </li> - <li> <a href="http://www.webmd.com/allergies/sinus-pain-pressure-11/default.htm" - onclick="return sl(this,'','lln-spec_4');">Help for Sinus Pain and Pressure</a> - - </li> - </ul> - </div> - <div class="bot_fmt"></div> - </div> - <div class="moduleSpacer_rdr"></div> - </div> - <div id="ContentPane48"></div> - <div id="ContentPane49"></div> - </div> - </div> - </div> - </div> - <div id="footer_rdr"> - <div id="ContentPane28"></div> - <div id="ContentPane23"> - <script type="text/javascript"> - (function(){ - var module_title = 'hicb f-hs'; - var propIsSet = false; - - $(document).bind('before_pv', function(){ - if (!propIsSet) { - if (s_md.prop46) { - s_md.prop46 += "|"; - } - s_md.prop46 += module_title; - propIsSet = true; - } - webmd.metrics.ctr.addImpression(module_title); - webmd.metrics.ctr.getImpressions(); - }); - })(); - </script> - <div id="sp_ft_rdr"> - <h3>Health Solutions <span>From Our Sponsors</span></h3> - - <div class="hs_cols"> - <ul> - <li> <a href="http://www.webmd.com/women/pharmacist-14/video-sponsored-heart-disease" - onclick="return sl(this,'','hicb f-hs_1');">Controlling Heart Disease</a> - - </li> - <li> <a href="http://www.webmd.com/women/pharmacist-14/video-sponsored-allergy" - onclick="return sl(this,'','hicb f-hs_2');">Allergy Relief</a> - - </li> - <li> <a href="http://www.webmd.com/digestive-disorders/lactose-intolerance-14/real-dairy-no-discomfort" - onclick="return sl(this,'','hicb f-hs_3');">Lactose Intolerant?</a> - - </li> - </ul> - <ul> - <li> <a href="http://www.webmd.com/manage-ibsc-cic-symptoms/default.htm" onclick="return sl(this,'','hicb f-hs_4');">IBS-C Symptoms?</a> - - </li> - <li> <a href="http://www.webmd.com/osteoarthritis/knee-pain-14/3-signs-new-treatment" - onclick="return sl(this,'','hicb f-hs_5');">Exercise & OA Knee Pain</a> - - </li> - <li> <a href="http://www.webmd.com/lung/copd/alpha-1-deficiency-14/alphakit-test" - onclick="return sl(this,'','hicb f-hs_6');">COPD and Alpha-1</a> - - </li> - </ul> - <ul> - <li> <a href="http://www.webmd.com/digestive-disorders/lactose-intolerance-14/real-dairy-no-discomfort" - onclick="return sl(this,'','hicb f-hs_7');">Enjoy Dairy Everyday</a> - - </li> - <li> <a href="http://www.webmd.com/women/pharmacist-14/video-sponsored-diabetes" - onclick="return sl(this,'','hicb f-hs_8');">Managing Diabetes</a> - - </li> - <li> <a href="http://www.webmd.com/oral-health/healthy-mouth-14/video-oral-health-routine" - onclick="return sl(this,'','hicb f-hs_9');">21 Days: A New Routine</a> - - </li> - </ul> - <ul> - <li> <a href="http://www.webmd.com/osteoarthritis/knee-pain-14/treat-oa-knee-pain" - onclick="return sl(this,'','hicb f-hs_10');">Knee Pain Relief</a> - - </li> - <li> <a href="http://www.webmd.com/digestive-disorders/lactose-intolerance-14/real-dairy-no-discomfort" - onclick="return sl(this,'','hicb f-hs_11');">Replacing Milk</a> - - </li> - <li> <a href="http://www.webmd.com/women/pharmacist-14/video-sponsored-child-meds" - onclick="return sl(this,'','hicb f-hs_12');">Children's Medicine</a> - - </li> - </ul> - <ul> - <li> <a href="http://www.webmd.com/manage-ibsc-cic-symptoms/how-treatment-works" - onclick="return sl(this,'','hicb f-hs_13');">Frequent Constipation?</a> - - </li> - <li> <a href="http://www.webmd.com/lung/copd/alpha-1-deficiency-14/alphakit-test" - onclick="return sl(this,'','hicb f-hs_14');">Can COPD Be Inherited?</a> - - </li> - <li> <a href="http://www.webmd.com/manage-ibsc-cic-symptoms/default.htm" onclick="return sl(this,'','hicb f-hs_15');">Managing IBS-C Symptoms</a> - - </li> - </ul> - <div class="clearing"></div> - </div> - <div class="prem_ed"> - <div class="prem_ed_border"> - <h5>More From WebMD:</h5> - <a href="http://www.webmd.com/rheumatoid-arthritis/ss/slideshow-ra-overview" - onclick="return sl(this,'','f-idc_1');">RA Basics</a>|<a href="http://www.webmd.com/skin-problems-and-treatments/psoriasis/ss/slideshow-severe-psoriasis-9" - onclick="return sl(this,'','f-idc_2');">Severe Psoriasis</a>|<a href="http://www.webmd.com/men/erectile-dysfunction-13/slideshow-causes-of-ed" - onclick="return sl(this,'','f-idc_3');">ED Causes</a>|<a href="http://www.webmd.com/diabetes/ss/slideshow-blood-sugar-swings" - onclick="return sl(this,'','f-idc_4');">Blood Sugar Swings</a>|<a href="http://www.webmd.com/arthritis/psoriatic-arthritis/ss/slideshow-visual-guide-to-psoriatic-arthritis" - onclick="return sl(this,'','f-idc_5');">Psoriatic Arthritis</a>|<a href="http://www.webmd.com/multiple-sclerosis/ss/slideshow-multiple-sclerosis-overview" - onclick="return sl(this,'','f-idc_6');">Multiple Sclerosis Symptoms</a>| - <a - href="http://www.webmd.com/add-adhd/childhood-adhd/ss/slideshow-adhd-in-children" - onclick="return sl(this,'','f-idc_7');">ADHD in Children</a>|<a href="http://www.webmd.com/diabetes/10-diabetes-diet-myths" - onclick="return sl(this,'','f-idc_8');">Diabetes Diet Myths</a> - </div> - </div> - </div> - <div id="non_sp_ft_rdr"> - <div class="social_links social_footer"> - <h6>Find us on:</h6> - - <ul> - <li class="fb"> <a class="facebook" href="http://www.webmd.com/click?url=http%3A//www.facebook.com/%23!/WebMD%3Fref=ts" - onclick="return sl(this,'nw','soc_fb-f');"></a> - - </li> - <li class="tw"> <a class="twitter" href="http://www.webmd.com/click?url=http%3A//twitter.com/WebMD" - onclick="return sl(this,'nw','soc_tw-f');"></a> - - </li> - <li class="pn"> <a class="pinterest" href="http://www.webmd.com/click?url=http%3A//pinterest.com/webmd/" - onclick="return sl(this,'nw','soc_pn-f');"></a> - - </li> - </ul> - </div> - <div class="ft_logos newSize"> <a onclick="return sl(this,'nw','f-about_22');" href="http://www.webmd.com/click?url=https://www.urac.org/directory/CompanyView.aspx?cid=C8700000F48&aid=1951&Type=Accreditnet" - class="logo_urac"> - <span>URAC: Accredited Health Web Site</span> - </a> - - <!-- div id="f733a173-6d11-4e17-ba9f-f1454ef8b32f" style="float:left" - --> <a onclick="return sl(this,'nw','f-about_23');" href="http://www.webmd.com/click?url=https://privacy.truste.com/privacy-seal/WebMD,-LLC/validation?rid=7b3bf16d-37b4-42e0-aec7-836ef1d3680d" - title="TRUSTe online privacy certification"> - <img style="border: none; float:left; margin: 0px 8px 0px 0px;" src="//privacy-policy.truste.com/privacy-seal/WebMD,-LLC/seal?rid=80c33c7c-da0b-4788-8236-61a318f00f4c" alt="TRUSTe online privacy certification"/> - </a> - - <!-- /div --> - <!-- a onclick="return sl(this,'nw','f-about_24');" href="http://www.webmd.com/click?url=http://www.hon.ch/HONcode/Conduct.html%3FHONConduct298987" - class="logo_honcode" title="This site complies with the HONcode standard - for trustworthy health information."> - <span>HonCode: Health on the Net Foundation</span></a --> -<a onclick="return sl(this,'nw','f-about_24');" href="http://www.webmd.com/click?url=http://www.hon.ch/HONcode/Conduct.html%3FHONConduct298987" - title="This site complies with the HONcode standard for trustworthy health information."> -<img alt="HONcode Seal" src="http://img.webmd.com/dtmcms/live/webmd/consumer_assets/site_images/layout/shared/honcode14.gif" style="border: none; float:left; margin: 0px 0px 0px 5px; width: 43px; height: 60px;"/> - </a> - <a onclick="TRUSTeWidget.Tab.link();return sl(this,'f-about_27');" - class="logo_AdChoices">AdChoices</a> - - <script type="text/javascript"> - $(function(){ - var fileNameToLoad = '//preferences.truste.com/webservices/js?type=webmd&domain=webmd'; - - if(webmd.useragent.ua.browser === 'browserSF') { - fileNameToLoad = '//preferences.truste.com/webservices/js?domain=webmdsafari.com&type=webmdsafari&js=2'; - } - - webmd.load({js:[fileNameToLoad, '//privacy-policy.truste.com/privacy-seal/WebMD,-LLC/asc?rid=f733a173-6d11-4e17-ba9f-f1454ef8b32f']}); - }); - </script> - </div> - <div class="ft_text"> - <div class="about"> <a rel="nofollow" href="http://www.webmd.com/www/about-webmd-policies/default.htm?ss=ftr" - onclick="return sl(this,'','f-about_01');">About WebMD</a> <a rel="nofollow" - href="http://www.webmd.com/www/about-webmd-policies/media/default.htm" - onclick="return sl(this,'f-about_09','ftr')">Advertise With Us</a> <a rel="nofollow" - href="http://www.webmd.com/www/about-webmd-policies/about-terms-and-conditions-of-use?ss=ftr" - onclick="return sl(this,'','f-about_02');">Terms of Use</a> <a rel="nofollow" - href="http://www.webmd.com/www/about-webmd-policies/about-privacy-policy?ss=ftr" - onclick="return sl(this,'','f-about_03');">Privacy Policy</a> <a rel="nofollow" - href="http://www.webmd.com/www/about-webmd-policies/about-our-sponsors?ss=ftr" - onclick="return sl(this,'','f-about_04');">Sponsor Policy</a> <a href="http://www.webmd.com/www/sitemap?ss=ftr" - onclick="return sl(this,'','f-about_05');">Site Map</a> <a rel="nofollow" - href="https://careers-webmd.icims.com/" onclick="return sl(this,'','f-about_07')">Careers</a> - <a - class="last" rel="nofollow" href="https://customercare.webmd.com/ics/support/default.asp?deptID=18003&task=ticket" - onclick="return sl(this,'nw','f-about_08');">Contact Us</a> - </div> - <div class="links"> <a href="http://reference.medscape.com/" onclick="return sl(this,'f-about_11','ftr')">Medscape Reference</a> - <a - href="http://www.emedicinehealth.com/script/main/hp.asp" onclick="return sl(this,'f-about_12','ftr')">eMedicineHealth</a> <a href="http://www.rxlist.com/" onclick="return sl(this,'f-about_13','ftr')">RxList</a> - <a - href="http://www.medscape.com/" onclick="return sl(this,'f-about_14','ftr')">Medscape</a> <a href="http://www.medicinenet.com/" onclick="return sl(this,'f-about_15','ftr')">MedicineNet</a> - <a - href="http://www.webmd.boots.com/" onclick="return sl(this,'f-about_26','ftr')">BootsWebMD</a> -<a class="last" rel="nofollow" href="http://www.wbmd.com/" - onclick="return sl(this,'f-about_10','ftr')">WebMD Corporate</a> - - </div> - <div class="links"> <a rel="nofollow" href="http://www.webmdhealthservices.com/" onclick="return sl(this,'f-about_29','ftr')">WebMD Health Services</a> - <a - href="http://www.webmd.com/first-aid/default.htm" onclick="return sl(this,'','f-about_17');">First Aid</a> <a href="http://www.webmd.com/www/magazine/default.htm?ss=ftr" - onclick="return sl(this,'','f-about_18');">WebMD Magazine</a> <a href="http://www.webmd.com/www/phr" - onclick="return sl(this,'','f-about_19')">WebMD Health Record</a> <a href="http://www.webmd.com/www/mobile" - onclick="return sl(this,'','f-about_20')">WebMD Mobile</a> <a class="last" - href="https://member.webmd.com/subscribe" onclick="return sl(this,'','f-about_21')">Newsletters</a> - </div> - <div class="links"> -<a href="http://dictionary.webmd.com/default.htm" onclick="return sl(this,'','f-about_22')">Dictionary</a> - <a - class="last" href="http://doctor.webmd.com/home" onclick="return sl(this,'','f-about_23')">Physician Directory</a> - </div> - <div class="copyright"> - <p>©2005-2015 WebMD, LLC. All rights reserved.</p> - <p>WebMD does not provide medical advice, diagnosis or treatment. <a rel="nofollow" - href="http://www.webmd.com/www/policies/additional-info?ss=ftr" onclick="return sl(this,'','f-about_25');">See additional information.</a> - - </p> - </div> - </div> - <div class="clearing"></div> - </div> - <script type="text/javascript"> - // adding RR test back into preview to troubleshoot - try { - webmd.usability.tests.ssRightRail.writeTest(); - } catch(e) { - }; - </script> - <script language="javascript1.2" type="text/javascript"> - if (document.URL.substring(0, 5).indexOf('http:') >= 0) { - document.write('<img src=//bi.medscape.com/pi/global/webmd-1x1.gif?' + new Date().getTime() + '" alt="" height="1" width="1" border="0" />') - } - </script> - <script language="javascript" type="text/javascript" src="http://img.webmd.com/dtmcms/live/webmd/PageBuilder_Assets/JS_static/tools/ldcc.js"></script> - <script type="text/javascript"> - (function(){ - // duckpunching s_before_pv as some assets are using that vs our event driven system. This lets the event system get triggered as well as the other functions - var _old = window.s_before_pv; - - window.s_before_pv = function() { - var timestamp = Number(new Date()); - if (window.location.protocol === 'http:') { - webmd.load({image: '//b.scorecardresearch.com/b?c1=2&c2=6035829&c3=&c4=&c5=&c6=&c7=' + encodeURIComponent(window.location.href) + '&c9=' + encodeURIComponent(window.document.referrer) + '&c15=&cv=2.0&cj=1&cb='+ timestamp}); - } - if (window.location.protocol === 'https:') { - webmd.load({image: '//sb.scorecardresearch.com/b?c1=2&c2=6035829&c3=&c4=&c5=&c6=&c7=' + encodeURIComponent(window.location.href) + '&c9=' + encodeURIComponent(window.document.referrer) + '&c15=&cv=2.0&cj=1&cb='+ timestamp}); - } - - _old(); - } - if (webmd && webmd.ads2Consumer) { - webmd.ads2Consumer.display(); - } - })(); - </script> - <!--<ul><li>$adsystem = DFP</li><li>$pos = 901</li><li>$print = false</li></ul><ul><li>adtype = JavaScript</li><li>iframeheight = 1</li><li>iframewidth = 1</li><li>adserver = as.webmd.com</li></ul><ul><li>affiliate = 20</li><li>apg = 1625</li><li>artid = 091e9c5e810fb2ee</li><li>au1 = </li><li>au2 = </li><li>bc = _age121_l23_age122_j30_t780_</li><li>brand = 0</li><li>cc = 17</li><li>env = </li><li>hcent = 893</li><li>mcent = </li><li>micro = </li><li>pkg = &leaf=</li><li>pos = 901</li><li>pug = __</li><li>scent = </li><li>sec = </li><li>segval = </li><li>site = 2</li><li>tile = 365904714</li><li>tmg = </li><li>transactionID = 442451382</li><li>tug = 2321</li><li>uri = %2fallergies%2fnews%2f20150220%2fchild-peanut-allergy-findings</li></ul>--> - <script> - var priTopId='1625', secTopId=''; - </script> - <div id="ads2-pos-901-1x1ad" class="ad_placeholder" style="display:none;"></div> - <script> - webmd.ads2Consumer.defineAd({targets:{art:'091e9c5e810fb2ee',cc:'17',env:'',hcent:'893',leaf:'&leaf=',mcent:'',mic:'',pt:'1625',sec:'',pug:'__',scent:'',tmg:'',tug:'2321',uri:'%2fallergies%2fnews%2f20150220%2fchild-peanut-allergy-findings'},blockCodes:'_age121_l23_age122_j30_t780_',id:'ads2-pos-901-1x1ad',pos:'901',sizes:[1,1]}); - </script> - </div> - <div id="ContentPane29"></div> - <div id="bottomShadow_fmt"></div> - </div> - </div> - </div> - </div> - <script type="text/javascript"> - var s_account="webmdcom" - ,s_server_type="1b" - ,s_server="WFAWS15L-CON-08" - ,s_object_type="wbmd_cons_article" - ,s_page_number="1" - ,s_topic_dir="false" - ,s_site_class="ooc" - ,s_site="core" - ,s_sponsored_uri="allergies/news/20150220/child-peanut-allergy-findings" - ,s_pagename="www.webmd.com/allergies/news/20150220/child-peanut-allergy-findings" - ,s_channel="" - ,s_topic="1625" - ,s_business_reference="News" - ,s_publication_source="WebMD Health News" - ,s_intended_demographics="__" - ,s_stage_condition="" - ,s_asset_id="091e9c5e810fb2ee" - ,s_unique_id="091e9c5e810fb2ee" - ,s_company="webmd" - ,s_mrt="" - ,s_assetname="" - ,s_refpath="" - ,s_sponsor_brand="Dey_EpiPen" - ,s_sponsor_program="Dey_EpiPen_Patient Select Allergies" - ,s_tug="2321" - ,s_package_type="topic targeted - sp" - ,s_package_name="" - ,s_channel_super_portal="" - ,s_channel_health="Allergies" - ,s_channel_mini="" - ,s_channel_micro="" - ,s_channel_topic_miniguide_guide="" - ,s_searchterm=""; - </script> - <script language="javascript1.2" type="text/javascript" src="http://img.webmd.com/bi_common/bi_consumer.js?d=3/18/2015"></script> - </body> - -</html> diff --git a/test/test-pages/webmd-2/expected.html b/test/test-pages/webmd-2/expected.html index 87aef46..cd4b917 100644 --- a/test/test-pages/webmd-2/expected.html +++ b/test/test-pages/webmd-2/expected.html @@ -1,15 +1,24 @@ - <div id="textArea" class="copyNormal"> - <h3></h3> - <p>April 17, 2015 -- Imagine being sick in the hospital with a <a href="http://www.webmd.com/a-to-z-guides/bacterial-and-viral-infections" onclick="return sl(this,'','embd-lnk');" class="">bacterial infection</a> and doctors can't stop it from spreading. This so-called "superbug" scenario is not science fiction. It's an urgent, worldwide worry that is prompting swift action.</p> - <p xmlns:xalan="http://xml.apache.org/xalan">Every year, about 2 million people get sick from a superbug, according to the CDC. About 23,000 die. Earlier this year, an outbreak of CRE (carbapenem-resistant enterobacteriaceae) linked to contaminated medical tools sickened 11 people at two Los-Angeles area hospitals. Two people died, and more than 200 others may have been exposed.</p> - <p>The White House recently released a <a onclick="return sl(this,'','embd-lnk');" href="http://www.webmd.com/click?url=https://www.whitehouse.gov/sites/default/files/docs/national_action_plan_for_combating_antibotic-resistant_bacteria.pdf">comprehensive plan</a> outlining steps to combat drug-resistant bacteria. The plan identifies three "urgent" and several "serious" threats. We asked infectious disease experts to explain what some of them are and when to worry.</p> - <link type="text/css" rel="stylesheet" href="http://img.webmd.com/dtmcms/live/webmd/consumer_assets/site_images/css/contextual_related_links.css"/> - <a name="1"> </a> - <h3>But First: What's a Superbug? </h3> - <p>It's a term coined by the media to describe bacteria that cannot be killed using multiple <a href="http://www.webmd.com/cold-and-flu/rm-quiz-antibiotics-myths-facts" onclick="return sl(this,'','embd-lnk');" class="">antibiotics</a>. "It resonates because it's scary," says Stephen Calderwood, MD, president of the Infectious Diseases Society of America. "But in fairness, there is no real definition."</p> - <p>Instead, doctors often use phrases like "multidrug-resistant bacteria." That's because a superbug isn't necessarily resistant to all antibiotics. It refers to bacteria that can't be treated using two or more, says Brian K. Coombes, PhD, of McMaster University in Ontario.</p> - <p>Any species of bacteria can turn into a superbug.</p> - <p>Misusing antibiotics (such as taking them when you don't need them or not finishing all of your medicine) is the "single leading factor" contributing to this problem, the CDC says. The concern is that eventually doctors will run out of antibiotics to treat them.</p> - <p>"What the public should know is that the more antibiotics you’ve taken, the higher your superbug risk," says Eric Biondi, MD, who runs a program to decrease unnecessary antibiotic use. "The more encounters you have with the hospital setting, the higher your superbug risk."</p> - <p>"Superbugs should be a concern to everyone," Coombes says. "Antibiotics are the foundation on which all modern medicine rests. Cancer <a href="http://www.webmd.com/cancer/chemotherapy-what-to-expect" onclick="return sl(this,'','embd-lnk');" class="">chemotherapy</a>, <a href="http://www.webmd.com/a-to-z-guides/organ-donation-facts" onclick="return sl(this,'','embd-lnk');" class="">organ transplants</a>, surgeries, and <a href="http://www.webmd.com/baby/guide/delivery-methods" onclick="return sl(this,'','embd-lnk');" class="">childbirth</a> all rely on antibiotics to prevent infections. If you can't treat those, then we lose the medical advances we have made in the last 50 years."</p> - <p>Here are some of the growing superbug threats identified in the 2015 White House report.</p>
\ No newline at end of file +<div class="copyNormal" id="textArea"> + + + + + <p> </p> + <h3></h3> + + <p>April 17, 2015 -- Imagine being sick in the hospital with a <a class="" href="http://www.webmd.com/a-to-z-guides/bacterial-and-viral-infections" onclick="return sl(this,'','embd-lnk');">bacterial infection</a> and doctors can't stop it from spreading. This so-called "superbug" scenario is not science fiction. It's an urgent, worldwide worry that is prompting swift action.</p> + <p xmlns:xalan="http://xml.apache.org/xalan">Every year, about 2 million people get sick from a superbug, according to the CDC. About 23,000 die. Earlier this year, an outbreak of CRE (carbapenem-resistant enterobacteriaceae) linked to contaminated medical tools sickened 11 people at two Los-Angeles area hospitals. Two people died, and more than 200 others may have been exposed.</p> + <p>The White House recently released a <a href="http://www.webmd.com/click?url=https://www.whitehouse.gov/sites/default/files/docs/national_action_plan_for_combating_antibotic-resistant_bacteria.pdf" onclick="return sl(this,'','embd-lnk');">comprehensive plan</a> outlining steps to combat drug-resistant bacteria. The plan identifies three "urgent" and several "serious" threats. We asked infectious disease experts to explain what some of them are and when to worry.</p> + + <link href="http://img.webmd.com/dtmcms/live/webmd/consumer_assets/site_images/css/contextual_related_links.css" rel="stylesheet" type="text/css"></link> + <p> </p> + <a name="1"> </a> + <h3>But First: What's a Superbug? </h3> + <p>It's a term coined by the media to describe bacteria that cannot be killed using multiple <a class="" href="http://www.webmd.com/cold-and-flu/rm-quiz-antibiotics-myths-facts" onclick="return sl(this,'','embd-lnk');">antibiotics</a>. "It resonates because it's scary," says Stephen Calderwood, MD, president of the Infectious Diseases Society of America. "But in fairness, there is no real definition."</p> + <p>Instead, doctors often use phrases like "multidrug-resistant bacteria." That's because a superbug isn't necessarily resistant to all antibiotics. It refers to bacteria that can't be treated using two or more, says Brian K. Coombes, PhD, of McMaster University in Ontario.</p> + <p>Any species of bacteria can turn into a superbug.</p> + <p>Misusing antibiotics (such as taking them when you don't need them or not finishing all of your medicine) is the "single leading factor" contributing to this problem, the CDC says. The concern is that eventually doctors will run out of antibiotics to treat them.</p> + <p>"What the public should know is that the more antibiotics you’ve taken, the higher your superbug risk," says Eric Biondi, MD, who runs a program to decrease unnecessary antibiotic use. "The more encounters you have with the hospital setting, the higher your superbug risk."</p> + <p>"Superbugs should be a concern to everyone," Coombes says. "Antibiotics are the foundation on which all modern medicine rests. Cancer <a class="" href="http://www.webmd.com/cancer/chemotherapy-what-to-expect" onclick="return sl(this,'','embd-lnk');">chemotherapy</a>, <a class="" href="http://www.webmd.com/a-to-z-guides/organ-donation-facts" onclick="return sl(this,'','embd-lnk');">organ transplants</a>, surgeries, and <a class="" href="http://www.webmd.com/baby/guide/delivery-methods" onclick="return sl(this,'','embd-lnk');">childbirth</a> all rely on antibiotics to prevent infections. If you can't treat those, then we lose the medical advances we have made in the last 50 years."</p> + <p>Here are some of the growing superbug threats identified in the 2015 White House report.</p> + </div>
\ No newline at end of file |