summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorAndres Rey <[email protected]>2018-10-24 19:42:20 +0100
committerAndres Rey <[email protected]>2018-10-24 19:42:20 +0100
commit88d8b70cf6571651efd4cac11bf3b1e2848e3489 (patch)
tree3de508b0f5cfde58bc8372b1cf478185951ee139 /test
parentfd5f669768cab64a6c09476d3260422890b817ba (diff)
Update test expectations
Diffstat (limited to 'test')
-rw-r--r--test/test-pages/002/expected.html496
-rw-r--r--test/test-pages/base-url-base-element-relative/expected.html55
-rw-r--r--test/test-pages/base-url-base-element/expected.html55
-rw-r--r--test/test-pages/basic-tags-cleaning/expected.html3
-rw-r--r--test/test-pages/bbc-1/expected-metadata.json4
-rw-r--r--test/test-pages/blogger/expected.html168
-rw-r--r--test/test-pages/breitbart/expected.html30
-rw-r--r--test/test-pages/bug-1255978/expected.html97
-rw-r--r--test/test-pages/buzzfeed-1/expected.html8
-rw-r--r--test/test-pages/clean-links/expected.html1646
-rw-r--r--test/test-pages/cnet-svg-classes/expected.html12
-rw-r--r--test/test-pages/cnet/expected.html8
-rw-r--r--test/test-pages/cnn/expected.html106
-rw-r--r--test/test-pages/daringfireball-1/expected.html18
-rw-r--r--test/test-pages/ehow-1/expected.html53
-rw-r--r--test/test-pages/ehow-2/expected.html69
-rw-r--r--test/test-pages/engadget/expected.html537
-rw-r--r--test/test-pages/gmw/expected.html102
-rw-r--r--test/test-pages/heise/expected.html10
-rw-r--r--test/test-pages/herald-sun-1/expected.html9
-rw-r--r--test/test-pages/herald-sun-1/source.html126
-rw-r--r--test/test-pages/hidden-nodes/expected-metadata.json4
-rw-r--r--test/test-pages/hidden-nodes/expected.html4
-rw-r--r--test/test-pages/hidden-nodes/source.html29
-rw-r--r--test/test-pages/hukumusume/expected.html73
-rw-r--r--test/test-pages/hukumusume/source.html589
-rw-r--r--test/test-pages/iab-1/expected-metadata.json2
-rw-r--r--test/test-pages/iab-1/expected.html3
-rw-r--r--test/test-pages/ietf-1/expected.html191
-rw-r--r--test/test-pages/keep-images/expected.html575
-rw-r--r--test/test-pages/la-nacion/expected.html4
-rw-r--r--test/test-pages/lemonde-2/expected.html2
-rw-r--r--test/test-pages/liberation-1/expected.html2
-rw-r--r--test/test-pages/links-in-tables/expected.html352
-rw-r--r--test/test-pages/lwn-1/expected.html48
-rw-r--r--test/test-pages/medium-1/expected.html44
-rw-r--r--test/test-pages/medium-2/expected.html2
-rw-r--r--test/test-pages/medium-3/expected.html14
-rw-r--r--test/test-pages/medium-3/source.html4
-rw-r--r--test/test-pages/missing-paragraphs/expected.html6
-rw-r--r--test/test-pages/mozilla-1/expected.html41
-rw-r--r--test/test-pages/mozilla-2/expected.html16
-rw-r--r--test/test-pages/msn/expected.html2
-rw-r--r--test/test-pages/nytimes-1/expected.html16
-rw-r--r--test/test-pages/nytimes-2/expected.html26
-rw-r--r--test/test-pages/pixnet/expected.html184
-rw-r--r--test/test-pages/qq/expected-metadata.json5
-rw-r--r--test/test-pages/qq/expected.html35
-rw-r--r--test/test-pages/qq/source.html7280
-rw-r--r--test/test-pages/remove-extra-brs/expected.html27
-rw-r--r--test/test-pages/remove-extra-paragraphs/expected.html12
-rw-r--r--test/test-pages/remove-script-tags/expected.html2
-rw-r--r--test/test-pages/replace-brs/expected.html18
-rw-r--r--test/test-pages/replace-brs/source.html18
-rw-r--r--test/test-pages/replace-font-tags/expected.html3
-rw-r--r--test/test-pages/rtl-1/source.html2
-rw-r--r--test/test-pages/simplyfound-1/expected.html18
-rw-r--r--test/test-pages/social-buttons/expected.html2
-rw-r--r--test/test-pages/table-style-attributes/expected.html105
-rw-r--r--test/test-pages/table-style-attributes/source.html2
-rw-r--r--test/test-pages/tmz-1/expected.html54
-rw-r--r--test/test-pages/tumblr/expected.html8
-rw-r--r--test/test-pages/wapo-1/expected.html37
-rw-r--r--test/test-pages/wapo-2/expected.html17
-rw-r--r--test/test-pages/webmd-1/expected.html16
-rw-r--r--test/test-pages/webmd-2/expected.html21
-rw-r--r--test/test-pages/wikipedia/expected.html70
-rw-r--r--test/test-pages/wordpress/expected.html10
-rw-r--r--test/test-pages/yahoo-1/expected.html6
-rw-r--r--test/test-pages/yahoo-2/expected.html10
-rw-r--r--test/test-pages/yahoo-3/expected.html23
-rw-r--r--test/test-pages/yahoo-4/expected.html22
72 files changed, 9670 insertions, 3998 deletions
diff --git a/test/test-pages/002/expected.html b/test/test-pages/002/expected.html
index 16dca2a..e129084 100644
--- a/test/test-pages/002/expected.html
+++ b/test/test-pages/002/expected.html
@@ -1,36 +1,21 @@
-<div><article role="article"><p>For more than a decade the Web has used XMLHttpRequest (XHR) to achieve
- asynchronous requests in JavaScript. While very useful, XHR is not a very
- nice API. It suffers from lack of separation of concerns. The input, output
- and state are all managed by interacting with one object, and state is
- tracked using events. Also, the event-based model doesn’t play well with
- JavaScript’s recent focus on Promise- and generator-based asynchronous
- programming.</p>
- <p>The <a href="https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API">Fetch API</a> intends
- to fix most of these problems. It does this by introducing the same primitives
- to JS that are used in the HTTP protocol. In addition, it introduces a
- utility function <code>fetch()</code> that succinctly captures the intention
- of retrieving a resource from the network.</p>
- <p>The <a href="https://fetch.spec.whatwg.org">Fetch specification</a>, which
- defines the API, nails down the semantics of a user agent fetching a resource.
- This, combined with ServiceWorkers, is an attempt to:</p>
- <ol><li>Improve the offline experience.</li>
- <li>Expose the building blocks of the Web to the platform as part of the
- <a href="https://extensiblewebmanifesto.org/">extensible web movement</a>.</li>
- </ol><p>As of this writing, the Fetch API is available in Firefox 39 (currently
- Nightly) and Chrome 42 (currently dev). Github has a <a href="https://github.com/github/fetch">Fetch polyfill</a>.</p>
-
-<h2>Feature detection</h2>
-
- <p>Fetch API support can be detected by checking for <code>Headers</code>,<code>Request</code>, <code>Response</code> or <code>fetch</code> on
- the <code>window</code> or <code>worker</code> scope.</p>
-
-<h2>Simple fetching</h2>
-
- <p>The most useful, high-level part of the Fetch API is the <code>fetch()</code> function.
- In its simplest form it takes a URL and returns a promise that resolves
- to the response. The response is captured as a <code>Response</code> object.</p>
- <div>
- <table><tbody><tr><td><pre>fetch<span>(</span><span>"/data.json"</span><span>)</span>.<span>then</span><span>(</span><span>function</span><span>(</span>res<span>)</span> <span>{</span>
+<div id="readability-page-1" class="page">
+ <div id="content-main">
+ <article role="article">
+ <p>For more than a decade the Web has used XMLHttpRequest (XHR) to achieve asynchronous requests in JavaScript. While very useful, XHR is not a very nice API. It suffers from lack of separation of concerns. The input, output and state are all managed by interacting with one object, and state is tracked using events. Also, the event-based model doesn’t play well with JavaScript’s recent focus on Promise- and generator-based asynchronous programming.</p>
+ <p>The <a href="https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API">Fetch API</a> intends to fix most of these problems. It does this by introducing the same primitives to JS that are used in the HTTP protocol. In addition, it introduces a utility function <code>fetch()</code> that succinctly captures the intention of retrieving a resource from the network.</p>
+ <p>The <a href="https://fetch.spec.whatwg.org/">Fetch specification</a>, which defines the API, nails down the semantics of a user agent fetching a resource. This, combined with ServiceWorkers, is an attempt to:</p>
+ <ol>
+ <li>Improve the offline experience.</li>
+ <li>Expose the building blocks of the Web to the platform as part of the <a href="https://extensiblewebmanifesto.org/">extensible web movement</a>.</li>
+ </ol>
+ <p>As of this writing, the Fetch API is available in Firefox 39 (currently Nightly) and Chrome 42 (currently dev). Github has a <a href="https://github.com/github/fetch">Fetch polyfill</a>.</p>
+ <h2>Feature detection</h2>
+ <p>Fetch API support can be detected by checking for <code>Headers</code>,<code>Request</code>, <code>Response</code> or <code>fetch</code> on the <code>window</code> or <code>worker</code> scope.</p>
+ <h2>Simple fetching</h2>
+ <p>The most useful, high-level part of the Fetch API is the <code>fetch()</code> function. In its simplest form it takes a URL and returns a promise that resolves to the response. The response is captured as a <code>Response</code> object.</p>
+ <div>
+ <div>
+ <pre>fetch<span>(</span><span>"/data.json"</span><span>)</span>.<span>then</span><span>(</span><span>function</span><span>(</span>res<span>)</span> <span>{</span>
<span>// res instanceof Response == true.</span>
<span>if</span> <span>(</span>res.<span>ok</span><span>)</span> <span>{</span>
res.<span>json</span><span>(</span><span>)</span>.<span>then</span><span>(</span><span>function</span><span>(</span>data<span>)</span> <span>{</span>
@@ -41,12 +26,12 @@
<span>}</span>
<span>}</span><span>,</span> <span>function</span><span>(</span>e<span>)</span> <span>{</span>
console.<span>log</span><span>(</span><span>"Fetch failed!"</span><span>,</span> e<span>)</span><span>;</span>
-<span>}</span><span>)</span><span>;</span></pre>
- </td>
- </tr></tbody></table></div>
+<span>}</span><span>)</span><span>;</span></pre> </div>
+ </div>
<p>Submitting some parameters, it would look like this:</p>
<div>
- <table><tbody><tr><td><pre>fetch<span>(</span><span>"http://www.example.org/submit.php"</span><span>,</span> <span>{</span>
+ <div>
+ <pre>fetch<span>(</span><span>"http://www.example.org/submit.php"</span><span>,</span> <span>{</span>
method<span>:</span> <span>"POST"</span><span>,</span>
headers<span>:</span> <span>{</span>
<span>"Content-Type"</span><span>:</span> <span>"application/x-www-form-urlencoded"</span>
@@ -60,172 +45,114 @@
<span>}</span>
<span>}</span><span>,</span> <span>function</span><span>(</span>e<span>)</span> <span>{</span>
alert<span>(</span><span>"Error submitting form!"</span><span>)</span><span>;</span>
-<span>}</span><span>)</span><span>;</span></pre>
- </td>
- </tr></tbody></table></div>
- <p>The <code>fetch()</code> function’s arguments are the same as those passed
- to the
- <br></br><code>Request()</code> constructor, so you may directly pass arbitrarily
- complex requests to <code>fetch()</code> as discussed below.</p>
-
-<h2>Headers</h2>
-
- <p>Fetch introduces 3 interfaces. These are <code>Headers</code>, <code>Request</code> and
- <br></br><code>Response</code>. They map directly to the underlying HTTP concepts,
- but have
- <br></br>certain visibility filters in place for privacy and security reasons,
- such as
- <br></br>supporting CORS rules and ensuring cookies aren’t readable by third parties.</p>
- <p>The <a href="https://fetch.spec.whatwg.org/#headers-class">Headers interface</a> is
- a simple multi-map of names to values:</p>
+<span>}</span><span>)</span><span>;</span></pre> </div>
+ </div>
+ <p>The <code>fetch()</code> function’s arguments are the same as those passed to the <br/> <code>Request()</code> constructor, so you may directly pass arbitrarily complex requests to <code>fetch()</code> as discussed below.</p>
+ <h2>Headers</h2>
+ <p>Fetch introduces 3 interfaces. These are <code>Headers</code>, <code>Request</code> and <br/> <code>Response</code>. They map directly to the underlying HTTP concepts, but have <br/>certain visibility filters in place for privacy and security reasons, such as <br/>supporting CORS rules and ensuring cookies aren’t readable by third parties.</p>
+ <p>The <a href="https://fetch.spec.whatwg.org/#headers-class">Headers interface</a> is a simple multi-map of names to values:</p>
<div>
- <table><tbody><tr><td><pre><span>var</span> content <span>=</span> <span>"Hello World"</span><span>;</span>
+ <div>
+ <pre><span>var</span> content <span>=</span> <span>"Hello World"</span><span>;</span>
<span>var</span> reqHeaders <span>=</span> <span>new</span> Headers<span>(</span><span>)</span><span>;</span>
reqHeaders.<span>append</span><span>(</span><span>"Content-Type"</span><span>,</span> <span>"text/plain"</span>
reqHeaders.<span>append</span><span>(</span><span>"Content-Length"</span><span>,</span> content.<span>length</span>.<span>toString</span><span>(</span><span>)</span><span>)</span><span>;</span>
-reqHeaders.<span>append</span><span>(</span><span>"X-Custom-Header"</span><span>,</span> <span>"ProcessThisImmediately"</span><span>)</span><span>;</span></pre>
- </td>
- </tr></tbody></table></div>
- <p>The same can be achieved by passing an array of arrays or a JS object
- literal
- <br></br>to the constructor:</p>
+reqHeaders.<span>append</span><span>(</span><span>"X-Custom-Header"</span><span>,</span> <span>"ProcessThisImmediately"</span><span>)</span><span>;</span></pre> </div>
+ </div>
+ <p>The same can be achieved by passing an array of arrays or a JS object literal <br/>to the constructor:</p>
<div>
- <table><tbody><tr><td><pre>reqHeaders <span>=</span> <span>new</span> Headers<span>(</span><span>{</span>
+ <div>
+ <pre>reqHeaders <span>=</span> <span>new</span> Headers<span>(</span><span>{</span>
<span>"Content-Type"</span><span>:</span> <span>"text/plain"</span><span>,</span>
<span>"Content-Length"</span><span>:</span> content.<span>length</span>.<span>toString</span><span>(</span><span>)</span><span>,</span>
<span>"X-Custom-Header"</span><span>:</span> <span>"ProcessThisImmediately"</span><span>,</span>
-<span>}</span><span>)</span><span>;</span></pre>
- </td>
- </tr></tbody></table></div>
+<span>}</span><span>)</span><span>;</span></pre> </div>
+ </div>
<p>The contents can be queried and retrieved:</p>
<div>
- <table><tbody><tr><td><pre>console.<span>log</span><span>(</span>reqHeaders.<span>has</span><span>(</span><span>"Content-Type"</span><span>)</span><span>)</span><span>;</span> <span>// true</span>
+ <div>
+ <pre>console.<span>log</span><span>(</span>reqHeaders.<span>has</span><span>(</span><span>"Content-Type"</span><span>)</span><span>)</span><span>;</span> <span>// true</span>
console.<span>log</span><span>(</span>reqHeaders.<span>has</span><span>(</span><span>"Set-Cookie"</span><span>)</span><span>)</span><span>;</span> <span>// false</span>
reqHeaders.<span>set</span><span>(</span><span>"Content-Type"</span><span>,</span> <span>"text/html"</span><span>)</span><span>;</span>
reqHeaders.<span>append</span><span>(</span><span>"X-Custom-Header"</span><span>,</span> <span>"AnotherValue"</span><span>)</span><span>;</span>
+&nbsp;
console.<span>log</span><span>(</span>reqHeaders.<span>get</span><span>(</span><span>"Content-Length"</span><span>)</span><span>)</span><span>;</span> <span>// 11</span>
console.<span>log</span><span>(</span>reqHeaders.<span>getAll</span><span>(</span><span>"X-Custom-Header"</span><span>)</span><span>)</span><span>;</span> <span>// ["ProcessThisImmediately", "AnotherValue"]</span>
+&nbsp;
reqHeaders.<span>delete</span><span>(</span><span>"X-Custom-Header"</span><span>)</span><span>;</span>
-console.<span>log</span><span>(</span>reqHeaders.<span>getAll</span><span>(</span><span>"X-Custom-Header"</span><span>)</span><span>)</span><span>;</span> <span>// []</span></pre>
- </td>
- </tr></tbody></table></div>
- <p>Some of these operations are only useful in ServiceWorkers, but they provide
- <br></br>a much nicer API to Headers.</p>
- <p>Since Headers can be sent in requests, or received in responses, and have
- various limitations about what information can and should be mutable, <code>Headers</code> objects
- have a <strong>guard</strong> property. This is not exposed to the Web, but
- it affects which mutation operations are allowed on the Headers object.
- <br></br>Possible values are:</p>
- <ul><li>“none”: default.</li>
+console.<span>log</span><span>(</span>reqHeaders.<span>getAll</span><span>(</span><span>"X-Custom-Header"</span><span>)</span><span>)</span><span>;</span> <span>// []</span></pre> </div>
+ </div>
+ <p>Some of these operations are only useful in ServiceWorkers, but they provide <br/>a much nicer API to Headers.</p>
+ <p>Since Headers can be sent in requests, or received in responses, and have various limitations about what information can and should be mutable, <code>Headers</code> objects have a <strong>guard</strong> property. This is not exposed to the Web, but it affects which mutation operations are allowed on the Headers object. <br/>Possible values are:</p>
+ <ul>
+ <li>“none”: default.</li>
<li>“request”: guard for a Headers object obtained from a Request (<code>Request.headers</code>).</li>
- <li>“request-no-cors”: guard for a Headers object obtained from a Request
- created
- <br></br>with mode “no-cors”.</li>
+ <li>“request-no-cors”: guard for a Headers object obtained from a Request created <br/>with mode “no-cors”.</li>
<li>“response”: naturally, for Headers obtained from Response (<code>Response.headers</code>).</li>
- <li>“immutable”: Mostly used for ServiceWorkers, renders a Headers object
- <br></br>read-only.</li>
- </ul><p>The details of how each guard affects the behaviors of the Headers object
- are
- <br></br>in the <a href="https://fetch.spec.whatwg.org">specification</a>. For example,
- you may not append or set a “request” guarded Headers’ “Content-Length”
- header. Similarly, inserting “Set-Cookie” into a Response header is not
- allowed so that ServiceWorkers may not set cookies via synthesized Responses.</p>
- <p>All of the Headers methods throw TypeError if <code>name</code> is not a
- <a href="https://fetch.spec.whatwg.org/#concept-header-name">valid HTTP Header name</a>. The mutation operations will throw TypeError
- if there is an immutable guard. Otherwise they fail silently. For example:</p>
+ <li>“immutable”: Mostly used for ServiceWorkers, renders a Headers object <br/>read-only.</li>
+ </ul>
+ <p>The details of how each guard affects the behaviors of the Headers object are <br/>in the <a href="https://fetch.spec.whatwg.org/">specification</a>. For example, you may not append or set a “request” guarded Headers’ “Content-Length” header. Similarly, inserting “Set-Cookie” into a Response header is not allowed so that ServiceWorkers may not set cookies via synthesized Responses.</p>
+ <p>All of the Headers methods throw TypeError if <code>name</code> is not a <a href="https://fetch.spec.whatwg.org/#concept-header-name">valid HTTP Header name</a>. The mutation operations will throw TypeError if there is an immutable guard. Otherwise they fail silently. For example:</p>
<div>
- <table><tbody><tr><td><pre><span>var</span> res <span>=</span> Response.<span>error</span><span>(</span><span>)</span><span>;</span>
+ <div>
+ <pre><span>var</span> res <span>=</span> Response.<span>error</span><span>(</span><span>)</span><span>;</span>
<span>try</span> <span>{</span>
res.<span>headers</span>.<span>set</span><span>(</span><span>"Origin"</span><span>,</span> <span>"http://mybank.com"</span><span>)</span><span>;</span>
<span>}</span> <span>catch</span><span>(</span>e<span>)</span> <span>{</span>
console.<span>log</span><span>(</span><span>"Cannot pretend to be a bank!"</span><span>)</span><span>;</span>
-<span>}</span></pre>
- </td>
- </tr></tbody></table></div>
-
-<h2>Request</h2>
-
- <p>The Request interface defines a request to fetch a resource over HTTP.
- URL, method and headers are expected, but the Request also allows specifying
- a body, a request mode, credentials and cache hints.</p>
- <p>The simplest Request is of course, just a URL, as you may do to GET a
- resource.</p>
- <div>
- <table><tbody><tr><td><pre><span>var</span> req <span>=</span> <span>new</span> Request<span>(</span><span>"/index.html"</span><span>)</span><span>;</span>
+<span>}</span></pre> </div>
+ </div>
+ <h2>Request</h2>
+ <p>The Request interface defines a request to fetch a resource over HTTP. URL, method and headers are expected, but the Request also allows specifying a body, a request mode, credentials and cache hints.</p>
+ <p>The simplest Request is of course, just a URL, as you may do to GET a resource.</p>
+ <div>
+ <div>
+ <pre><span>var</span> req <span>=</span> <span>new</span> Request<span>(</span><span>"/index.html"</span><span>)</span><span>;</span>
console.<span>log</span><span>(</span>req.<span>method</span><span>)</span><span>;</span> <span>// "GET"</span>
-console.<span>log</span><span>(</span>req.<span>url</span><span>)</span><span>;</span> <span>// "http://example.com/index.html"</span></pre>
- </td>
- </tr></tbody></table></div>
- <p>You may also pass a Request to the <code>Request()</code> constructor to
- create a copy.
- <br></br>(This is not the same as calling the <code>clone()</code> method, which
- is covered in
- <br></br>the “Reading bodies” section.).</p>
- <div>
- <table><tbody><tr><td><pre><span>var</span> copy <span>=</span> <span>new</span> Request<span>(</span>req<span>)</span><span>;</span>
+console.<span>log</span><span>(</span>req.<span>url</span><span>)</span><span>;</span> <span>// "http://example.com/index.html"</span></pre> </div>
+ </div>
+ <p>You may also pass a Request to the <code>Request()</code> constructor to create a copy. <br/>(This is not the same as calling the <code>clone()</code> method, which is covered in <br/>the “Reading bodies” section.).</p>
+ <div>
+ <div>
+ <pre><span>var</span> copy <span>=</span> <span>new</span> Request<span>(</span>req<span>)</span><span>;</span>
console.<span>log</span><span>(</span>copy.<span>method</span><span>)</span><span>;</span> <span>// "GET"</span>
-console.<span>log</span><span>(</span>copy.<span>url</span><span>)</span><span>;</span> <span>// "http://example.com/index.html"</span></pre>
- </td>
- </tr></tbody></table></div>
- <p>Again, this form is probably only useful in ServiceWorkers.</p>
- <p>The non-URL attributes of the <code>Request</code> can only be set by passing
- initial
- <br></br>values as a second argument to the constructor. This argument is a dictionary.</p>
- <div>
- <table><tbody><tr><td><pre><span>var</span> uploadReq <span>=</span> <span>new</span> Request<span>(</span><span>"/uploadImage"</span><span>,</span> <span>{</span>
+console.<span>log</span><span>(</span>copy.<span>url</span><span>)</span><span>;</span> <span>// "http://example.com/index.html"</span></pre> </div>
+ </div>
+ <p>Again, this form is probably only useful in ServiceWorkers.</p>
+ <p>The non-URL attributes of the <code>Request</code> can only be set by passing initial <br/>values as a second argument to the constructor. This argument is a dictionary.</p>
+ <div>
+ <div>
+ <pre><span>var</span> uploadReq <span>=</span> <span>new</span> Request<span>(</span><span>"/uploadImage"</span><span>,</span> <span>{</span>
method<span>:</span> <span>"POST"</span><span>,</span>
headers<span>:</span> <span>{</span>
<span>"Content-Type"</span><span>:</span> <span>"image/png"</span><span>,</span>
<span>}</span><span>,</span>
body<span>:</span> <span>"image data"</span>
-<span>}</span><span>)</span><span>;</span></pre>
- </td>
- </tr></tbody></table></div>
- <p>The Request’s mode is used to determine if cross-origin requests lead
- to valid responses, and which properties on the response are readable.
- Legal mode values are <code>"same-origin"</code>, <code>"no-cors"</code> (default)
- and <code>"cors"</code>.</p>
- <p>The <code>"same-origin"</code> mode is simple, if a request is made to another
- origin with this mode set, the result is simply an error. You could use
- this to ensure that
- <br></br>a request is always being made to your origin.</p>
+<span>}</span><span>)</span><span>;</span></pre> </div>
+ </div>
+ <p>The Request’s mode is used to determine if cross-origin requests lead to valid responses, and which properties on the response are readable. Legal mode values are <code>"same-origin"</code>, <code>"no-cors"</code> (default) and <code>"cors"</code>.</p>
+ <p>The <code>"same-origin"</code> mode is simple, if a request is made to another origin with this mode set, the result is simply an error. You could use this to ensure that <br/>a request is always being made to your origin.</p>
<div>
- <table><tbody><tr><td><pre><span>var</span> arbitraryUrl <span>=</span> document.<span>getElementById</span><span>(</span><span>"url-input"</span><span>)</span>.<span>value</span><span>;</span>
+ <div>
+ <pre><span>var</span> arbitraryUrl <span>=</span> document.<span>getElementById</span><span>(</span><span>"url-input"</span><span>)</span>.<span>value</span><span>;</span>
fetch<span>(</span>arbitraryUrl<span>,</span> <span>{</span> mode<span>:</span> <span>"same-origin"</span> <span>}</span><span>)</span>.<span>then</span><span>(</span><span>function</span><span>(</span>res<span>)</span> <span>{</span>
console.<span>log</span><span>(</span><span>"Response succeeded?"</span><span>,</span> res.<span>ok</span><span>)</span><span>;</span>
<span>}</span><span>,</span> <span>function</span><span>(</span>e<span>)</span> <span>{</span>
console.<span>log</span><span>(</span><span>"Please enter a same-origin URL!"</span><span>)</span><span>;</span>
-<span>}</span><span>)</span><span>;</span></pre>
- </td>
- </tr></tbody></table></div>
- <p>The <code>"no-cors"</code> mode captures what the web platform does by default
- for scripts you import from CDNs, images hosted on other domains, and so
- on. First, it prevents the method from being anything other than “HEAD”,
- “GET” or “POST”. Second, if any ServiceWorkers intercept these requests,
- they may not add or override any headers except for <a href="https://fetch.spec.whatwg.org/#simple-header">these</a>.
- Third, JavaScript may not access any properties of the resulting Response.
- This ensures that ServiceWorkers do not affect the semantics of the Web
- and prevents security and privacy issues that could arise from leaking
- data across domains.</p>
- <p><code>"cors"</code> mode is what you’ll usually use to make known cross-origin
- requests to access various APIs offered by other vendors. These are expected
- to adhere to
- <br></br>the <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS">CORS protocol</a>.
- Only a <a href="https://fetch.spec.whatwg.org/#concept-filtered-response-cors">limited set</a> of
- headers is exposed in the Response, but the body is readable. For example,
- you could get a list of Flickr’s <a href="https://www.flickr.com/services/api/flickr.interestingness.getList.html">most interesting</a> photos
- today like this:</p>
+<span>}</span><span>)</span><span>;</span></pre> </div>
+ </div>
+ <p>The <code>"no-cors"</code> mode captures what the web platform does by default for scripts you import from CDNs, images hosted on other domains, and so on. First, it prevents the method from being anything other than “HEAD”, “GET” or “POST”. Second, if any ServiceWorkers intercept these requests, they may not add or override any headers except for <a href="https://fetch.spec.whatwg.org/#simple-header">these</a>. Third, JavaScript may not access any properties of the resulting Response. This ensures that ServiceWorkers do not affect the semantics of the Web and prevents security and privacy issues that could arise from leaking data across domains.</p>
+ <p><code>"cors"</code> mode is what you’ll usually use to make known cross-origin requests to access various APIs offered by other vendors. These are expected to adhere to <br/>the <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS">CORS protocol</a>. Only a <a href="https://fetch.spec.whatwg.org/#concept-filtered-response-cors">limited set</a> of headers is exposed in the Response, but the body is readable. For example, you could get a list of Flickr’s <a href="https://www.flickr.com/services/api/flickr.interestingness.getList.html">most interesting</a> photos today like this:</p>
<div>
- <table><tbody><tr><td><pre><span>var</span> u <span>=</span> <span>new</span> URLSearchParams<span>(</span><span>)</span><span>;</span>
+ <div>
+ <pre><span>var</span> u <span>=</span> <span>new</span> URLSearchParams<span>(</span><span>)</span><span>;</span>
u.<span>append</span><span>(</span><span>'method'</span><span>,</span> <span>'flickr.interestingness.getList'</span><span>)</span><span>;</span>
u.<span>append</span><span>(</span><span>'api_key'</span><span>,</span> <span>'&lt;insert api key here&gt;'</span><span>)</span><span>;</span>
u.<span>append</span><span>(</span><span>'format'</span><span>,</span> <span>'json'</span><span>)</span><span>;</span>
u.<span>append</span><span>(</span><span>'nojsoncallback'</span><span>,</span> <span>'1'</span><span>)</span><span>;</span>
+&nbsp;
<span>var</span> apiCall <span>=</span> fetch<span>(</span><span>'https://api.flickr.com/services/rest?'</span> <span>+</span> u<span>)</span><span>;</span>
+&nbsp;
apiCall.<span>then</span><span>(</span><span>function</span><span>(</span>response<span>)</span> <span>{</span>
<span>return</span> response.<span>json</span><span>(</span><span>)</span>.<span>then</span><span>(</span><span>function</span><span>(</span>json<span>)</span> <span>{</span>
<span>// photo is a list of photos.</span>
@@ -235,198 +162,117 @@ apiCall.<span>then</span><span>(</span><span>function</span><span>(</span>respon
photos.<span>forEach</span><span>(</span><span>function</span><span>(</span>photo<span>)</span> <span>{</span>
console.<span>log</span><span>(</span>photo.<span>title</span><span>)</span><span>;</span>
<span>}</span><span>)</span><span>;</span>
-<span>}</span><span>)</span><span>;</span></pre>
- </td>
- </tr></tbody></table></div>
- <p>You may not read out the “Date” header since Flickr does not allow it
- via
- <br></br><code>Access-Control-Expose-Headers</code>.</p>
+<span>}</span><span>)</span><span>;</span></pre> </div>
+ </div>
+ <p>You may not read out the “Date” header since Flickr does not allow it via <br/> <code>Access-Control-Expose-Headers</code>.</p>
<div>
- <table><tbody><tr><td><pre>response.<span>headers</span>.<span>get</span><span>(</span><span>"Date"</span><span>)</span><span>;</span> <span>// null</span></pre>
- </td>
- </tr></tbody></table></div>
- <p>The <code>credentials</code> enumeration determines if cookies for the other
- domain are
- <br></br>sent to cross-origin requests. This is similar to XHR’s <code>withCredentials</code>
- <br></br>flag, but tri-valued as <code>"omit"</code> (default), <code>"same-origin"</code> and <code>"include"</code>.</p>
- <p>The Request object will also give the ability to offer caching hints to
- the user-agent. This is currently undergoing some <a href="https://github.com/slightlyoff/ServiceWorker/issues/585">security review</a>.
- Firefox exposes the attribute, but it has no effect.</p>
- <p>Requests have two read-only attributes that are relevant to ServiceWorkers
- <br></br>intercepting them. There is the string <code>referrer</code>, which is
- set by the UA to be
- <br></br>the referrer of the Request. This may be an empty string. The other is
- <br></br><code>context</code> which is a rather <a href="https://fetch.spec.whatwg.org/#requestcredentials">large enumeration</a> defining
- what sort of resource is being fetched. This could be “image” if the request
- is from an
- &lt;img&gt;tag in the controlled document, “worker” if it is an attempt to load a
- worker script, and so on. When used with the <code>fetch()</code> function,
- it is “fetch”.</p>
-
-<h2>Response</h2>
-
- <p><code>Response</code> instances are returned by calls to <code>fetch()</code>.
- They can also be created by JS, but this is only useful in ServiceWorkers.</p>
- <p>We have already seen some attributes of Response when we looked at <code>fetch()</code>.
- The most obvious candidates are <code>status</code>, an integer (default
- value 200) and <code>statusText</code> (default value “OK”), which correspond
- to the HTTP status code and reason. The <code>ok</code> attribute is just
- a shorthand for checking that <code>status</code> is in the range 200-299
- inclusive.</p>
- <p><code>headers</code> is the Response’s Headers object, with guard “response”.
- The <code>url</code> attribute reflects the URL of the corresponding request.</p>
- <p>Response also has a <code>type</code>, which is “basic”, “cors”, “default”,
- “error” or
- <br></br>“opaque”.</p>
- <ul><li><code>"basic"</code>: normal, same origin response, with all headers exposed
- except
- <br></br>“Set-Cookie” and “Set-Cookie2″.</li>
- <li><code>"cors"</code>: response was received from a valid cross-origin request.
- <a href="https://fetch.spec.whatwg.org/#concept-filtered-response-cors">Certain headers and the body</a>may be accessed.</li>
- <li><code>"error"</code>: network error. No useful information describing
- the error is available. The Response’s status is 0, headers are empty and
- immutable. This is the type for a Response obtained from <code>Response.error()</code>.</li>
- <li><code>"opaque"</code>: response for “no-cors” request to cross-origin
- resource. <a href="https://fetch.spec.whatwg.org/#concept-filtered-response-opaque">Severely<br></br>
- restricted</a>
- </li>
- </ul><p>The “error” type results in the <code>fetch()</code> Promise rejecting with
- TypeError.</p>
- <p>There are certain attributes that are useful only in a ServiceWorker scope.
- The
- <br></br>idiomatic way to return a Response to an intercepted request in ServiceWorkers
- is:</p>
+ <div>
+ <pre>response.<span>headers</span>.<span>get</span><span>(</span><span>"Date"</span><span>)</span><span>;</span> <span>// null</span></pre> </div>
+ </div>
+ <p>The <code>credentials</code> enumeration determines if cookies for the other domain are <br/>sent to cross-origin requests. This is similar to XHR’s <code>withCredentials</code> <br/>flag, but tri-valued as <code>"omit"</code> (default), <code>"same-origin"</code> and <code>"include"</code>.</p>
+ <p>The Request object will also give the ability to offer caching hints to the user-agent. This is currently undergoing some <a href="https://github.com/slightlyoff/ServiceWorker/issues/585">security review</a>. Firefox exposes the attribute, but it has no effect.</p>
+ <p>Requests have two read-only attributes that are relevant to ServiceWorkers <br/>intercepting them. There is the string <code>referrer</code>, which is set by the UA to be <br/>the referrer of the Request. This may be an empty string. The other is <br/> <code>context</code> which is a rather <a href="https://fetch.spec.whatwg.org/#requestcredentials">large enumeration</a> defining what sort of resource is being fetched. This could be “image” if the request is from an &lt;img&gt;tag in the controlled document, “worker” if it is an attempt to load a worker script, and so on. When used with the <code>fetch()</code> function, it is “fetch”.</p>
+ <h2>Response</h2>
+ <p><code>Response</code> instances are returned by calls to <code>fetch()</code>. They can also be created by JS, but this is only useful in ServiceWorkers.</p>
+ <p>We have already seen some attributes of Response when we looked at <code>fetch()</code>. The most obvious candidates are <code>status</code>, an integer (default value 200) and <code>statusText</code> (default value “OK”), which correspond to the HTTP status code and reason. The <code>ok</code> attribute is just a shorthand for checking that <code>status</code> is in the range 200-299 inclusive.</p>
+ <p><code>headers</code> is the Response’s Headers object, with guard “response”. The <code>url</code> attribute reflects the URL of the corresponding request.</p>
+ <p>Response also has a <code>type</code>, which is “basic”, “cors”, “default”, “error” or <br/>“opaque”.</p>
+ <ul>
+ <li><code>"basic"</code>: normal, same origin response, with all headers exposed except <br/>“Set-Cookie” and “Set-Cookie2″.</li>
+ <li><code>"cors"</code>: response was received from a valid cross-origin request. <a href="https://fetch.spec.whatwg.org/#concept-filtered-response-cors">Certain headers and the body</a>may be accessed.</li>
+ <li><code>"error"</code>: network error. No useful information describing the error is available. The Response’s status is 0, headers are empty and immutable. This is the type for a Response obtained from <code>Response.error()</code>.</li>
+ <li><code>"opaque"</code>: response for “no-cors” request to cross-origin resource. <a href="https://fetch.spec.whatwg.org/#concept-filtered-response-opaque">Severely<br/>
+ restricted</a> </li>
+ </ul>
+ <p>The “error” type results in the <code>fetch()</code> Promise rejecting with TypeError.</p>
+ <p>There are certain attributes that are useful only in a ServiceWorker scope. The <br/>idiomatic way to return a Response to an intercepted request in ServiceWorkers is:</p>
<div>
- <table><tbody><tr><td><pre>addEventListener<span>(</span><span>'fetch'</span><span>,</span> <span>function</span><span>(</span>event<span>)</span> <span>{</span>
+ <div>
+ <pre>addEventListener<span>(</span><span>'fetch'</span><span>,</span> <span>function</span><span>(</span>event<span>)</span> <span>{</span>
event.<span>respondWith</span><span>(</span><span>new</span> Response<span>(</span><span>"Response body"</span><span>,</span> <span>{</span>
headers<span>:</span> <span>{</span> <span>"Content-Type"</span> <span>:</span> <span>"text/plain"</span> <span>}</span>
<span>}</span><span>)</span><span>;</span>
-<span>}</span><span>)</span><span>;</span></pre>
- </td>
- </tr></tbody></table></div>
- <p>As you can see, Response has a two argument constructor, where both arguments
- are optional. The first argument is a body initializer, and the second
- is a dictionary to set the <code>status</code>, <code>statusText</code> and <code>headers</code>.</p>
- <p>The static method <code>Response.error()</code> simply returns an error
- response. Similarly, <code>Response.redirect(url, status)</code> returns
- a Response resulting in
- <br></br>a redirect to <code>url</code>.</p>
-
-<h2>Dealing with bodies</h2>
-
- <p>Both Requests and Responses may contain body data. We’ve been glossing
- over it because of the various data types body may contain, but we will
- cover it in detail now.</p>
+<span>}</span><span>)</span><span>;</span></pre> </div>
+ </div>
+ <p>As you can see, Response has a two argument constructor, where both arguments are optional. The first argument is a body initializer, and the second is a dictionary to set the <code>status</code>, <code>statusText</code> and <code>headers</code>.</p>
+ <p>The static method <code>Response.error()</code> simply returns an error response. Similarly, <code>Response.redirect(url, status)</code> returns a Response resulting in <br/>a redirect to <code>url</code>.</p>
+ <h2>Dealing with bodies</h2>
+ <p>Both Requests and Responses may contain body data. We’ve been glossing over it because of the various data types body may contain, but we will cover it in detail now.</p>
<p>A body is an instance of any of the following types.</p>
- <ul><li><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer">ArrayBuffer</a>
- </li>
- <li><a href="https://developer.mozilla.org/en-US/docs/Web/API/ArrayBufferView">ArrayBufferView</a> (Uint8Array
- and friends)</li>
- <li><a href="https://developer.mozilla.org/en-US/docs/Web/API/Blob">Blob</a>/
- <a href="https://developer.mozilla.org/en-US/docs/Web/API/File">File</a>
- </li>
+ <ul>
+ <li><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer">ArrayBuffer</a> </li>
+ <li><a href="https://developer.mozilla.org/en-US/docs/Web/API/ArrayBufferView">ArrayBufferView</a> (Uint8Array and friends)</li>
+ <li><a href="https://developer.mozilla.org/en-US/docs/Web/API/Blob">Blob</a>/ <a href="https://developer.mozilla.org/en-US/docs/Web/API/File">File</a> </li>
<li>string</li>
- <li><a href="https://url.spec.whatwg.org/#interface-urlsearchparams">URLSearchParams</a>
- </li>
- <li><a href="https://developer.mozilla.org/en-US/docs/Web/API/FormData">FormData</a> –
- currently not supported by either Gecko or Blink. Firefox expects to ship
- this in version 39 along with the rest of Fetch.</li>
- </ul><p>In addition, Request and Response both offer the following methods to
- extract their body. These all return a Promise that is eventually resolved
- with the actual content.</p>
- <ul><li><code>arrayBuffer()</code>
- </li>
- <li><code>blob()</code>
- </li>
- <li><code>json()</code>
- </li>
- <li><code>text()</code>
- </li>
- <li><code>formData()</code>
- </li>
- </ul><p>This is a significant improvement over XHR in terms of ease of use of
- non-text data!</p>
+ <li><a href="https://url.spec.whatwg.org/#interface-urlsearchparams">URLSearchParams</a> </li>
+ <li><a href="https://developer.mozilla.org/en-US/docs/Web/API/FormData">FormData</a> – currently not supported by either Gecko or Blink. Firefox expects to ship this in version 39 along with the rest of Fetch.</li>
+ </ul>
+ <p>In addition, Request and Response both offer the following methods to extract their body. These all return a Promise that is eventually resolved with the actual content.</p>
+ <ul>
+ <li><code>arrayBuffer()</code> </li>
+ <li><code>blob()</code> </li>
+ <li><code>json()</code> </li>
+ <li><code>text()</code> </li>
+ <li><code>formData()</code> </li>
+ </ul>
+ <p>This is a significant improvement over XHR in terms of ease of use of non-text data!</p>
<p>Request bodies can be set by passing <code>body</code> parameters:</p>
<div>
- <table><tbody><tr><td><pre><span>var</span> form <span>=</span> <span>new</span> FormData<span>(</span>document.<span>getElementById</span><span>(</span><span>'login-form'</span><span>)</span><span>)</span><span>;</span>
+ <div>
+ <pre><span>var</span> form <span>=</span> <span>new</span> FormData<span>(</span>document.<span>getElementById</span><span>(</span><span>'login-form'</span><span>)</span><span>)</span><span>;</span>
fetch<span>(</span><span>"/login"</span><span>,</span> <span>{</span>
method<span>:</span> <span>"POST"</span><span>,</span>
body<span>:</span> form
-<span>}</span><span>)</span></pre>
- </td>
- </tr></tbody></table></div>
- <p>Responses take the first argument as the body.</p>
+<span>}</span><span>)</span></pre> </div>
+ </div>
+ <p>Responses take the first argument as the body.</p>
+ <div>
<div>
- <table><tbody><tr><td><pre><span>var</span> res <span>=</span> <span>new</span> Response<span>(</span><span>new</span> File<span>(</span><span>[</span><span>"chunk"</span><span>,</span> <span>"chunk"</span><span>]</span><span>,</span> <span>"archive.zip"</span><span>,</span>
- <span>{</span> type<span>:</span> <span>"application/zip"</span> <span>}</span><span>)</span><span>)</span><span>;</span></pre>
- </td>
- </tr></tbody></table></div>
- <p>Both Request and Response (and by extension the <code>fetch()</code> function),
- will try to intelligently <a href="https://fetch.spec.whatwg.org/#concept-bodyinit-extract">determine the content type</a>.
- Request will also automatically set a “Content-Type” header if none is
- set in the dictionary.</p>
-
-<h3>Streams and cloning</h3>
-
- <p>It is important to realise that Request and Response bodies can only be
- read once! Both interfaces have a boolean attribute <code>bodyUsed</code> to
- determine if it is safe to read or not.</p>
+ <pre><span>var</span> res <span>=</span> <span>new</span> Response<span>(</span><span>new</span> File<span>(</span><span>[</span><span>"chunk"</span><span>,</span> <span>"chunk"</span><span>]</span><span>,</span> <span>"archive.zip"</span><span>,</span>
+ <span>{</span> type<span>:</span> <span>"application/zip"</span> <span>}</span><span>)</span><span>)</span><span>;</span></pre> </div>
+ </div>
+ <p>Both Request and Response (and by extension the <code>fetch()</code> function), will try to intelligently <a href="https://fetch.spec.whatwg.org/#concept-bodyinit-extract">determine the content type</a>. Request will also automatically set a “Content-Type” header if none is set in the dictionary.</p>
+ <h3>Streams and cloning</h3>
+ <p>It is important to realise that Request and Response bodies can only be read once! Both interfaces have a boolean attribute <code>bodyUsed</code> to determine if it is safe to read or not.</p>
+ <div>
<div>
- <table><tbody><tr><td><pre><span>var</span> res <span>=</span> <span>new</span> Response<span>(</span><span>"one time use"</span><span>)</span><span>;</span>
+ <pre><span>var</span> res <span>=</span> <span>new</span> Response<span>(</span><span>"one time use"</span><span>)</span><span>;</span>
console.<span>log</span><span>(</span>res.<span>bodyUsed</span><span>)</span><span>;</span> <span>// false</span>
res.<span>text</span><span>(</span><span>)</span>.<span>then</span><span>(</span><span>function</span><span>(</span>v<span>)</span> <span>{</span>
console.<span>log</span><span>(</span>res.<span>bodyUsed</span><span>)</span><span>;</span> <span>// true</span>
<span>}</span><span>)</span><span>;</span>
console.<span>log</span><span>(</span>res.<span>bodyUsed</span><span>)</span><span>;</span> <span>// true</span>
+&nbsp;
res.<span>text</span><span>(</span><span>)</span>.<span>catch</span><span>(</span><span>function</span><span>(</span>e<span>)</span> <span>{</span>
console.<span>log</span><span>(</span><span>"Tried to read already consumed Response"</span><span>)</span><span>;</span>
-<span>}</span><span>)</span><span>;</span></pre>
- </td>
- </tr></tbody></table></div>
- <p>This decision allows easing the transition to an eventual <a href="https://streams.spec.whatwg.org/">stream-based</a> Fetch
- API. The intention is to let applications consume data as it arrives, allowing
- for JavaScript to deal with larger files like videos, and perform things
- like compression and editing on the fly.</p>
- <p>Often, you’ll want access to the body multiple times. For example, you
- can use the upcoming <a href="http://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html#cache-objects">Cache API</a> to
- store Requests and Responses for offline use, and Cache requires bodies
- to be available for reading.</p>
- <p>So how do you read out the body multiple times within such constraints?
- The API provides a <code>clone()</code> method on the two interfaces. This
- will return a clone of the object, with a ‘new’ body. <code>clone()</code> MUST
- be called before the body of the corresponding object has been used. That
- is, <code>clone()</code> first, read later.</p>
+<span>}</span><span>)</span><span>;</span></pre> </div>
+ </div>
+ <p>This decision allows easing the transition to an eventual <a href="https://streams.spec.whatwg.org/">stream-based</a> Fetch API. The intention is to let applications consume data as it arrives, allowing for JavaScript to deal with larger files like videos, and perform things like compression and editing on the fly.</p>
+ <p>Often, you’ll want access to the body multiple times. For example, you can use the upcoming <a href="http://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html#cache-objects">Cache API</a> to store Requests and Responses for offline use, and Cache requires bodies to be available for reading.</p>
+ <p>So how do you read out the body multiple times within such constraints? The API provides a <code>clone()</code> method on the two interfaces. This will return a clone of the object, with a ‘new’ body. <code>clone()</code> MUST be called before the body of the corresponding object has been used. That is, <code>clone()</code> first, read later.</p>
+ <div>
<div>
- <table><tbody><tr><td><pre>addEventListener<span>(</span><span>'fetch'</span><span>,</span> <span>function</span><span>(</span>evt<span>)</span> <span>{</span>
+ <pre>addEventListener<span>(</span><span>'fetch'</span><span>,</span> <span>function</span><span>(</span>evt<span>)</span> <span>{</span>
<span>var</span> sheep <span>=</span> <span>new</span> Response<span>(</span><span>"Dolly"</span><span>)</span><span>;</span>
console.<span>log</span><span>(</span>sheep.<span>bodyUsed</span><span>)</span><span>;</span> <span>// false</span>
<span>var</span> clone <span>=</span> sheep.<span>clone</span><span>(</span><span>)</span><span>;</span>
console.<span>log</span><span>(</span>clone.<span>bodyUsed</span><span>)</span><span>;</span> <span>// false</span>
+&nbsp;
clone.<span>text</span><span>(</span><span>)</span><span>;</span>
console.<span>log</span><span>(</span>sheep.<span>bodyUsed</span><span>)</span><span>;</span> <span>// false</span>
console.<span>log</span><span>(</span>clone.<span>bodyUsed</span><span>)</span><span>;</span> <span>// true</span>
+&nbsp;
evt.<span>respondWith</span><span>(</span>cache.<span>add</span><span>(</span>sheep.<span>clone</span><span>(</span><span>)</span><span>)</span>.<span>then</span><span>(</span><span>function</span><span>(</span>e<span>)</span> <span>{</span>
<span>return</span> sheep<span>;</span>
<span>}</span><span>)</span><span>;</span>
-<span>}</span><span>)</span><span>;</span></pre>
- </td>
- </tr></tbody></table></div>
-
-<h2>Future improvements</h2>
-
- <p>Along with the transition to streams, Fetch will eventually have the ability
- to abort running <code>fetch()</code>es and some way to report the progress
- of a fetch. These are provided by XHR, but are a little tricky to fit in
- the Promise-based nature of the Fetch API.</p>
- <p>You can contribute to the evolution of this API by participating in discussions
- on the <a href="https://whatwg.org/mailing-list">WHATWG mailing list</a> and
- in the issues in the <a href="https://www.w3.org/Bugs/Public/buglist.cgi?product=WHATWG&amp;component=Fetch&amp;resolution=---">Fetch</a> and
- <a href="https://github.com/slightlyoff/ServiceWorker/issues">ServiceWorker</a>specifications.</p>
- <p>For a better web!</p>
- <p><em>The author would like to thank Andrea Marchesini, Anne van Kesteren and Ben<br></br>
-Kelly for helping with the specification and implementation.</em>
- </p>
- </article></div> \ No newline at end of file
+<span>}</span><span>)</span><span>;</span></pre> </div>
+ </div>
+ <h2>Future improvements</h2>
+ <p>Along with the transition to streams, Fetch will eventually have the ability to abort running <code>fetch()</code>es and some way to report the progress of a fetch. These are provided by XHR, but are a little tricky to fit in the Promise-based nature of the Fetch API.</p>
+ <p>You can contribute to the evolution of this API by participating in discussions on the <a href="https://whatwg.org/mailing-list">WHATWG mailing list</a> and in the issues in the <a href="https://www.w3.org/Bugs/Public/buglist.cgi?product=WHATWG&amp;component=Fetch&amp;resolution=---">Fetch</a> and <a href="https://github.com/slightlyoff/ServiceWorker/issues">ServiceWorker</a>specifications.</p>
+ <p>For a better web!</p>
+ <p><em>The author would like to thank Andrea Marchesini, Anne van Kesteren and Ben<br/>
+Kelly for helping with the specification and implementation.</em> </p>
+ </article>
+ </div>
+</div> \ No newline at end of file
diff --git a/test/test-pages/base-url-base-element-relative/expected.html b/test/test-pages/base-url-base-element-relative/expected.html
index 14d23f6..29e7ac5 100644
--- a/test/test-pages/base-url-base-element-relative/expected.html
+++ b/test/test-pages/base-url-base-element-relative/expected.html
@@ -1,33 +1,22 @@
-<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>Links</p>
- <p><a href="http://fakehost/test/base/foo/bar/baz.html">link</a></p>
- <p><a href="http://fakehost/test/base/foo/bar/baz.html">link</a></p>
- <p><a href="http://fakehost/foo/bar/baz.html">link</a></p>
- <p><a href="#foo">link</a></p>
- <p><a href="http://fakehost/test/base/baz.html#foo">link</a></p>
- <p><a href="http://fakehost/foo/bar/baz.html#foo">link</a></p>
- <p><a href="http://test/foo/bar/baz.html">link</a></p>
- <p><a href="https://test/foo/bar/baz.html">link</a></p>
- <p>Images</p>
- <p><img src="http://fakehost/test/base/foo/bar/baz.png"></img></p>
- <p><img src="http://fakehost/test/base/foo/bar/baz.png"></img></p>
- <p><img src="http://fakehost/foo/bar/baz.png"></img></p>
- <p><img src="http://test/foo/bar/baz.png"></img></p>
- <p><img src="https://test/foo/bar/baz.png"></img></p>
- <h2>Foo</h2>
- <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
+<div id="readability-page-1" class="page">
+ <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>Links</p>
+ <p><a href="http://fakehost/test/base/foo/bar/baz.html">link</a></p>
+ <p><a href="http://fakehost/test/base/foo/bar/baz.html">link</a></p>
+ <p><a href="http://fakehost/foo/bar/baz.html">link</a></p>
+ <p><a href="http://fakehost/test/base/#foo">link</a></p>
+ <p><a href="http://fakehost/test/base/baz.html#foo">link</a></p>
+ <p><a href="http://fakehost/foo/bar/baz.html#foo">link</a></p>
+ <p><a href="http://test/foo/bar/baz.html">link</a></p>
+ <p><a href="https://test/foo/bar/baz.html">link</a></p>
+ <p>Images</p>
+ <p><img src="http://fakehost/test/base/foo/bar/baz.png"/></p>
+ <p><img src="http://fakehost/test/base/foo/bar/baz.png"/></p>
+ <p><img src="http://fakehost/foo/bar/baz.png"/></p>
+ <p><img src="http://test/foo/bar/baz.png"/></p>
+ <p><img src="https://test/foo/bar/baz.png"/></p>
+ <h2>Foo</h2>
+ <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>
+</div>
diff --git a/test/test-pages/base-url-base-element/expected.html b/test/test-pages/base-url-base-element/expected.html
index 5037eb2..7a52ff8 100644
--- a/test/test-pages/base-url-base-element/expected.html
+++ b/test/test-pages/base-url-base-element/expected.html
@@ -1,33 +1,22 @@
-<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>Links</p>
- <p><a href="http://fakehost/foo/bar/baz.html">link</a></p>
- <p><a href="http://fakehost/foo/bar/baz.html">link</a></p>
- <p><a href="http://fakehost/foo/bar/baz.html">link</a></p>
- <p><a href="#foo">link</a></p>
- <p><a href="http://fakehost/baz.html#foo">link</a></p>
- <p><a href="http://fakehost/foo/bar/baz.html#foo">link</a></p>
- <p><a href="http://test/foo/bar/baz.html">link</a></p>
- <p><a href="https://test/foo/bar/baz.html">link</a></p>
- <p>Images</p>
- <p><img src="http://fakehost/foo/bar/baz.png"></img></p>
- <p><img src="http://fakehost/foo/bar/baz.png"></img></p>
- <p><img src="http://fakehost/foo/bar/baz.png"></img></p>
- <p><img src="http://test/foo/bar/baz.png"></img></p>
- <p><img src="https://test/foo/bar/baz.png"></img></p>
- <h2>Foo</h2>
- <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
+<div id="readability-page-1" class="page">
+ <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>Links</p>
+ <p><a href="http://fakehost/foo/bar/baz.html">link</a></p>
+ <p><a href="http://fakehost/foo/bar/baz.html">link</a></p>
+ <p><a href="http://fakehost/foo/bar/baz.html">link</a></p>
+ <p><a href="http://fakehost/#foo">link</a></p>
+ <p><a href="http://fakehost/baz.html#foo">link</a></p>
+ <p><a href="http://fakehost/foo/bar/baz.html#foo">link</a></p>
+ <p><a href="http://test/foo/bar/baz.html">link</a></p>
+ <p><a href="https://test/foo/bar/baz.html">link</a></p>
+ <p>Images</p>
+ <p><img src="http://fakehost/foo/bar/baz.png"/></p>
+ <p><img src="http://fakehost/foo/bar/baz.png"/></p>
+ <p><img src="http://fakehost/foo/bar/baz.png"/></p>
+ <p><img src="http://test/foo/bar/baz.png"/></p>
+ <p><img src="https://test/foo/bar/baz.png"/></p>
+ <h2>Foo</h2>
+ <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>
+</div>
diff --git a/test/test-pages/basic-tags-cleaning/expected.html b/test/test-pages/basic-tags-cleaning/expected.html
index 2701fed..9da6a53 100644
--- a/test/test-pages/basic-tags-cleaning/expected.html
+++ b/test/test-pages/basic-tags-cleaning/expected.html
@@ -4,7 +4,7 @@
<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>
@@ -12,7 +12,6 @@
<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>
diff --git a/test/test-pages/bbc-1/expected-metadata.json b/test/test-pages/bbc-1/expected-metadata.json
index 7569b8f..545e317 100644
--- a/test/test-pages/bbc-1/expected-metadata.json
+++ b/test/test-pages/bbc-1/expected-metadata.json
@@ -1,5 +1,5 @@
{
- "Title": "Obama admits US gun laws are his 'biggest frustration'",
+ "Title": "Obama admits US gun laws are his 'biggest frustration' - BBC News",
"Author": null,
- "Excerpt": "President Barack Obama tells the BBC his failure to pass"
+ "Excerpt": "President Barack Obama tells the BBC his failure to pass \"common sense gun safety laws\" is the greatest frustration of his presidency."
}
diff --git a/test/test-pages/blogger/expected.html b/test/test-pages/blogger/expected.html
index 10b4874..52c1ab5 100644
--- a/test/test-pages/blogger/expected.html
+++ b/test/test-pages/blogger/expected.html
@@ -1,57 +1,111 @@
-<div id="post-body-932306423056216142" itemprop="description articleBody"><p>
- I've written a couple of posts in the past few months but they were all for </p><a href="http://blog.ioactive.com/search/label/Andrew%20Zonenberg">the blog at work</a><p> so I figured I'm long overdue for one on Silicon Exposed.</p><p><h2>
- So what's a GreenPak?</h2>
- </p><p> Silego Technology is a fabless semiconductor company located in the SF Bay area, which makes (among other things) a line of programmable logic devices known as GreenPak. Their </p><a href="http://www.silego.com/products/greenpak5.html">5th generation parts</a><p> were just announced, but I started this project before that happened so I'm still targeting the </p><a href="http://www.silego.com/products/greenpak4.html">4th generation</a><p>.</p><p> GreenPak devices are kind of like itty bitty <a href="http://www.cypress.com/products/32-bit-arm-cortex-m-psoc">PSoCs</a> - they have a mixed signal fabric with an ADC, DACs, comparators, voltage references, plus a digital LUT/FF fabric and some typical digital MCU peripherals like counters and oscillators (but no CPU).</p><p> It's actually an interesting architecture - FPGAs (including some devices marketed as CPLDs) are a 2D array of LUTs connected via wires to adjacent cells, and true (product term) CPLDs are a star topology of AND-OR arrays connected by a crossbar. GreenPak, on the other hand, is a star topology of LUTs, flipflops, and analog/digital hard IP connected to a crossbar.</p><p> Without further ado, here's a block diagram showing all the cool stuff you get in the SLG46620V:</p><p><table><tbody><tr><td>
- <a href="https://1.bp.blogspot.com/-YIPC5jkXkDE/Vy7YPSqFKWI/AAAAAAAAAxI/a7D6Ji2GxoUvcrwUkI4RLZcr2LFQEJCTACLcB/s1600/block-diagram.png" imageanchor="1"><img height="512" src="https://1.bp.blogspot.com/-YIPC5jkXkDE/Vy7YPSqFKWI/AAAAAAAAAxI/a7D6Ji2GxoUvcrwUkI4RLZcr2LFQEJCTACLcB/s640/block-diagram.png" width="640"></img></a>
- </td>
- </tr><tr><td>SLG46620V block diagram (from device datasheet)</td>
- </tr></tbody></table>
- They're also tiny (the SLG46620V is a 20-pin 0.4mm pitch STQFN measuring 2x3 mm, and the lower gate count SLG46140V is a mere 1.6x2 mm) and probably the cheapest programmable logic device on the market - $0.50 in low volume and less than $0.40 in larger quantities.</p><p> The Vdd range of GreenPak4 is huge, more like what you'd expect from an MCU than an FPGA! It can run on anything from 1.8 to 5V, although performance is only specified at 1.8, 3.3, and 5V nominal voltages. There's also a dual-rail version that trades one of the GPIO pins for a second power supply pin, allowing you to interface to logic at two different voltage levels.</p><p> To support low-cost/space-constrained applications, they even have the configuration memory on die. It's one-time programmable and needs external Vpp to program (presumably Silego didn't want to waste die area on charge pumps that would only be used once) but has a SRAM programming mode for prototyping.</p><p> The best part is that the development software (GreenPak Designer) is free of charge and provided for all major operating systems including Linux! Unfortunately, the only supported design entry method is schematic entry and there's no way to write your design in a HDL.</p><p> While schematics may be fine for quick tinkering on really simple designs, they quickly get unwieldy. The nightmare of a circuit shown below is just a bunch of counters hooked up to LEDs that blink at various rates.</p><p><table><tbody><tr><td>
- <a href="https://1.bp.blogspot.com/-k3naUT3uXao/Vy7WFac246I/AAAAAAAAAw8/mePy_ostO8QJra5ZJrbP2WGhTlJ0B_r8gCLcB/s1600/schematic-from-hell.png" imageanchor="1"><img height="334" src="https://1.bp.blogspot.com/-k3naUT3uXao/Vy7WFac246I/AAAAAAAAAw8/mePy_ostO8QJra5ZJrbP2WGhTlJ0B_r8gCLcB/s640/schematic-from-hell.png" width="640"></img></a>
- </td>
- </tr><tr><td>Schematic from hell!</td>
- </tr></tbody></table>
- As if this wasn't enough of a problem, the largest GreenPak4 device (the SLG46620V) is split into two halves with limited routing between them, and the GUI doesn't help the user manage this complexity at all - you have to draw your schematic in two halves and add "cross connections" between them.</p><p> The icing on the cake is that schematics are a pain to diff and collaborate on. Although GreenPak schematics are XML based, which is a touch better than binary, who wants to read a giant XML diff and try to figure out what's going on in the circuit?</p><p> This isn't going to be a post on the quirks of Silego's software, though - that would be boring. As it turns out, there's one more exciting feature of these chips that I didn't mention earlier: the configuration bitstream is 100% documented in the device datasheet! This is unheard of in the programmable logic world. As Nick of Arachnid Labs <a href="http://www.arachnidlabs.com/blog/2015/03/30/greenpak/">says</a>, the chip is "just dying for someone to write a VHDL or Verilog compiler for it". As you can probably guess by from the title of this post, I've been busy doing exactly that.</p><p><h2>
- Great! How does it work?</h2>
- </p><p> Rather than wasting time writing a synthesizer, I decided to write a GreenPak technology library for Clifford Wolf's excellent open source synthesis tool, </p><a href="http://www.clifford.at/yosys/">Yosys</a><p>, and then make a place-and-route tool to turn that into a final netlist. The post-PAR netlist can then be loaded into GreenPak Designer in order to program the device.</p><p> The first step of the process is to run the "synth_greenpak4" Yosys flow on the Verilog source. This runs a generic RTL synthesis pass, then some coarse-grained extraction passes to infer shift register and counter cells from behavioral logic, and finally maps the remaining logic to LUT/FF cells and outputs a JSON-formatted netlist.</p><p> Once the design has been synthesized, my tool (named, surprisingly, gp4par) is then launched on the netlist. It begins by parsing the JSON and constructing a directed graph of cell objects in memory. A second graph, containing all of the primitives in the device and the legal connections between them, is then created based on the device specified on the command line. (As of now only the SLG46620V is supported; the SLG46621V can be added fairly easily but the SLG46140V has a slightly different microarchitecture which will require a bit more work to support.)</p><p> After the graphs are generated, each node in the netlist graph is assigned a numeric label identifying the type of cell and each node in the device graph is assigned a list of legal labels: for example, an I/O buffer site is legal for an input buffer, output buffer, or bidirectional buffer.</p><p><table><tbody><tr><td>
- <a href="https://2.bp.blogspot.com/-kIekczO693g/Vy7dBqYifXI/AAAAAAAAAxc/hMNJBs5bedIQOrBzzkhq4gbmhR-n58EQwCLcB/s1600/graph-labels.png" imageanchor="1"><img height="141" src="https://2.bp.blogspot.com/-kIekczO693g/Vy7dBqYifXI/AAAAAAAAAxc/hMNJBs5bedIQOrBzzkhq4gbmhR-n58EQwCLcB/s400/graph-labels.png" width="400"></img></a>
- </td>
- </tr><tr><td>Example labeling for a subset of the netlist and device graphs</td>
- </tr></tbody></table>
- The labeled nodes now need to be placed. The initial placement uses a simple greedy algorithm to create a valid (although not necessarily optimal or even routable) placement:</p><br></br><ol><li>Loop over the cells in the netlist. If any cell has a LOC constraint, which locks the cell to a specific physical site, attempt to assign the node to the specified site. If the specified node is the wrong type, doesn't exist, or is already used by another constrained node, the constraint is invalid so fail with an error.</li>
- <li>Loop over all of the unconstrained cells in the netlist and assign them to the first unused site with the right label. If none are available, the design is too big for the device so fail with an error.</li>
- </ol><p>
- Once the design is placed, the placement optimizer then loops over the design and attempts to improve it. A simulated annealing algorithm is used, where changes to the design are accepted unconditionally if they make the placement better, and with a random, gradually decreasing probability if they make it worse. The optimizer terminates when the design receives a perfect score (indicating an optimal placement) or if it stops making progress for several iterations. Each iteration does the following:</p><br></br><ol><li>Compute a score for the current design based on the number of unroutable nets, the amount of routing congestion (number of nets crossing between halves of the device), and static timing analysis (not yet implemented, always zero).</li>
- <li>Make a list of nodes that contributed to this score in some way (having some attached nets unroutable, crossing to the other half of the device, or failing timing).</li>
- <li>Remove nodes from the list that are LOC'd to a specific location since we're not allowed to move them.</li>
- <li>Remove nodes from the list that have only one legal placement in the device (for example, oscillator hard IP) since there's nowhere else for them to go.</li>
- <li>Pick a node from the remainder of the list at random. Call this our pivot.</li>
- <li>Find a list of candidate placements for the pivot: </li>
- <ol><li>Consider all routable placements in the other half of the device.</li>
- <li>If none were found, consider all routable placements anywhere in the device.</li>
- <li>If none were found, consider all placements anywhere in the device even if they're not routable.</li>
- </ol><li>Pick one of the candidates at random and move the pivot to that location. If another cell in the netlist is already there, put it in the vacant site left by the pivot.</li>
- <li>Re-compute the score for the design. If it's better, accept this change and start the next iteration.</li>
- <li>If the score is worse, accept it with a random probability which decreases as the iteration number goes up. If the change is not accepted, restore the previous placement.</li>
- </ol><p>
- After optimization, the design is checked for routability. If any edges in the netlist graph don't correspond to edges in the device graph, the user probably asked for something impossible (for example, trying to hook a flipflop's output to a comparator's reference voltage input) so fail with an error.</p><p> The design is then routed. This is quite simple due to the crossbar structure of the device. For each edge in the netlist:</p><br></br><ol><li>If dedicated (non-fabric) routing is used for this path, configure the destination's input mux appropriately and stop.</li>
- <li>If the source and destination are in the same half of the device, configure the destination's input mux appropriately and stop.</li>
- <li>A cross-connection must be used. Check if we already used one to bring the source signal to the other half of the device. If found, configure the destination to route from that cross-connection and stop.</li>
- <li>Check if we have any cross-connections left going in this direction. If they're all used, the design is unroutable due to congestion so fail with an error.</li>
- <li>Pick the next unused cross-connection and configure it to route from the source. Configure the destination to route from the cross-connection and stop.</li>
- </ol><p>
- Once routing is finished, run a series of post-PAR design rule checks. These currently include the following:</p><br></br><ul><li>If any node has no loads, generate a warning</li>
- <li>If an I/O buffer is connected to analog hard IP, fail with an error if it's not configured in analog mode.</li>
- <li>Some signals (such as comparator inputs and oscillator power-down controls) are generated by a shared mux and fed to many loads. If different loads require conflicting settings for the shared mux, fail with an error.</li>
- </ul><p>
- If DRC passes with no errors, configure all of the individual cells in the netlist based on the HDL parameters. Fail with an error if an invalid configuration was requested.</p><p> Finally, generate the bitstream from all of the per-cell configuration and write it to a file.</p><p><h2>
- Great, let's get started!</h2>
- If you don't already have one, you'll need to buy a <a href="http://www.silego.com/buy/index.php?main_page=product_info&amp;products_id=388">GreenPak4 development kit</a>. The kit includes samples of the SLG46620V (among other devices) and a programmer/emulation board. While you're waiting for it to arrive, install <a href="http://www.silego.com/softdoc/software.html">GreenPak Designer</a>.</p><p> Download and install Yosys. Although Clifford is pretty good at merging my pull requests, only <a href="https://github.com/azonenberg/yosys/">my fork on Github</a> is guaranteed to have the most up-to-date support for GreenPak devices so don't be surprised if you can't use a bleeding-edge feature with mainline Yosys.</p><p> Download and install gp4par. You can get it from <a href="https://github.com/azonenberg/openfpga/">the Github repository</a>.</p><p> Write your HDL, compile with Yosys, P&amp;R with gp4par, and import the bitstream into GreenPak Designer to program the target device. The most current gp4par manual is included in LaTeX source form in the source tree and is automatically built as part of the compile process. If you're just browsing, there's a <a href="http://thanatos.virtual.antikernel.net/unlisted/gp4-hdl.pdf">relatively recent PDF version</a> on my web server.</p><p> If you'd like to see the Verilog that produced the nightmare of a schematic I showed above, <a href="https://github.com/azonenberg/openfpga/blob/master/tests/greenpak4/Blinky/Blinky.v">here it is</a>.</p><p> Be advised that this project is still very much a work in progress and there are still a number of SLG46620V features I don't support (see the manual for exact details).</p><p><h2>
- I love it / it segfaulted / there's a problem in the manual!</h2>
- Hop in our IRC channel (##openfpga on Freenode) and let me know. Feedback is great, pull requests are even better,</p><p><h2>
- You're competing with Silego's IDE. Have they found out and sued you yet?</h2>
- Nope. They're fully aware of what I'm doing and are rolling out the red carpet for me. They love the idea of a HDL flow as an alternative to schematic entry and are pretty amazed at how fast it's coming together.</p><p> After I reported a few bugs in their datasheets they decided to skip the middleman and give me direct access to the engineer who writes their documentation so that I can get faster responses. The last time I found a problem (two different parts of the datasheet contradicted each other) an updated datasheet was in my inbox and on their website by the next day. I only wish Xilinx gave me that kind of treatment!</p><p> They've even <a href="https://twitter.com/SilegoTech/status/717018987771469824">offered me free hardware</a> to help me add support for their latest product family, although I plan to get GreenPak4 support to a more stable state before taking them up on the offer.</p><p><h2>
- So what's next?</h2>
- </p><p> Better testing, for starters. I have to verify functionality by hand with a DMM and oscilloscope, which is time consuming.</p><p> My contact at Silego says they're going to be giving me documentation on the SRAM emulation interface soon, so I'm going to make a hardware-in-loop test platform that connects to my desktop and the Silego ZIF socket, and lets me load new bitstreams via a scriptable interface. It'll have FPGA-based digital I/O as well as an ADC and DAC on every device pin, plus an adjustable voltage regulator for power, so I can feed in arbitrary mixed-signal test waveforms and write PC-based unit tests to verify correct behavior.</p><p> Other than that, I want to finish support for the SLG46620V in the next month or two. The SLG46621V will be an easy addition since only one pin and the relevant configuration bits have changed from the 46620 (I suspect they're the same die, just bonded out differently).</p><p> Once that's done I'll have to do some more extensive work to add the SLG46140V since the architecture is a bit different (a lot of the combinatorial logic is merged into multi-function blocks). Luckily, the 46140 has a lot in common architecturally with the GreenPak5 family, so once that's done GreenPak5 will probably be a lot easier to add support for.</p><p> My thanks go out to Clifford Wolf, whitequark, the IRC users in ##openfpga, and everyone at Silego I've worked with to help make this possible. I hope that one day this project will become mature enough that Silego will ship it as an officially supported extension to GreenPak Designer, making history by becoming the first modern programmable logic vendor to ship a fully open source synthesis and P&amp;R suite.
-
- </p></div> \ No newline at end of file
+<div id="readability-page-1" class="page">
+ <div id="post-body-932306423056216142" itemprop="description articleBody">
+ <p> I've written a couple of posts in the past few months but they were all for <a href="http://blog.ioactive.com/search/label/Andrew%20Zonenberg">the blog at work</a> so I figured I'm long overdue for one on Silicon Exposed.</p>
+ <h2> So what's a GreenPak?</h2>
+ <p> Silego Technology is a fabless semiconductor company located in the SF Bay area, which makes (among other things) a line of programmable logic devices known as GreenPak. Their <a href="http://www.silego.com/products/greenpak5.html">5th generation parts</a> were just announced, but I started this project before that happened so I'm still targeting the <a href="http://www.silego.com/products/greenpak4.html">4th generation</a>.</p>
+ <p> GreenPak devices are kind of like itty bitty <a href="http://www.cypress.com/products/32-bit-arm-cortex-m-psoc">PSoCs</a> - they have a mixed signal fabric with an ADC, DACs, comparators, voltage references, plus a digital LUT/FF fabric and some typical digital MCU peripherals like counters and oscillators (but no CPU).</p>
+ <p> It's actually an interesting architecture - FPGAs (including some devices marketed as CPLDs) are a 2D array of LUTs connected via wires to adjacent cells, and true (product term) CPLDs are a star topology of AND-OR arrays connected by a crossbar. GreenPak, on the other hand, is a star topology of LUTs, flipflops, and analog/digital hard IP connected to a crossbar.</p>
+ <p> Without further ado, here's a block diagram showing all the cool stuff you get in the SLG46620V:</p>
+ <table>
+ <tbody>
+ <tr>
+ <td> <a href="https://1.bp.blogspot.com/-YIPC5jkXkDE/Vy7YPSqFKWI/AAAAAAAAAxI/a7D6Ji2GxoUvcrwUkI4RLZcr2LFQEJCTACLcB/s1600/block-diagram.png" imageanchor="1"><img height="512" src="https://1.bp.blogspot.com/-YIPC5jkXkDE/Vy7YPSqFKWI/AAAAAAAAAxI/a7D6Ji2GxoUvcrwUkI4RLZcr2LFQEJCTACLcB/s640/block-diagram.png" width="640"/></a> </td>
+ </tr>
+ <tr>
+ <td>SLG46620V block diagram (from device datasheet)</td>
+ </tr>
+ </tbody>
+ </table>
+ <p> They're also tiny (the SLG46620V is a 20-pin 0.4mm pitch STQFN measuring 2x3 mm, and the lower gate count SLG46140V is a mere 1.6x2 mm) and probably the cheapest programmable logic device on the market - $0.50 in low volume and less than $0.40 in larger quantities.</p>
+ <p> The Vdd range of GreenPak4 is huge, more like what you'd expect from an MCU than an FPGA! It can run on anything from 1.8 to 5V, although performance is only specified at 1.8, 3.3, and 5V nominal voltages. There's also a dual-rail version that trades one of the GPIO pins for a second power supply pin, allowing you to interface to logic at two different voltage levels.</p>
+ <p> To support low-cost/space-constrained applications, they even have the configuration memory on die. It's one-time programmable and needs external Vpp to program (presumably Silego didn't want to waste die area on charge pumps that would only be used once) but has a SRAM programming mode for prototyping.</p>
+ <p> The best part is that the development software (GreenPak Designer) is free of charge and provided for all major operating systems including Linux! Unfortunately, the only supported design entry method is schematic entry and there's no way to write your design in a HDL.</p>
+ <p> While schematics may be fine for quick tinkering on really simple designs, they quickly get unwieldy. The nightmare of a circuit shown below is just a bunch of counters hooked up to LEDs that blink at various rates.</p>
+ <table>
+ <tbody>
+ <tr>
+ <td> <a href="https://1.bp.blogspot.com/-k3naUT3uXao/Vy7WFac246I/AAAAAAAAAw8/mePy_ostO8QJra5ZJrbP2WGhTlJ0B_r8gCLcB/s1600/schematic-from-hell.png" imageanchor="1"><img height="334" src="https://1.bp.blogspot.com/-k3naUT3uXao/Vy7WFac246I/AAAAAAAAAw8/mePy_ostO8QJra5ZJrbP2WGhTlJ0B_r8gCLcB/s640/schematic-from-hell.png" width="640"/></a> </td>
+ </tr>
+ <tr>
+ <td>Schematic from hell!</td>
+ </tr>
+ </tbody>
+ </table>
+ <p> As if this wasn't enough of a problem, the largest GreenPak4 device (the SLG46620V) is split into two halves with limited routing between them, and the GUI doesn't help the user manage this complexity at all - you have to draw your schematic in two halves and add "cross connections" between them.</p>
+ <p> The icing on the cake is that schematics are a pain to diff and collaborate on. Although GreenPak schematics are XML based, which is a touch better than binary, who wants to read a giant XML diff and try to figure out what's going on in the circuit?</p>
+ <p> This isn't going to be a post on the quirks of Silego's software, though - that would be boring. As it turns out, there's one more exciting feature of these chips that I didn't mention earlier: the configuration bitstream is 100% documented in the device datasheet! This is unheard of in the programmable logic world. As Nick of Arachnid Labs <a href="http://www.arachnidlabs.com/blog/2015/03/30/greenpak/">says</a>, the chip is "just dying for someone to write a VHDL or Verilog compiler for it". As you can probably guess by from the title of this post, I've been busy doing exactly that.</p>
+ <h2> Great! How does it work?</h2>
+ <p> Rather than wasting time writing a synthesizer, I decided to write a GreenPak technology library for Clifford Wolf's excellent open source synthesis tool, <a href="http://www.clifford.at/yosys/">Yosys</a>, and then make a place-and-route tool to turn that into a final netlist. The post-PAR netlist can then be loaded into GreenPak Designer in order to program the device.</p>
+ <p> The first step of the process is to run the "synth_greenpak4" Yosys flow on the Verilog source. This runs a generic RTL synthesis pass, then some coarse-grained extraction passes to infer shift register and counter cells from behavioral logic, and finally maps the remaining logic to LUT/FF cells and outputs a JSON-formatted netlist.</p>
+ <p> Once the design has been synthesized, my tool (named, surprisingly, gp4par) is then launched on the netlist. It begins by parsing the JSON and constructing a directed graph of cell objects in memory. A second graph, containing all of the primitives in the device and the legal connections between them, is then created based on the device specified on the command line. (As of now only the SLG46620V is supported; the SLG46621V can be added fairly easily but the SLG46140V has a slightly different microarchitecture which will require a bit more work to support.)</p>
+ <p> After the graphs are generated, each node in the netlist graph is assigned a numeric label identifying the type of cell and each node in the device graph is assigned a list of legal labels: for example, an I/O buffer site is legal for an input buffer, output buffer, or bidirectional buffer.</p>
+ <table>
+ <tbody>
+ <tr>
+ <td> <a href="https://2.bp.blogspot.com/-kIekczO693g/Vy7dBqYifXI/AAAAAAAAAxc/hMNJBs5bedIQOrBzzkhq4gbmhR-n58EQwCLcB/s1600/graph-labels.png" imageanchor="1"><img height="141" src="https://2.bp.blogspot.com/-kIekczO693g/Vy7dBqYifXI/AAAAAAAAAxc/hMNJBs5bedIQOrBzzkhq4gbmhR-n58EQwCLcB/s400/graph-labels.png" width="400"/></a> </td>
+ </tr>
+ <tr>
+ <td>Example labeling for a subset of the netlist and device graphs</td>
+ </tr>
+ </tbody>
+ </table>
+ <p> The labeled nodes now need to be placed. The initial placement uses a simple greedy algorithm to create a valid (although not necessarily optimal or even routable) placement:</p>
+ <ol>
+ <li>Loop over the cells in the netlist. If any cell has a LOC constraint, which locks the cell to a specific physical site, attempt to assign the node to the specified site. If the specified node is the wrong type, doesn't exist, or is already used by another constrained node, the constraint is invalid so fail with an error.</li>
+ <li>Loop over all of the unconstrained cells in the netlist and assign them to the first unused site with the right label. If none are available, the design is too big for the device so fail with an error.</li>
+ </ol>
+ <p> Once the design is placed, the placement optimizer then loops over the design and attempts to improve it. A simulated annealing algorithm is used, where changes to the design are accepted unconditionally if they make the placement better, and with a random, gradually decreasing probability if they make it worse. The optimizer terminates when the design receives a perfect score (indicating an optimal placement) or if it stops making progress for several iterations. Each iteration does the following:</p>
+ <ol>
+ <li>Compute a score for the current design based on the number of unroutable nets, the amount of routing congestion (number of nets crossing between halves of the device), and static timing analysis (not yet implemented, always zero).</li>
+ <li>Make a list of nodes that contributed to this score in some way (having some attached nets unroutable, crossing to the other half of the device, or failing timing).</li>
+ <li>Remove nodes from the list that are LOC'd to a specific location since we're not allowed to move them.</li>
+ <li>Remove nodes from the list that have only one legal placement in the device (for example, oscillator hard IP) since there's nowhere else for them to go.</li>
+ <li>Pick a node from the remainder of the list at random. Call this our pivot.</li>
+ <li>Find a list of candidate placements for the pivot: </li>
+ <ol>
+ <li>Consider all routable placements in the other half of the device.</li>
+ <li>If none were found, consider all routable placements anywhere in the device.</li>
+ <li>If none were found, consider all placements anywhere in the device even if they're not routable.</li>
+ </ol>
+ <li>Pick one of the candidates at random and move the pivot to that location. If another cell in the netlist is already there, put it in the vacant site left by the pivot.</li>
+ <li>Re-compute the score for the design. If it's better, accept this change and start the next iteration.</li>
+ <li>If the score is worse, accept it with a random probability which decreases as the iteration number goes up. If the change is not accepted, restore the previous placement.</li>
+ </ol>
+ <p> After optimization, the design is checked for routability. If any edges in the netlist graph don't correspond to edges in the device graph, the user probably asked for something impossible (for example, trying to hook a flipflop's output to a comparator's reference voltage input) so fail with an error.</p>
+ <p> The design is then routed. This is quite simple due to the crossbar structure of the device. For each edge in the netlist:</p>
+ <ol>
+ <li>If dedicated (non-fabric) routing is used for this path, configure the destination's input mux appropriately and stop.</li>
+ <li>If the source and destination are in the same half of the device, configure the destination's input mux appropriately and stop.</li>
+ <li>A cross-connection must be used. Check if we already used one to bring the source signal to the other half of the device. If found, configure the destination to route from that cross-connection and stop.</li>
+ <li>Check if we have any cross-connections left going in this direction. If they're all used, the design is unroutable due to congestion so fail with an error.</li>
+ <li>Pick the next unused cross-connection and configure it to route from the source. Configure the destination to route from the cross-connection and stop.</li>
+ </ol>
+ <p> Once routing is finished, run a series of post-PAR design rule checks. These currently include the following:</p>
+ <ul>
+ <li>If any node has no loads, generate a warning</li>
+ <li>If an I/O buffer is connected to analog hard IP, fail with an error if it's not configured in analog mode.</li>
+ <li>Some signals (such as comparator inputs and oscillator power-down controls) are generated by a shared mux and fed to many loads. If different loads require conflicting settings for the shared mux, fail with an error.</li>
+ </ul>
+ <p> If DRC passes with no errors, configure all of the individual cells in the netlist based on the HDL parameters. Fail with an error if an invalid configuration was requested.</p>
+ <p> Finally, generate the bitstream from all of the per-cell configuration and write it to a file.</p>
+ <h2> Great, let's get started!</h2>
+ <p> If you don't already have one, you'll need to buy a <a href="http://www.silego.com/buy/index.php?main_page=product_info&amp;products_id=388">GreenPak4 development kit</a>. The kit includes samples of the SLG46620V (among other devices) and a programmer/emulation board. While you're waiting for it to arrive, install <a href="http://www.silego.com/softdoc/software.html">GreenPak Designer</a>.</p>
+ <p> Download and install Yosys. Although Clifford is pretty good at merging my pull requests, only <a href="https://github.com/azonenberg/yosys/">my fork on Github</a> is guaranteed to have the most up-to-date support for GreenPak devices so don't be surprised if you can't use a bleeding-edge feature with mainline Yosys.</p>
+ <p> Download and install gp4par. You can get it from <a href="https://github.com/azonenberg/openfpga/">the Github repository</a>.</p>
+ <p> Write your HDL, compile with Yosys, P&amp;R with gp4par, and import the bitstream into GreenPak Designer to program the target device. The most current gp4par manual is included in LaTeX source form in the source tree and is automatically built as part of the compile process. If you're just browsing, there's a <a href="http://thanatos.virtual.antikernel.net/unlisted/gp4-hdl.pdf">relatively recent PDF version</a> on my web server.</p>
+ <p> If you'd like to see the Verilog that produced the nightmare of a schematic I showed above, <a href="https://github.com/azonenberg/openfpga/blob/master/tests/greenpak4/Blinky/Blinky.v">here it is</a>.</p>
+ <p> Be advised that this project is still very much a work in progress and there are still a number of SLG46620V features I don't support (see the manual for exact details).</p>
+ <h2> I love it / it segfaulted / there's a problem in the manual!</h2>
+ <p> Hop in our IRC channel (##openfpga on Freenode) and let me know. Feedback is great, pull requests are even better,</p>
+ <h2> You're competing with Silego's IDE. Have they found out and sued you yet?</h2>
+ <p> Nope. They're fully aware of what I'm doing and are rolling out the red carpet for me. They love the idea of a HDL flow as an alternative to schematic entry and are pretty amazed at how fast it's coming together.</p>
+ <p> After I reported a few bugs in their datasheets they decided to skip the middleman and give me direct access to the engineer who writes their documentation so that I can get faster responses. The last time I found a problem (two different parts of the datasheet contradicted each other) an updated datasheet was in my inbox and on their website by the next day. I only wish Xilinx gave me that kind of treatment!</p>
+ <p> They've even <a href="https://twitter.com/SilegoTech/status/717018987771469824">offered me free hardware</a> to help me add support for their latest product family, although I plan to get GreenPak4 support to a more stable state before taking them up on the offer.</p>
+ <h2> So what's next?</h2>
+ <p> Better testing, for starters. I have to verify functionality by hand with a DMM and oscilloscope, which is time consuming.</p>
+ <p> My contact at Silego says they're going to be giving me documentation on the SRAM emulation interface soon, so I'm going to make a hardware-in-loop test platform that connects to my desktop and the Silego ZIF socket, and lets me load new bitstreams via a scriptable interface. It'll have FPGA-based digital I/O as well as an ADC and DAC on every device pin, plus an adjustable voltage regulator for power, so I can feed in arbitrary mixed-signal test waveforms and write PC-based unit tests to verify correct behavior.</p>
+ <p> Other than that, I want to finish support for the SLG46620V in the next month or two. The SLG46621V will be an easy addition since only one pin and the relevant configuration bits have changed from the 46620 (I suspect they're the same die, just bonded out differently).</p>
+ <p> Once that's done I'll have to do some more extensive work to add the SLG46140V since the architecture is a bit different (a lot of the combinatorial logic is merged into multi-function blocks). Luckily, the 46140 has a lot in common architecturally with the GreenPak5 family, so once that's done GreenPak5 will probably be a lot easier to add support for.</p>
+ <p> My thanks go out to Clifford Wolf, whitequark, the IRC users in ##openfpga, and everyone at Silego I've worked with to help make this possible. I hope that one day this project will become mature enough that Silego will ship it as an officially supported extension to GreenPak Designer, making history by becoming the first modern programmable logic vendor to ship a fully open source synthesis and P&amp;R suite. </p>
+ </div>
+</div> \ No newline at end of file
diff --git a/test/test-pages/breitbart/expected.html b/test/test-pages/breitbart/expected.html
index eabc20d..887c74d 100644
--- a/test/test-pages/breitbart/expected.html
+++ b/test/test-pages/breitbart/expected.html
@@ -1,41 +1,41 @@
<div>
-
-
- <figure><div><img alt="Supporters of Republican presidential nominee Donald Trump cheer during election night at the New York Hilton Midtown in New York on November 9, 2016. / AFP / JIM WATSON (Photo credit should read JIM WATSON/AFP/Getty Images)" height="480" itemprop="image" src="http://media.breitbart.com/media/2016/11/GettyImages-621866810-640x480.jpg" width="640"></img><p>JIM WATSON/AFP/Getty Images</p>
+
+
+ <figure><div><p><img alt="Supporters of Republican presidential nominee Donald Trump cheer during election night at the New York Hilton Midtown in New York on November 9, 2016. / AFP / JIM WATSON (Photo credit should read JIM WATSON/AFP/Getty Images)" height="480" itemprop="image" src="http://media.breitbart.com/media/2016/11/GettyImages-621866810-640x480.jpg" width="640"></img></p><p>JIM WATSON/AFP/Getty Images</p>
</div>
</figure> <time datetime="2016-12-22T10:43:37Z">22 Dec, 2016</time><time datetime="2016-12-22T18:59:12Z">22 Dec, 2016</time></div><div>
-
+
<div id="EmailOptin">
<p><span>SIGN UP</span> FOR OUR NEWSLETTER</p>
-
+
</div>
<h2><span>Snopes fact checker and staff writer David Emery posted to Twitter asking if there were “any un-angry Trump supporters?”</span></h2>
<p><span>Emery, a writer for partisan “fact-checking” website Snopes.com which soon will be in charge of labelling </span><a href="http://www.breitbart.com/tech/2016/12/15/facebook-introduce-warning-labels-stories-deemed-fake-news/"><span>“fake news”</span></a><span> alongside ABC News and Politifact, retweeted an article by Vulture magazine relating to the </span><a href="http://www.breitbart.com/big-hollywood/2016/11/19/boycotthamilton-trends-hamilton-cast-members-harass-mike-pence/"><span>protests</span></a><span> of the <em>Hamilton</em> musical following the decision by the cast of the show to make a </span><a href="http://www.breitbart.com/big-hollywood/2016/11/19/tolerance-hamilton-cast-lectures-mike-pence-broadway-stage/"><span>public announcement</span></a><span> to Vice-president elect Mike Pence while he watched the performance with his family.</span></p>
<div id="EmailOptinM">
<p><span>SIGN UP</span> FOR OUR NEWSLETTER</p>
-
+
</div>
<p><span>The tweet from Vulture magazine reads, “</span><a href="https://twitter.com/hashtag/Hamilton?src=hash" rel="noopener" target="_blank"><span>#Hamilton</span></a><span> Chicago show interrupted by angry Trump supporter.” Emery retweeted the story, saying, “Are there un-angry Trump supporters?”</span></p>
-
-
-
+
+
+
<p><span>This isn’t the first time the Snopes.com writer has expressed anti-Trump sentiment on his Twitter page. In another tweet in which Emery links to an article that falsely attributes a quote to President-elect Trump, Emery states, “Incredibly, some people actually think they have to put words in Trump’s mouth to make him look bad.”</span></p>
-
-
+
+
<p><span>Emery also retweeted an article by <em>New York</em> magazine that claimed President-elect Trump relied on lies to win during his campaign and that we now lived in a “post-truth” society. “Before long we’ll all have forgotten what it was like to live in the same universe; or maybe we already have,” Emery tweeted.</span></p>
-
-
-
+
+
+
<p><span>Facebook believe that Emery, along with other Snopes writers, ABC News, and </span><a href="http://www.breitbart.com/tech/2016/12/16/flashback-weekly-standard-data-shows-politifact-has-it-out-for-republicans/"><span>Politifact</span></a><span> are impartial enough to label and silence what they believe to be “fake news” on social media. </span></p>
<p><i><span>Lucas Nolan is a reporter for Breitbart Tech covering issues of free speech and online censorship. Follow him on Twitter </span></i><a href="http://twitter.com/lucasnolan_" rel="noopener" target="_blank"><i><span>@LucasNolan_</span></i></a><i><span> or email him at </span></i><a href="http://www.breitbart.com/wp-admin/blank"><i><span>[email protected]</span></i></a></p>
-
+
</div> \ No newline at end of file
diff --git a/test/test-pages/bug-1255978/expected.html b/test/test-pages/bug-1255978/expected.html
index 78f2f89..70f30fc 100644
--- a/test/test-pages/bug-1255978/expected.html
+++ b/test/test-pages/bug-1255978/expected.html
@@ -9,18 +9,18 @@
<p>Here are some of the secrets that the receptionist will never tell you when you check in, according to answers posted on <a href="https://www.quora.com/What-are-the-things-we-dont-know-about-hotel-rooms" target="_blank">Quora</a>.</p>
-
+
<div>
<div>
-
- <div><img alt="bandb2.jpg" height="423" src="https://static.independent.co.uk/s3fs-public/styles/story_medium/public/thumbnails/image/2014/03/18/10/bandb2.jpg" title="bandb2.jpg" width="564"></img></div>
-
+
+ <p><img alt="bandb2.jpg" height="423" src="https://static.independent.co.uk/s3fs-public/styles/story_medium/public/thumbnails/image/2014/03/18/10/bandb2.jpg" title="bandb2.jpg" width="564"></img></p>
+
+ </div>
+ <div>
+ <p>Even posh hotels might not wash a blanket in between stays
+ </p>
</div>
- <p>
- Even posh hotels might not wash a blanket in between stays
-
- </p>
</div>
<p>1. Take any blankets or duvets off the bed</p>
@@ -28,83 +28,80 @@
<p>Forrest Jones said that anything that comes into contact with any of the previous guest’s skin should be taken out and washed every time the room is made, but that even the fanciest hotels don’t always do so. "Hotels are getting away from comforters. Blankets are here to stay, however. But some hotels are still hesitant about washing them every day if they think they can get out of it," he said.</p>
<div>
-
+
<p>Video shows bed bug infestation at New York hotel</p>
</div>
-
+
<div>
<div>
-
- <div><img alt="hotel-door-getty.jpg" height="423" src="https://static.independent.co.uk/s3fs-public/styles/story_medium/public/thumbnails/image/2015/05/26/11/hotel-door-getty.jpg" title="hotel-door-getty.jpg" width="564"></img></div>
-
+
+ <p><img alt="hotel-door-getty.jpg" height="423" src="https://static.independent.co.uk/s3fs-public/styles/story_medium/public/thumbnails/image/2015/05/26/11/hotel-door-getty.jpg" title="hotel-door-getty.jpg" width="564"></img></p>
+
+ </div>
+ <div>
+ <p>Forrest Jones advised stuffing the peep hole with a strip of rolled up notepaper when not in use.
+ </p>
</div>
- <p>
- Forrest Jones advised stuffing the peep hole with a strip of rolled up notepaper when not in use.
-
- </p>
</div>
<p>2. Check the peep hole has not been tampered with</p>
<p>This is not common, but can happen, Forrest Jones said. He advised stuffing the peep hole with a strip of rolled up notepaper when not in use. When someone knocks on the door, the paper can be removed to check who is there. If no one is visible, he recommends calling the front desk immediately. “I look forward to the day when I can tell you to choose only hotels where every employee who has access to guestroom keys is subjected to a complete public records background check, prior to hire, and every year or two thereafter. But for now, I can't,” he said.</p>
-
+
<div>
<div>
-
- <div><img alt="luggage-3.jpg" height="423" src="https://static.independent.co.uk/s3fs-public/styles/story_medium/public/thumbnails/image/2013/07/31/15/luggage-3.jpg" title="luggage-3.jpg" width="564"></img></div>
-
+
+ <p><img alt="luggage-3.jpg" height="423" src="https://static.independent.co.uk/s3fs-public/styles/story_medium/public/thumbnails/image/2013/07/31/15/luggage-3.jpg" title="luggage-3.jpg" width="564"></img></p>
+
</div>
- <p>
- Put luggage on the floor
-
- </p>
+
</div>
<p>3. Don’t use a wooden luggage rack</p>
<p>Bedbugs love wood. Even though a wooden luggage rack might look nicer and more expensive than a metal one, it’s a breeding ground for bugs. Forrest Jones says guests should put the items they plan to take from bags on other pieces of furniture and leave the bag on the floor.</p>
-
+
<div>
<div>
-
- <div><img alt="Lifestyle-hotels.jpg" height="423" src="https://static.independent.co.uk/s3fs-public/styles/story_medium/public/thumbnails/image/2015/04/13/11/Lifestyle-hotels.jpg" title="Lifestyle-hotels.jpg" width="564"></img></div>
-
+
+ <p><img alt="Lifestyle-hotels.jpg" height="423" src="https://static.independent.co.uk/s3fs-public/styles/story_medium/public/thumbnails/image/2015/04/13/11/Lifestyle-hotels.jpg" title="Lifestyle-hotels.jpg" width="564"></img></p>
+
+ </div>
+ <div>
+ <p>The old rule of thumb is that for every 00 invested in a room, the hotel should charge in average daily rate
+ </p>
</div>
- <p>
- The old rule of thumb is that for every 00 invested in a room, the hotel should charge in average daily rate
-
- </p>
</div>
<p>4. Hotel rooms are priced according to how expensive they were to build</p>
<p>Zeev Sharon said that the old rule of thumb is that for every $1000 invested in a room, the hotel should charge $1 in average daily rate. So a room that cost $300,000 to build, should sell on average for $300/night.</p>
-
+
<h3>5. Beware the wall-mounted hairdryer</h3>
<p>It contains the most germs of anything in the room. Other studies have said the TV remote and bedside lamp switches are the most unhygienic. “Perhaps because it's something that's easy for the housekeepers to forget to check or to squirt down with disinfectant,” Forrest Jones said.</p>
-
+
<div>
<div>
-
+
<div data-scald-gallery="3739501">
-
+
<h2><span></span>Business news in pictures</h2>
-
+
</div>
-
-
+
+
</div>
</div>
@@ -112,18 +109,18 @@
<p>Despite the snacks in the minibar seeming like the most overpriced food you have ever seen, hotel owners are still struggling to make a profit from those snacks. "Minibars almost always lose money, even when they charge $10 for a Diet Coke,” Sharon said.</p>
-
+
<div>
<div>
-
- <div><img alt="agenda7.jpg" height="423" src="https://static.independent.co.uk/s3fs-public/styles/story_medium/public/thumbnails/image/2014/03/13/16/agenda7.jpg" title="agenda7.jpg" width="564"></img></div>
-
+
+ <p><img alt="agenda7.jpg" height="423" src="https://static.independent.co.uk/s3fs-public/styles/story_medium/public/thumbnails/image/2014/03/13/16/agenda7.jpg" title="agenda7.jpg" width="564"></img></p>
+
+ </div>
+ <div>
+ <p>Towels should always be cleaned between stays
+ </p>
</div>
- <p>
- Towels should always be cleaned between stays
-
- </p>
</div>
<p>7. Always made sure the hand towels are clean when you arrive</p>
@@ -135,5 +132,5 @@
<li><a href="http://fakehost/topic/Hotels" itemprop="keywords">Hotels</a></li>
<li><a href="http://fakehost/topic/Hygiene" itemprop="keywords">Hygiene</a></li>
</ul>
- <a href="http://fakehost/syndication/reuse-permision-form?url=http://www.independent.co.uk/news/business/news/seven-secrets-that-hotel-owners-dont-want-you-to-know-10506160.html" target="_blank"><img src="http://fakehost/sites/all/themes/ines_themes/independent_theme/img/reuse.png" width="25"></img>Reuse content</a>
- </div> \ No newline at end of file
+ <p><a href="http://fakehost/syndication/reuse-permision-form?url=http://www.independent.co.uk/news/business/news/seven-secrets-that-hotel-owners-dont-want-you-to-know-10506160.html" target="_blank"><img src="http://fakehost/sites/all/themes/ines_themes/independent_theme/img/reuse.png" width="25"></img>Reuse content</a>
+ </p></div> \ No newline at end of file
diff --git a/test/test-pages/buzzfeed-1/expected.html b/test/test-pages/buzzfeed-1/expected.html
index 82dc3a1..aef43a1 100644
--- a/test/test-pages/buzzfeed-1/expected.html
+++ b/test/test-pages/buzzfeed-1/expected.html
@@ -1,7 +1,7 @@
<div id="buzz_sub_buzz">
<div id="superlist_3758406_5547137" rel:buzz_num="1">
<h2>The mother of a woman who took suspected diet pills bought online has described how her daughter was “literally burning up from within” moments before her death.</h2>
-
+
<p> <span>West Merica Police</span></p>
</div>
<div id="superlist_3758406_5547213" rel:buzz_num="2">
@@ -15,17 +15,17 @@
<div>
<div>
<div>
- <img height="412" rel:bf_image_src="http://ak-hdl.buzzfed.com/static/2015-04/21/5/enhanced/webdr12/grid-cell-2501-1429608056-15.jpg" src="http://ak-hdl.buzzfed.com/static/2015-04/21/5/enhanced/webdr12/grid-cell-2501-1429608056-15.jpg" width="203"></img>
+ <p><img height="412" rel:bf_image_src="http://ak-hdl.buzzfed.com/static/2015-04/21/5/enhanced/webdr12/grid-cell-2501-1429608056-15.jpg" src="http://ak-hdl.buzzfed.com/static/2015-04/21/5/enhanced/webdr12/grid-cell-2501-1429608056-15.jpg" width="203"></img></p>
</div>
<p>Facebook</p>
</div>
<div>
<div>
- <img height="412" rel:bf_image_src="http://ak-hdl.buzzfed.com/static/2015-04/21/5/enhanced/webdr12/grid-cell-2501-1429608057-18.jpg" src="http://ak-hdl.buzzfed.com/static/2015-04/21/5/enhanced/webdr12/grid-cell-2501-1429608057-18.jpg" width="412"></img>
+ <p><img height="412" rel:bf_image_src="http://ak-hdl.buzzfed.com/static/2015-04/21/5/enhanced/webdr12/grid-cell-2501-1429608057-18.jpg" src="http://ak-hdl.buzzfed.com/static/2015-04/21/5/enhanced/webdr12/grid-cell-2501-1429608057-18.jpg" width="412"></img></p>
</div>
<p>Facebook</p>
</div>
-
+
</div>
</div>
<div id="superlist_3758406_5547284" rel:buzz_num="4">
diff --git a/test/test-pages/clean-links/expected.html b/test/test-pages/clean-links/expected.html
index 4153961..15d4347 100644
--- a/test/test-pages/clean-links/expected.html
+++ b/test/test-pages/clean-links/expected.html
@@ -1,1387 +1,261 @@
-<div>
- <table><tbody><tr><td>
- <h3>Study Webtext</h3>
- <h2><span color="Maroon&#xA; " face="Lucida Handwriting ">"Bartleby the Scrivener: A Story of Wall-Street " </span>(1853) <br></br>
- Herman Melville</h2>
- <h2><a href="http://www.vcu.edu/engweb/webtexts/bartleby.html&#xA; " target="_blank "><img alt="To the story text without notes&#xA; " height="38 " src="http://fakehost/test/hmhome.gif " width="38 "></img></a>
- </h2>
- <h3>Prepared by <a href="http://www.vcu.edu/engweb ">Ann
+<div id="readability-page-1" class="page">
+ <div>
+ <div>
+ <h3>Study Webtext</h3>
+ <h2><span face="Lucida Handwriting " color="Maroon
+ ">"Bartleby the Scrivener: A Story of Wall-Street " </span>(1853)&nbsp;<br/> Herman Melville</h2>
+ <h2><a href="http://www.vcu.edu/engweb/webtexts/bartleby.html" target="_blank "><img src="http://fakehost/test/hmhome.gif" alt="To the story text without notes
+ " height="38 " width="38 "/></a> </h2>
+ <h3>Prepared by <a href="http://www.vcu.edu/engweb">Ann
Woodlief,</a> Virginia Commonwealth University</h3>
- <h5>Click on text in red for hypertext notes and questions</h5>
- I
- am a rather elderly man. The nature of my avocations
- for the last thirty years has brought me into more than ordinary contact
- with what would seem an interesting and somewhat singular set of men of whom as yet
- nothing that I know of has ever been written:-- I mean the law-copyists
- or scriveners.
- I have known very many of them, professionally and privately, and if I
- pleased, could relate divers histories, at which good-natured gentlemen
- might smile, and sentimental souls might weep. But I waive the biographies
- of all other scriveners for a few passages
- in the life of Bartleby, who was a scrivener the strangest
- I ever saw or heard of. While of other law-copyists I might write the
- complete life, of Bartleby nothing of that sort can be done. I believe that
- no materials exist for a full and satisfactory biography of this man. It is an irreparable loss to literature. Bartleby
- was one of those beings of whom nothing is ascertainable, except from
- the original sources, and in his case those are very small. What my own
- astonished eyes saw of Bartleby, that is all I know of him, except, indeed,
- one vague report which will appear in the sequel.
- <p>Ere introducing the scrivener, as he first appeared to me, it is fit
- I make some mention of myself, my employees, my business, my chambers,
- and general surroundings; because some such description is indispensable
- to an adequate understanding of the chief character about to be presented.
- </p><p> <i>Imprimis</i>: I am a man who, from his youth upwards, has been
- filled with a profound conviction that the easiest way of life is the best.. Hence, though I belong to a profession
- proverbially energetic and nervous, even to turbulence, at times, yet
- nothing of that sort have I ever suffered to invade
- my peace. I am one of those unambitious lawyers who never addresses
- a jury, or in any way draws down public applause; but in the cool tranquillity
- of a snug retreat, do a snug business among rich men's bonds and mortgages and title-deeds. The late John Jacob Astor, a personage little given to poetic enthusiasm, had
- no hesitation in pronouncing my first
- grand point to be prudence; my next, method. I do not speak
- it in vanity, but simply record the fact, that I was not
- unemployed in my profession by the last John Jacob Astor; a name which,
- I admit, I love to repeat, for it hath a rounded and orbicular sound to
- it, and rings
- like unto bullion. I will freely add, that I was not
- insensible to the late John Jacob Astor's good opinion.</p>
- <p>Some time prior to the period at which this little history begins, my
- avocations had been largely increased. The good old office, now
- extinct in the State of New York, of a Master in Chancery,
- had been conferred upon me. It was not a very arduous office, but very
- pleasantly remunerative. I
- seldom lose my temper; much more seldom indulge in dangerous
- indignation at wrongs and outrages; but I must be permitted to be rash
- here and declare, that I consider the sudden and violent abrogation of
- the office of Master of Chancery, by the new Constitution, as a----premature
- act; inasmuch as I had counted upon a life-lease of the
- profits, whereas I only received those of a few short years. But this is
- by the way.</p>
- <p>My chambers were up stairs at No.--Wall-street. At one end they looked
- upon the white wall of the interior of a spacious sky-light shaft, penetrating
- the building from top to bottom. This view might have been considered rather
- tame than otherwise, deficient
- in what landscape painters call "life." But if so, the view
- from the other end of my chambers offered, at least, a contrast, if nothing
- more. In that direction my windows commanded an unobstructed view of a
- lofty brick wall,black by age and everlasting shade; which wall required
- no spy-glass to bring out its lurking beauties, but for the benefit of
- all near-sighted spectators, was pushed up to within ten feet of my window
- panes. Owing to the great height of the surrounding buildings, and my chambers
- being on the second floor, the interval between this wall and mine not
- a little resembled a huge square cistern.</p>
- <p>At the period just preceding the advent of Bartleby, I had two persons
- as copyists in my employment, and a promising lad as an office-boy. First,
- Turkey; second, Nippers; third, Ginger Nut.These may seem names, the like
- of which are not usually found in the Directory. In truth they were nicknames, mutually conferred upon
- each other by my three clerks, and were deemed expressive of their respective
- persons or characters. Turkey was a short, pursy Englishman of about my
- own age, that is, somewhere not far from sixty. In the morning, one might
- say, his face was of a fine florid hue, but after twelve o'clock, meridian--
- his dinner hour-- it blazed like a grate full of Christmas coals;
- and continued blazing--but, as it were, with a gradual wane--till 6 o'clock,
- P.M. or thereabouts, after which I saw no more of the proprietor of the
- face, which gaining its meridian with the sun, seemed to set with it, to
- rise, culminate, and decline the following day, with the like regularity
- and undiminished glory. There are many singular coincidences I have known
- in the course of my life, not the least among which was the fact that exactly
- when Turkey displayed his fullest beams from his red and radiant countenance,
- just then, too, at the critical moment, began the daily period when I considered
- his business capacities as seriously disturbed for the remainder of the
- twenty-four hours. Not that he was absolutely idle, or averse to business
- then; far from it. The difficulty was, he was apt to be altogether too
- energetic. There was a strange, inflamed, flurried, flighty
- recklessness of activity about him. He would be incautious in dipping his
- pen into his inkstand. All his blots upon my documents, were dropped there
- after twelve o'clock, meridian. Indeed, not only would he be reckless and
- sadly given to making blots in the afternoon, but some days he went further,
- and was rather noisy. At such times, too, his face
- flamed with augmented blazonry, as if cannel
- coal had been heaped on anthracite. He made an unpleasant
- racket with his chair; spilled his sand-box; in mending his pens, impatiently
- split them all to pieces, and threw them on the floor in a sudden passion;
- stood up and leaned over his table, boxing his papers about in a most
- indecorous manner, very sad to behold in an elderly manlike him. Nevertheless,
- as he was in many ways a most valuable person to me, and all the time before
- twelve o'clock, meridian, was the quickest, steadiest creature too, accomplishing
- a great deal of work in a style not easy to be matched--for these reasons,
- I was willingto overlook his eccentricities, though indeed, occasionally,
- I remonstrated with him. I did this very gently, however, because, though
- the civilest, nay, the blandest and most reverential of men in the morning,
- yet in the afternoon he was disposed, upon provocation, to be slightly
- rash with his tongue, in fact, insolent. Now, valuing his morning services
- as I did, and resolved not to lose them; yet, at the same time made uncomfortable
- by his inflamed ways after twelve o'clock; and being a man
- of peace, unwilling by my admonitions to call forth unseemingly
- retorts from him; I took upon me, one Saturday noon (he was always worse
- on Saturdays), to hint to him, very kindly, that perhaps now that he was
- growing old, it might be well to abridge his labors; in short, he need
- not come to my chambers after twelve o'clock, but, dinner over, had best
- go home to his lodgings and rest himself till tea-time. But no; he insisted
- upon his afternoon devotions. His countenance became
- intolerably fervid, as he oratorically assured me--gesticulating with a
- long ruler at the other end of the room--that if his services in the morning
- were useful, how indispensible, then, in the afternoon?</p>
- <p>"With
- submission, sir," said Turkey on this occasion, "I consider
- myself your right-hand man. In the morning I but marshal and deploy my
- columns; but in the afternoon I
- put myself at their head, and gallantly charge the foe,
- thus!"--and he made a violent
- thrust with the ruler.</p>
- <p>"But the blots, Turkey," intimated I.</p>
- <p>"True,--but, with submission, sir, behold these hairs! I am getting old.
- Surely, sir, a blot or two of a warm afternoon is not the page--is honorable.
- With submission, sir, we both are getting old."</p>
- <p>This
- appeal to my fellow-feeling was hardly to be resisted. At
- all events, I saw that go he would not. So I made up my mind to let him
- stay, resolving, nevertheless, to see to it, that during the afternoon
- he had to do with my less important papers.</p>
- <p>Nippers, the second on my list, was a whiskered, sallow, and, upon the
- whole, rather piratical-looking young man of about
- five and twenty. I always deemed him the victim of two evil powers-- ambition
- and indigestion. The ambition was evinced by a certain impatience of the
- duties of a mere
- copyist, an unwarrantable usurpation of strictly profession
- affairs, such as the original
- drawing up of legal documents. The indigestion seemed betokened
- in an occasional nervous testiness and grinning irritability, causing the
- teeth to audibly grind together over mistakes committed in copying; unnecessary
- maledictions, hissed, rather than spoken, in the heat of business; and
- especially by a continual
- discontent with the height of the table where he worked.
- Though of a very ingenious mechanical turn, Nippers could never get this
- table to suit him. He put chips under it, blocks of various sorts, bits
- of pasteboard, and at last went so far as to attempt an exquisite adjustment
- by final pieces of folded blotting-paper. But no invention would answer.
- If, for the sake of easing his back, he brought the table lid at a sharp
- angle well up towards his chin, and wrote there like a man using the steep
- roof of a Dutch house for his desk:--then he declared that it stopped the
- circulation in his arms. If now he lowered the table to his waistbands,
- and stooped over it in writing, then there was a sore aching in his back.
- In short, the truth of the matter was, Nippers knew not what he wanted.
- Or, if
- he wanted anything, it was to be rid of a scrivener's table
- altogether. Among the manifestations of his diseased ambition was a fondness
- he had for receiving visits from certain ambiguous-looking fellows in seedy
- coats, whom he called his clients. Indeed I was aware that not only was
- he, at times, considerable of a ward-politician, but he occasionally did
- a little businessat the Justices' courts, and was not unknown on the
- steps of the Tombs. I have good reason to believe, however, that one individual
- who called upon him at my chambers, and who, with a grand air, he insisted
- was his client, was no other than a dun, and the alleged title-deed, a
- bill. But with all his failings, and the annoyances he caused me, Nippers,
- like his compatriot Turkey, was a very useful
- man to me; wrote a neat, swift hand; and, when he chose,
- was not deficient in a gentlemanly sort of deportment. Added to this, he
- always dressedin a gentlemanly sort of way; and so, incidentally,
- reflected credit upon my chambers. Whereas with respect to Turkey, I had
- much ado to keep him from being a reproach to me. His clothes were apt
- to look oily and smell of eating-houses. He wore his pantaloons very loose
- and baggy in summer. His coats were execrable; his hat not to be handled.
- But while the hat was a thing of indifference to
- me, inasmuch as his natural civility and deference, as a dependent Englishman,
- always led him to doff it the moment he entered the room, yet his coat
- was another matter. Concerning his coats, I reasoned with him; but with
- no effect. The truth was, I suppose, that a man with so small an income,
- could not afford to sport such a lustrous face and a lustrous coat at one
- and the same time. As Nippers once observed, Turkey's money went chiefly
- for red ink. One winter day
- I presented Turkey with a highly-respectable looking coat
- of my own, a padded gray coat, of a most comfortable warmth, and which
- buttoned straight up from the knee to the neck. I thought Turkey would
- appreciate the favor, and abate his rashness and obstreperousness of afternoons.
- But no. I verily believe that buttoning himself up in so downy and blanket-like
- a coat had a pernicious effect upon him; upon the same principle that too
- much oats are bad for horses. In fact, precisely as a rash, restive horse
- is said to feel his oats, so Turkey felt his coat. It made
- him insolent. He was a man whom prosperity harmed.</p>
- <p>Though concerning the self-indulgent habits of Turkey I had my own private
- surmises, yet touching Nippers I was well persuaded that whatever might
- be his faults in other respects, he was, at least, a temperate young man.
- But indeed, nature herself seemed to have been his vintner, and at his birth charged
- him so thoroughly with an irritable, brandy-like disposition, that all
- subsequent potations were needless. When I consider how, amid the stillness
- of my chambers, Nippers would sometimes impatiently rise from his seat,
- and stooping over his table, spread his arms wide apart, seize the whole
- desk, and move it, and jerk it, with a grim, grinding motion on the floor,
- as if the table were a perverse
- voluntary agent, intent on thwarting and vexing him; I plainly
- perceive that for Nippers, brandy and water were altogether superfluous.</p>
- <p>It was fortunate for me that, owing to its course--indigestion--the irritability
- and consequent nervousness of Nippers, were mainly observable in the morning,
- while in the afternoon he was comparatively mild. So that Turkey's paroxysms
- only coming on about twelve o'clock, I never had to do with their eccentricities
- at one time. Their fits relieved each other like guards. When Nippers'
- was on, Turkey's was off, and vice versa. This was a good
- natural arrangement under the circumstances.</p>
- <p>Ginger Nut, the third on my list, was a lad some twelve years old. His
- father was a carman, ambitious of seeing his son on the bench instead of
- a cart, before he died. So he sent him to my office as a student at law,
- errand boy, and cleaner and sweeper, at the rate of one dollar a week.
- He had a little desk to himself, but he did not use it much. Upon inspection,
- the drawer exhibited a great array of the shells of various sorts of nuts.
- Indeed, to this quick-witted youth the whole noble science of the law was
- contained in a nut-shell. Not the least among the employments of Ginger
- Nut, as well as one which he discharged with the most alacrity, was his
- duty as cake and apple purveyor for Turkey and Nippers. Copying law papers
- being proverbially a dry,
- husky sort of business, my two scriveners were fain to moisten
- their mouths very often with Spitzenbergs to be had at the numerous stalls
- nigh the Custom House and Post Office. Also, they sent Ginger Nut very
- frequently for that peculiar cake--small, flat, round, and very spicy--after
- which he had been named by them. Of a cold morning when business was but
- dull, Turkey would gobble up scores of these cakes, as if they were mere
- wafers--indeed they sell them at the rate of six or eight for a penny--the
- scrape of his pen blending with the crunching of the crisp particles in
- his mouth. Of all the fiery afternoon blunders and flurried rashnesses
- of Turkey, was his once moistening a ginger-cake between his lips, and
- clapping it on to a mortgage for a seal. I
- came within an ace of dismissing him then. But he mollified
- me by making an oriental bow, and saying--"With submission, sir, it was
- generous of me to
- find you in stationery on my own account."</p>
- <p>Now my original business--that of a conveyancer
- and title hunter, and drawer-up of recondite documents of
- all sorts--was considerably increased by receiving the master's office.
- There was now great work for scriveners. Not only must I push the clerks
- already with me, but I must have additional help. In answer to my advertisement,
- a motionless young man one morning, stood upon my office threshold, the
- door being open, for it was summer. I can see that figure now--pallidly
- neat, pitiably respectable, incurably forlorn! It was Bartleby.</p>
- <p>After a few words touching his qualifications, I engaged him, glad to
- have among my
- corps of copyists a man of so singularly
- sedate an aspect, which I thought might operate beneficially
- upon the flighty temper of Turkey, and the fiery one of Nippers.</p>
- <p>I should have stated before that ground glass folding-doors divided my
- premises into two parts, one of which was occupied by my scriveners, the
- other by myself. According
- to my humor I threw open these doors, or closed them. I resolved
- to assign Bartleby a corner by the folding-doors, but on my side of them,
- so as to have this quiet man within easy call, in case any trifling
- thing was to be done. I placed his desk close up to a small
- side window in that part of the room, a window which originally had afforded
- a lateral view of certain grimy back-yards and bricks, but which, owing
- to subsequent
- erections, commanded at present no view at all, though it
- gave some light. Within three feet of the panes was a wall, and the light
- came down from far above, between two lofty buildings, as from a very small
- opening in a dome. Still further to a satisfactory arrangement, I procured
- a high green folding screen, which might entirely isolate Bartleby
- from my sight, though not remove him from my
- voice. And thus, in a manner, privacy and society were
- conjoined.
- </p>
- <p>At first Bartleby did an extraordinary quantity of writing. As if long
- famishingfor something to copy, he seemed to gorge himself on my documents. There
- was no pause for digestion. He ran a day and night line, copying by sun-light
- and by candle-light. I should have been quite delighted with his application,
- had be been cheerfully
- industrious. But he wrote on silently, palely, mechanically.
- </p>
- <p>It is, of course, an indispensable part of a scrivener's business to verify
- the accuracy of his copy, word by word. Where there are two or more scriveners
- in an office, they assist each other in this examination, one reading from
- the copy, the other holding the original. It is a very
- dull, wearisome, and lethargic affair. I can readily imagine
- that to some sanguine temperaments it would be altogether
- intolerable. For example, I cannot credit that the mettlesome
- poet Byron would have contentedly sat down with Bartleby
- to examine a law document of, say five hundred pages, closely written in
- a crimpy hand.</p>
- <p>Now and then, in the haste of business, it had been my habit to assist
- in comparing some brief document myself, calling Turkey or Nippers for
- this purpose. One object I had in placing Bartleby so handy to me behind
- the screen, was to avail myself of his services on such trivial
- occasions. It was on the third day, I think, of his being
- with me, and before any necessity had arisen for having his own writing
- examined, that, being much hurried to complete a small affair I had in
- hand, I abruptly called to Bartleby. In my haste and natural
- expectancy of instant compliance, I sat with my head bent
- over the original on my desk, and my right hand sideways, and somewhat
- nervously extended with the copy, so that immediately upon emerging from
- his retreat, Bartleby might snatch it and proceed to business without
- the least delay.</p>
- <p>In this very attitude did I sit when I called to him, rapidly stating
- what it was I wanted him to do--namely, to examine a small paper with me.
- Imagine my surprise, nay, my consternation, when without moving from his
- privacy, Bartleby in a singularly mild,
- firm voice, replied,"I
- would prefer not to."
- </p>
- <p>I sat awhile in perfect silence, rallying my stunned faculties. Immediately
- it occurred to me that my ears had deceived me, or Bartleby had entirely
- misunderstood my meaning. I repeated my request in the clearest tone I
- could assume. But in quite as clear a one came the previous reply, "I would
- prefer not to."</p>
- <p>"Prefer not to," echoed I, rising in high excitement, and crossing the
- room with a stride, "What do you mean? Are you moon-struck? I want you to help me
- compare this sheet here--take it," and I thrust it towards him.</p>
- <p>"I would prefer not to," said he.</p>
- <p>I looked at him steadfastly. His face was leanly composed; his gray eye
- dimly calm. Not a wrinkle of agitation rippled him. Had there been the
- least uneasiness, anger, impatience or impertinence in his manner; in other
- words, had there been any thing ordinarily
- human about him, doubtless I
- should have violently dismissed him from the premises. But
- as it was, I should have as soon thought of turning my pale plaster-of-paris
- bust of Cicero out of doors. I stood gazing at him awhile,
- as he went on with his own writing, and then reseated myself at my desk.
- This is very strange, thought I. What had one best do? But my business hurried
- me. I concluded to forget the matter for the present, reserving it for
- my future leisure. So calling Nippers from the other room, the paper was
- speedily examined.</p>
- <p>A few days after this, Bartleby concluded four lengthy documents, being
- quadruplicates of a week's testimony taken before me in my High Court of
- Chancery. It became necessary to examine them. It was an important suit,
- and great accuracy was imperative. Having all things arranged I called
- Turkey, Nippers and Ginger Nut from the next room, meaning to place the
- four copies in the hands of my four clerks, while I should read from the
- original. Accordingly Turkey, Nippers and Ginger Nut had taken their seats
- in a row, each with his document in hand, when I called to Bartleby to
- join this interesting
- group.</p>
- <p>"Bartleby! quick, I am waiting."</p>
- <p>I heard a low scrape of his chair legs on the unscraped floor, and soon
- he appeared standing at the entrance of his hermitage.
- </p>
- <p>"What is wanted?" said he mildly.</p>
- <p>"The copies, the copies," said I hurriedly. "We are going to examine them.
- There"--and I held towards him the fourth quadruplicate.</p>
- <p>"I would prefer not to," he said, and gently disappeared behind the screen.</p>
- <p>For a few moments I was turned into a
- pillar of salt, standing at the head of my seated column
- of clerks. Recovering myself, I advanced towards the screen, and demanded
- the reason for such extraordinary conduct.</p>
- <p>"<i>Why</i> do you refuse?"</p>
- <p>"I would prefer not to."</p>
- <p>With any other man I should have flown
- outright into a dreadful passion, scorned all further words,
- and thrust him ignominiously from my presence. But there was something
- about Bartleby that not only strangely disarmed me, but in a wonderful
- manner touched and disconcerted me. I began to reason with him.</p>
- <p>"These are your own copies we are about to examine. It is labor saving
- to you, because one examination will answer for your four papers. It
- is common usage. Every copyist is bound to help examine his
- copy. Is it not so? Will you not speak? Answer!"</p>
- <p>"I prefer not to," he replied in a flute-like tone. It seemed to me that
- while I had been addressing him, he carefully revolved every statement
- that I made; fully comprehended the meaning; could not gainsay the irresistible
- conclusion; but, at the same time, some paramount consideration prevailed
- with him to reply as he did.</p>
- <p>"You are decided, then, not to comply with my request--a request made
- according to common usage and common sense?"</p>
- <p>He briefly gave me to understand that on that point my
- judgment was sound. Yes: his decision was irreversible.</p>
- <p>It is not seldom the case that when a man is browbeaten in some unprecedented and
- violently unreasonable way, he
- begins to stagger in his own plainest faith. He begins, as
- it were, vaguely to surmise that, wonderful as it may be, all the justice
- and all the reason is on the other side. Accordingly, if any disinterested
- persons are present, he turns to them for some reinforcement for his own
- faltering mind.
- </p>
- <p>"Turkey," said I, "what do you think of this? Am I not right?"</p>
- <p>"With submission, sir," said Turkey, with his blandest tone, "I think
- that you are."</p>
- <p>"Nippers," said I, "what do<i> you</i> think of it?"</p>
- <p>"I think I should kick him out of the office."</p>
- <p>(The reader of nice perceptions will here perceive that, it being morning,
- Turkey's answer is couched in polite and tranquil terms, but Nippers replies
- in ill-tempered ones. Or, to repeat a previous sentence, Nipper's ugly
- mood was on duty, and Turkey's off.)</p>
- <p>"Ginger Nut," said I, willing to enlist the smallest suffrage in my behalf,
- "what do<i> you</i> think of it?"</p>
- <p>"I think, sir, he's a little<i> luny</i>," replied Ginger Nut, with a
- grin.</p>
- <p>"You hear what they say," said I, turning towards the screen, "come forth
- and do
- your duty."</p>
- <p>But he vouchsafed no reply. I pondered a moment in sore perplexity. But
- once more business hurried me. I determined again to postpone the consideration
- of this dilemma to my future leisure. With a little trouble we made out
- to examine the papers without Bartleby, though at every page or two, Turkey
- deferentially dropped his opinion that this proceeding was quite out of
- the common; while Nippers, twitching in his chair with a dyspeptic nervousness,
- ground out between his set teeth occasional hissing maledictions against
- the stubborn oaf behind the screen. And for his (Nipper's) part, this was
- the first and the last time he would do another man's business without
- pay.</p>
- <p>Meanwhile Bartleby sat in his hermitage, oblivious to every thing but
- his own peculiar business there.</p>
- <p>Some days passed, the scrivener being employed upon another lengthy work.
- His late remarkable conduct led me to regard his way narrowly. I observed
- that he never went to dinner; indeed that he never went any where. As yet
- I had never of my personal knowledge known him to be outside of my office.
- He was a perpetual
- sentry in the corner. At about eleven o'clock though, in
- the morning, I noticed that Ginger Nut would advance toward the opening
- in Bartleby's screen, as if silently beckoned thither by a gesture invisible
- to me where I sat. That boy would then leave the office jingling a few
- pence, and reappear with a handful of ginger-nuts which he delivered in
- the hermitage, receiving two of the cakes for his trouble.</p>
- <p>He lives, then, on ginger-nuts, thought I; never eats a dinner, properly
- speaking; he must be a vegetarian then, but no; he never eats even vegetables,
- he eats
- nothing but ginger-nuts. My mind then ran on in reveries
- concerning the probable effects upon the human constitution of living entirely
- on ginger-nuts. Ginger-nuts are so called because they contain ginger as
- one of their peculiar constituents, and the final flavoring one. Now what
- was ginger? A hot, spicy thing. Was Bartleby hot and spicy? Not at all.
- Ginger, then, had no effect upon Bartleby. Probably
- he preferred it should have none.
- </p>
- <p>Nothing so aggravates an earnest person as a passive
- resistance. If the individual so resisted be of a not inhumane
- temper, and the resisting one perfectly harmless in his passivity; then,
- in the better moods of the former, he will endeavor charitably to construe
- to his imagination what proves impossible to be solved by
- his judgment. Even so, for the most part, I regarded Bartleby and his ways.
- Poor fellow! thought I, he means no mischief; it is plain he intends no
- insolence; his aspect sufficiently evinces that his eccentricities are
- involuntary. He
- is useful to me. I can get along with him. If I turn him
- away, the chances are he will fall in with some less indulgent employer,
- and then he will be rudely treated, and perhaps driven forth miserably
- to starve. Yes. Here I
- can cheaply purchase a delicious self-approval. To befriend
- Bartleby; to humor him in his strange willfulness, will cost me little
- or nothing, while I lay up in my soul what will eventually prove a sweet
- morsel for my conscience. But this mood was not invariable
- with me. The passiveness of Bartleby sometimes irritated me. I felt strangely
- goaded on to encounter him in new opposition, to elicit some angry spark
- from him answerable to my own. But indeed I might as well have essayed
- to strike fire with my knuckles against a bit of Windsor
- soap. But one afternoon the evil impulse in me mastered
- me, and the following little scene ensued:</p>
- <p>"Bartleby," said I, "when those papers are all copied, I will compare
- them with you."</p>
- <p>"I would prefer not to."</p>
- <p>"How? Surely you do not mean to persist in that mulish
- vagary?"</p>
- <p>No answer.</p>
- <p>I threw open the folding-doors near by, and turning upon Turkey and Nippers,
- exclaimed in an excited manner--</p>
- <p>"He says, a second time, he won't examine his papers. What do you think
- of it, Turkey?"</p>
- <p>It was afternoon, be it remembered. Turkey sat glowing like a brass boiler,
- his bald head steaming, his hands reeling among his blotted papers.</p>
- <p>"Think of it?" roared Turkey; "I think I'll just step behind his screen,
- and black his eyes for him!"</p>
- <p>So saying, Turkey rose to his feet and threw his arms into a pugilistic
- position. He was hurrying away to make good his promise,
- when I detained him, alarmed at the effect of incautiously rousing Turkey's
- combativeness after dinner.</p>
- <p>"Sit down, Turkey," said I, "and hear what Nippers has to say. What do
- you think of it, Nippers? Would I not be justified in immediately dismissing
- Bartleby?"</p>
- <p>"Excuse me, that is for you to decide, sir. I think his conduct quite
- unusual, and indeed unjust, as regards Turkey and myself. But it may only
- be a passing whim."</p>
- <p>"Ah," exclaimed I, "you have strangely changed your mind then--you speak
- very gently of him now."</p>
- <p>"All beer," cried Turkey; "gentleness is effects of beer--Nippers and
- I dined together to-day. You see how gentle I am, sir. Shall I go and black
- his eyes?"</p>
- <p>"You refer to Bartleby, I suppose. No, not to-day, Turkey," I replied;
- "pray, put up your fists."</p>
- <p>I closed the doors, and again advanced towards Bartleby. I felt additional
- incentives tempting me to my fate. I
- burned to be rebelled against again. I remembered that Bartleby
- never left the office.</p>
- <p>"Bartleby," said I, "Ginger Nut is away; just step round to the Post
- Office, won't you? (it was but a three minutes walk,) and
- see if there is any thing for me."</p>
- <p>"I would prefer not to."</p>
- <p>"You<i> will</i> not?"</p>
- <p>"I <i>prefer</i> not."</p>
- <p>I staggered to my desk, and sat there
- in a deep study. My blind
- inveteracy returned. Was there any other thing in which I
- could procure myself to be ignominiously repulsed by this lean,
- penniless with?--my
- hired clerk? What added thing is there, perfectly reasonable,
- that he will be sure to refuse to do?</p>
- <p>"Bartleby!"</p>
- <p>No answer.</p>
- <p>"Bartleby," in a louder tone.</p>
- <p>No answer.</p>
- <p>"Bartleby," I roared.</p>
- <p>Like a
- very ghost, agreeably to the laws of magical invocation,
- at the third summons, he appeared at the entrance of his hermitage.</p>
- <p>"Go to the next room, and tell Nippers to come to me."</p>
- <p>"I prefer not to," he respectfully
- and slowly said, and mildly disappeared.</p>
- <p>"Very good, Bartleby," said I, in a quiet sort of serenely severe self-possessed
- tone, intimating the unalterable purpose of some terrible
- retribution very close at hand. At the moment I half intended
- something of the kind. But upon the whole, as it was drawing towards my
- dinner-hour, I thought it best to put on my hat and walk home for the day,
- suffering much from perplexity and distress of mind.</p>
- <p> Shall
- I acknowledge it? The conclusion of this whole business was
- that it soon became a fixed fact of my chambers, that a pale young scrivener,
- by the name of Bartleby, had a desk there; that he copied for me at the
- usual rate of four
- cents a folio (one hundred words); but he was permanently
- exempt from examining the work done by him, that duty being transferred
- to Turkey and Nippers, one of compliment doubtless to their superior acuteness;
- moreover, said Bartleby was never on any account to be dispatched on the
- most trivial errand of any sort; and that even if entreated to take upon
- him such a matter, it was generally understood that he would prefer not
- to--in other words, that he would refuse point-blank.
- </p>
- <p>32 As days passed on, I became considerably reconciled to Bartleby. His
- steadiness, his freedom from all dissipation, his incessant industry (except
- when he chose to throw himself into a standing revery behind his screen),
- his great stillness, his unalterableness of demeanor under all circumstances,
- made him a
- valuable acquisition. One prime thing was this,--he was
- always there;--first in the morning, continually through the day, and the
- last at night. I had a singular confidence in his honesty. I felt my most
- precious papers perfectly safe in his hands. Sometimes to be sure I could
- not, for
- the very soul of me, avoid falling into sudden spasmodic
- passions with him. For it was exceeding difficult to bear in mind all the
- time those strange peculiarities, privileges, and unheard of exemptions,
- forming the tacit stipulations on Bartleby's part under which he remained
- in my office. Now and then, in the eagerness of dispatching pressing business,
- I would inadvertently summon Bartleby, in a short, rapid tone, to put his
- finger, say, on the incipient tie of a bit of red tape with which I was
- about compressing some papers. Of course, from behind the screen the usual
- answer, "I prefer not to," was sure to come; and then, how
- could a human creature with the common infirmities of our
- nature, refrain from bitterly exclaiming upon such perverseness--such unreasonableness.
- However, every added repulse of this sort which I received only tended
- to lessen the probability of my repeating the inadvertence.</p>
- <p>Here is must be said, that according to the custom of most legal gentlemen
- occupying chambers in densely-populated law buildings, there were several
- keys to my door. One was kept by a woman residing in the attic, which person
- weekly scrubbed and daily swept and dusted my apartments. Another was kept
- by Turkey for convenience sake. The third I sometimes carried in my own
- pocket. The fourth I knew not who had.</p>
- <p>Now, one Sunday morning I happened to go to Trinity Church, to
- hear a celebrated preacher, and finding myself rather early
- on the ground, I thought I would walk round to my chambers for a while.
- Luckily I had my key with me; but upon applying it to the lock, I found
- it resisted by something inserted from the inside. Quite surprised, I called
- out; when to my consternation a key was turned from within; and thrusting
- his lean visage at me, and holding the door ajar, the
- apparition of Bartleby appeared, in his shirt sleeves, and
- otherwise in a strangely tattered dishabille, saying quietly that he was
- sorry, but he was deeply engaged just then, and--preferred not admitting
- me at present. In a brief word or two, he moreover added, that perhaps
- I had better walk round the block two or three times, and by that time
- he would probably have concluded his affairs. Now, the utterly unsurmised
- appearance of Bartleby, tenanting my law-chambers of a Sunday
- morning, with his cadaverously gentlemanly nonchalance,
- yet withal firm and self-possessed, had such a strange effect upon me,
- that incontinently I slunk away from my own door, and did as desired. But
- not without sundry twinges of impotent rebellion against the mild effrontery
- of this unaccountable scrivener. Indeed, it was his wonderful mildness
- chiefly, which not only disarmed me, but unmanned me, as it were. For I consider
- that one, for the time, is a sort of unmanned when he tranquilly permits
- his hired clerk to dictate to him, and order
- him away from his own premises. Furthermore, I was full of
- uneasiness as to what Bartleby could possibly be doing in my office in
- his shirt sleeves, and in an otherwise dismantled condition of a Sunday
- morning. Was any thing amiss going on? Nay, that was out of the question.
- It was not to be thought of for a moment that Bartleby was an immoral person.
- But what could he be doing there?--copying? Nay again, whatever might be
- his eccentricities, Bartleby was an eminently decorous person. He would
- be the last man to sit down to his desk in any state approaching to nudity.
- Besides, it was Sunday; and there was something about Bartleby that forbade
- the supposition that we would by any secular occupation violate the
- proprieties of the day.</p>
- <p>Nevertheless, my mind was not pacified; and full of a restless curiosity,
- at last I returned to the door. Without hindrance I inserted my key, opened
- it, and entered. Bartleby was not to be seen. I looked round anxiously,
- peeped behind his screen; but it was very plain that he was gone. Upon
- more closely examining the place, I surmised that for an indefinite period
- Bartleby must have ate, dressed, and slept in my office, and that too without
- plate, mirror, or bed. The cushioned seat of a rickety old sofa in one
- corner bore t faint impress of a lean, reclining form. Rolled away under
- his desk, I found a blanket; under the empty grate, a blacking box and
- brush; on a chair, a tin basin, with soap and a ragged towel; in a newspaper
- a few crumbs of ginger-nuts and a morsel of cheese. Yet, thought I, it
- is evident enough that Bartleby has been making his home here, keeping
- bachelor's hallall by himself. Immediately then the thought came sweeping
- across me, What miserable friendlessness and loneliness are here revealed!
- His poverty is great; but his solitude, how
- horrible! Think of it. Of a Sunday, Wall-street is deserted
- as Petra; and every night of every day
- it is an emptiness. This building too, which of week-days hums with industry
- and life, at nightfall echoes with sheer vacancy, and all through Sunday
- is forlorn. And here Bartleby makes his home; sole spectator of a solitude
- which he has seen all populous--a sort of innocent and transformed Marius
- brooding among the ruins of Carthage!
- </p>
- <p>For the first
- time in my life a feeling of overpowering stinging melancholy
- seized me. Before, I had never experienced aught but a not-unpleasing sadness.
- The bond of a common humanity now drew me irresistibly to gloom. A fraternal
- melancholy! For both I and Bartleby were sons
- of Adam. I remembered the bright silks and sparkling faces
- I had seen that day in gala trim, swan-like sailing down the Mississippi
- of Broadway; and I contrasted them with the pallid copyist, and thought
- to myself, Ah, happiness courts the light, so we deem the world is gay;
- but misery hides aloof, so we deem that misery there is none. These sad
- fancyings-- chimeras, doubtless, of a sick and
- silly brain--led on to other and more special thoughts, concerning the
- eccentricities of Bartleby. Presentiments of strange discoveries hovered
- round me. The scrivener's pale form appeared to me laid
- out, among uncaring strangers, in its shivering winding
- sheet.</p>
- <p>Suddenly I was attracted by Bartleby's closed desk, the key in open sight
- left in the lock.</p>
- <p> I
- mean no mischief, seek the gratification of no heartless
- curiosity, thought I; besides, the desk is mine, and its contents too,
- so I will make bold to look within. Every thing was methodically arranged,
- the papers smoothly placed. The pigeon holes were deep, and removing the
- files of documents, I groped into their recesses. Presently I felt something
- there, and dragged it out. It was an old bandanna handkerchief, heavy and
- knotted. I opened it, and saw it was a savings' bank.</p>
- <p>I now recalled all the quiet mysteries which I had noted in the man. I
- remembered that he never spoke but to answer; that though at intervals
- he had considerable time to himself, yet I had never seen him reading--no,
- not even a newspaper; that for long periods he would stand looking out,
- at his pale window behind the screen, upon the dead brick wall; I was quite
- sure he never visited any refectory or eating house; while his pale face
- clearly indicated that he never drank beer like Turkey, or tea and coffee
- even, like other men; that he never went any where in particular that I
- could learn; never went out for a walk, unless indeed that was the case
- at present; that he had declined telling who he was, or whence he came,
- or whether he had any relatives in the world; that though so thin and pale,
- he never complained of ill health. And more than all, I remembered a certain
- unconscious air of pallid--how shall I call it?--of pallid
- haughtiness, say, or rather an austere reserve about him,
- which had positively awed me into my tame compliance with his eccentricities,
- when I had feared to ask him to do the slightest incidental thing for me,
- even though I might know, from his long-continued motionlessness, that
- behind his screen he must be standing in one of those dead-wall
- reveries of his.</p>
- <p>Revolving all these things, and coupling them with the recently discovered
- fact that he made my office his constant abiding place and home, and not
- forgetful of his morbid moodiness; revolving all these things, a prudential
- feeling began to steal over me. My first emotions had been
- those of pure melancholy and sincerest pity; but just in proportion as
- the forlornness of Bartleby grew and grew to my imagination, did that same
- melancholy merge into fear, that pity into repulsion. So
- true it is, and so terrible too, that up to a certain point the thought
- or sight of misery enlists our best affections; but, in certain special
- cases, beyond that point it does not. They err who would assert that invariably
- this is owing to the inherent selfishness of the human heart. It rather
- proceeds from a certain hopelessness of remedying excessive and organic
- ill. To a sensitive being, pity is not seldom pain. And when at last it
- is perceived that such pity cannot lead to effectual succor, common sense
- bids the soul be rid of it. What I saw that morning persuaded me that the
- scrivener was the victim of
- innate and incurable disorder. I might give alms to his body;
- but his body did not pain him; it was his soul that suffered, and his
- soul I could not reach.
- </p>
- <p>I did not accomplish the purpose of going to Trinity Church that morning.
- Somehow, the
- things I had seen disqualified me for the time from church-going.
- I walked homeward, thinking what I would do with Bartleby. Finally, I
- resolvedupon this;--I would put certain calm questions to him the
- next morning, touching his history, &amp;c., and if he declined to answer
- then openly and reservedly (and I supposed he would prefer not), then to
- give him a twenty dollar bill over and above whatever I might owe him,
- and tell him his services were no longer required; but that if in any other
- way I could assist him, I would be happy to do so, especially if he desired
- to return to his native place, wherever that might be, I would willingly
- help to defray the expenses. Moreover, if after reaching home, he found
- himself at any time in want of aid, a letter from him would be sure of
- a reply.</p>
- <p>The next morning came.</p>
- <p>"Bartleby," said I, gently calling to him behind the screen.</p>
- <p>No reply.</p>
- <p>"Bartleby," said I, in a still gentler tone, "come here; I am not going
- to ask you to do any thing you would prefer not to do--I simply wish to
- speak to you."</p>
- <p>Upon this he noiselessly slid into view.</p>
- <p>"Will you tell me, Bartleby, where
- you were born?"
- </p>
- <p>"I would prefer not to."</p>
- <p>"Will you tell me <i>anything </i>about yourself?"</p>
- <p>"I would prefer not to."</p>
- <p>"But what reasonable
- objection can you have to speak to me? I feel friendly towards
- you."</p>
- <p>He did not look at me while I spoke, but kept his glance fixed upon my
- bust of Cicero, which as I then sat, was directly behind me, some
- six inches above my head. "What is your answer, Bartleby?" said I, after
- waiting a considerable time for a reply, during which his countenance remained
- immovable, only there was the faintest
- conceivable tremor of the white attenuated mouth.</p>
- <p>"At present I prefer to give no answer," he said, and retired into his
- hermitage.</p>
- <p>It was rather weak in me I confess, but his manner on this occasion nettled
- me. Not only did there seem to lurk in it a certain disdain, but his
- perverseness seemed ungrateful, considering the undeniable
- good usage and indulgence he had received from me.</p>
- <p>Again I sat ruminating what I should do.Mortified as I was at his behavior,
- and resolved as I had been to dismiss him when I entered my office, nevertheless
- I strangely felt something superstitious knocking at my heart, and forbidding
- me to carry out my purpose, and denouncing me for a villain if I dared
- to breathe one bitter word against this forlornest of mankind. At last,
- familiarly drawing my chair behind his screen, I sat down and said: "Bartleby,
- never mind then about revealing your history; but let me entreat you,
- as a friend, to comply as far as may be with the usages of this office.
- Say now you will help to examine papers tomorrow or next day: in short,
- say now that in a day or two you will begin to be a little reasonable:--say
- so, Bartleby."</p>
- <p>"At present I would prefer not to be a little reasonable
- was his idly cadaverous reply.,"</p>
- <p>Just then the folding-doors opened, and Nippers approached. He seemed
- suffering from an unusually bad night's rest, induced by severer indigestion
- than common. He overheard those final words of Bartleby.</p>
- <p><i>"Prefer</i> not,
- eh?" gritted Nippers--"I'd<i> prefer</i> him, if I were you, sir," addressing
- me--"I'd <i>prefer</i> him; I'd give him preferences, the stubborn mule!
- What is it, sir, pray, that he <i>prefers</i> not to do now?"</p>
- <p>Bartleby moved not a limb.</p>
- <p>"Mr.
- Nippers," said I, "I'd prefer that you would withdraw for the present."
- </p>
- <p>Somehow, of late I had got into the way of involuntary using this word
- "prefer" upon all sorts of not exactly suitable occasions. And I trembled
- to think that my contact with the scrivener had already and seriously affected
- me in a mental way. And what further and deeper aberration might it not yet produce?
- This apprehension had not been without efficacy in determining me to summary
- means.</p>
- <p>As Nippers, looking very sour and sulky, was departing, Turkey blandly
- and deferentially approached.</p>
- <p>"With submission, sir," said he, "yesterday I was thinking about Bartleby
- here, and I think that if he would but prefer to take a quart of good ale
- every day, it would do much towards mending him, and enabling him to assist
- in examining his papers."</p>
- <p>"So you have got the word too," said I, slightly excited.</p>
- <p>"With submission, what word, sir," asked Turkey, respectfully crowding
- himself into the contracted space behind the screen, and by so doing, making
- me jostle
- the scrivener. "What word, sir?"</p>
- <p>"I would prefer to be left alone here," said Bartleby, as if offended
- at being mobbed
- in his privacy.
- </p>
- <p>"<i>That's</i> the word, Turkey," said I--<i>"that's</i> it."</p>
- <p>"Oh,<i> prefer</i> oh yes--queer word. I never use it myself. But, sir
- as I was saying, if he would but prefer--"</p>
- <p>"Turkey," interrupted I, "you will please withdraw."</p>
- <p>"Oh, certainly, sir, if
- you prefer that I should."</p>
- <p>As he opened the folding-door to retire, Nippers at his desk caught a
- glimpse of me, and asked whether I would prefer to have a certain paper
- copied on blue paper or white. He did not in the least roguishly accent
- the word prefer. It was plain that it involuntarily rolled from his tongue.
- I thought to myself, surely I must get rid of a demented man, who already has in some
- degree turned the tongues, if not the heads of myself and clerks. But I
- thought it prudent not to break the dismission
- at once.</p>
- <p>The next day I noticed that Bartleby
- did nothing but stand at his window in his dead-wall revery.
- Upon asking him why he did not write, he said that he had decided upon
- doing no more writing.</p>
- <p>"Why, how now? what next?" exclaimed I, "do no more writing?"</p>
- <p>"No more."</p>
- <p>"And what is the reason?"</p>
- <p>"Do
- you not see the reason for yourself," he indifferently replied.</p>
- <p>I looked steadfastly at him, and perceived that his eyes looked dull and
- glazed. Instantly it occurred to me, that his unexampled diligence in copying
- by his dim window for the first few weeks of his stay with me might have
- temporarily impaired
- his vision.</p>
- <p>I was touched. I said something in condolence with him. I hinted that
- of course he did wisely in abstaining from writing for a while; and urged
- him to embrace that opportunity of taking wholesome exercise in the open
- air. This, however, he
- did not do. A few days after this, my other clerks being
- absent, and being in a great hurry to dispatch certain letters by the mail,
- I thought that, having nothing else earthly to do, Bartleby would surely
- be less inflexible than usual, and carry these letters to
- the post-office. But he blankly declined. So, much to my
- inconvenience, I went myself.</p>
- <p>Still added
- days went by. Whether Bartleby's eyes improved or not, I
- could not say. To all appearance, I thought they did. But when I asked
- him if they did, he vouchsafed no answer. At all events, he would do no
- copying. At last, in reply to my urgings, he informed me that he had permanently
- given up copying.</p>
- <p>"What!" exclaimed I; "suppose your eyes should get entirely well- better
- than ever before--would you not copy then?"</p>
- <p>"I have given up copying," he answered, and slid
- aside.
- </p>
- <p>He remained as ever, a
- fixture in my chamber. Nay--if that were possible--he became
- still more of a fixture than before. What was to be done? He would do nothing
- in the office: why should he stay there? In plain fact, he had now become
- a millstone to me, not only useless as a necklace, but afflictive to bear.
- Yet I was sorry for him. I speak less than truth when I say that, on his
- own account, he occasioned me uneasiness. If he would but have named a
- single relative or friend, I would instantly have written, and urged their
- taking the poor fellow away to some convenient retreat. But he seemed alone,
- absolutely alone in the universe. A
- bit of wreck&lt;/font&gt; in the mid Atlantic. At length,
- necessities connected with my business tyrannized over all other considerations.
- Decently as I could, I told Bartleby that in six days' time he must unconditionally
- leave the office. I warned him to take measures, in the interval, for procuring
- some other abode. I offered to assist him in this endeavor, if he himself
- would but take the first step towards a removal. "And when you finally
- quit me, Bartleby," added I, "I shall see that you go not away entirely
- unprovided. Six days from this hour, remember."</p>
- <p>At the expiration of that period, I peeped behind the screen, and lo!
- Bartleby was there.
- </p>
- <p>I buttoned
- up my coat, balanced myself; advanced slowly towards him,
- touched his shoulder, and said, "The time has come; you must quit this
- place; I am sorry for you; here is money; but you must go."</p>
- <p>"I would prefer not," he replied, with his back still towards me.</p>
- <p>"You<i> must</i>."</p>
- <p>He remained silent.</p>
- <p>Now I had an unbounded confidence in this man's common honesty. He had
- frequently restored to me six pences and shillings carelessly dropped upon
- the floor, for I am apt to be very reckless in such shirt-button
- affairs. The proceeding then which followed will not be
- deemed extraordinary. "Bartleby,"
- said I, "I owe you twelve dollars on account; here are thirty-two; the
- odd twenty are yours.--Will you take it? and I handed the
- bills towards him.</p>
- <p>But he made no motion.</p>
- <p>"I will leave them here then," putting them under a weight on the table.
- Then taking my hat and cane and going to the door I tranquilly turned and
- added--"After you have removed your things from these offices, Bartleby,
- you will of course lock the door--since every one is now gone for the day
- but you--and if you please, slip your key underneath the mat, so that I
- may have it in the morning. I shall not see you again; so good-bye to you.
- If hereafter in your new place of abode I can be of any service to you,
- do not fail to advise me by letter. Good-bye, Bartleby, and fare you well."</p>
- <p>But he answered not a word; like the
- last column of some ruined temple, he remained standing
- mute and solitary in the middle of the otherwise deserted room.</p>
- <p>As I walked home in a pensive mood, my vanity
- got the better of my pity. I could not but highly plume
- myself on my masterly management in getting rid of Bartleby. Masterly I
- call it, and such it must appear to any dispassionate thinker. The beauty
- of my procedure seemed to consist in its perfect quietness. There was
- no vulgar bullying, no bravado of any sort, no choleric hectoring
- and striding to and fro across the apartment, jerking out vehement commands
- for Bartleby to bundle himself off with his beggarly traps. Nothing of
- the kind. Without loudly bidding Bartleby depart--as an
- inferior genius might have done--I assumed the ground that
- depart he must; and upon the assumption built all I had to say. The more
- I thought over my procedure, the more I was charmed with it. Nevertheless,
- next morning, upon awakening, I had my doubts,--I had somehow slept off
- the fumes of vanity. One of the coolest and wisest hours a man has, is
- just after he awakes in the morning. My procedure seemed as sagacious as
- ever,--but only in theory. How it would prove in practice--there was the
- rub. It was truly a beautiful thought to have assumed Bartleby's departure;
- but, after all, that assumption was simply my own, and none of Bartleby's.
- The great point was, not whether I had assumed that he would quit me, but
- whether he would prefer so to do. He was more a man
- of preferences than assumptions.</p>
- <p>After breakfast, I walked down town, arguing the probabilities pro and
- con. One moment I thought it would prove a miserable failure, and Bartleby
- would be found all alive at my office as usual; the next moment it seemed
- certain that I should see his chair empty. And so I kept veering about.
- At the corner of Broadway and Canal- street, I saw quite an excited group
- of people standing in earnest conversation.</p>
- <p>"I'll take odds he doesn't," said a voice as I passed.</p>
- <p>"Doesn't go?--done!" said I, "put up your money."</p>
- <p>I was instinctively putting my hand in my pocket to produce my own, when
- I remembered that this was an election day. The words I had overheard bore
- no reference to Bartleby, but to the success or non-success of some candidate
- for the mayoralty. In my intent frame of mind, I had, as it were, imagined
- that all Broadway shared in my excitement, and were debating
- the same question with me. I passed on, very thankful that the uproar of
- the street screened my momentary absent-mindedness.</p>
- <p>As I had intended, I was earlier than usual at my office door. I stood
- listening for a moment. All was still. He must be gone. I tried the knob.
- The door was locked. Yes, my procedure had worked to a charm; he indeed
- must be vanished. Yet a certain melancholy mixed with this: I was almost
- sorry for my brilliant success. I was fumbling under the
- door mat for the key, which Bartleby was to have left there for me, when
- accidentally my knee knocked against a panel, producing a summoning sound,
- and in response a voice came to me from within--"Not yet; I am occupied."</p>
- <p>It was Bartleby.</p>
- <p>I was thunderstruck. For an instant I stood like
- the man who, pipe in mouth, was killed one cloudless afternoon
- long ago in Virginia, by summer lightning; at his own warm open window
- he was killed, and remained leaning out there upon the dreamy afternoon,
- till some one touched him, when he fell. "Not gone!" I murmured at last.
- But again obeying that wondrous
- ascendancy which the inscrutable scrivener had over me, and
- from which ascendancy, for all my chafing, I could not completely escape,
- I slowly went down stairs and out into the street, and while walking round
- the block, considered what I should next do in this unheard-of-perplexity.
- Turn the man out by an actual thrusting I could not; to drive him away
- by calling him hard names would not do; calling in the police was an unpleasant
- idea; and yet, permit
- him to enjoy his cadaverous triumph over me,--this too I
- could not think of. What was to be done? or, if nothing could be done,
- was there any thing further that I could assume in the matter? Yes, as before
- I had prospectively assumed that Bartleby would depart, so now I might
- retrospectively assume that departed he was. In the legitimate carrying
- out of this assumption, I might enter my office in a great hurry, and pretending
- not to see Bartleby at all, walk straight against him as if he were air.
- Such a proceeding would in a singular degree have the appearance of a
- home-thrust. It was hardly possible that Bartleby could withstand
- such an application of the doctrine of assumptions. But upon second thoughts
- the success of the plan seemed rather dubious. I resolved to argue the
- matter over with him again.</p>
- <p>Bartleby," said I, entering the office, with a quietly severe expression.
- "I am seriously displeased. I am pained, Bartleby. I had thought better
- of you. I had imagined you of such a gentlemanly
- organization, that in any delicate dilemma a slight hint
- would suffice--in short, an assumption. But it appears I am deceived. Why,"
- I added, unaffectedly
- starting, "you have not even touched the money yet," pointing
- to it, just where I had left it the evening previous.</p>
- <p>He answered nothing.</p>
- <p>"Will you, or will you not, quit me?" I now demanded in a sudden
- passion, advancing close to him.</p>
- <p>"I would prefer <i>not</i> to quit you," he replied, gently
- emphasizing the<i> not</i>.</p>
- <p>"What earthly
- right have you to stay here? do you pay any rent? Do you
- pay my taxes? Or is this property yours?"</p>
- <p>He answered nothing.</p>
- <p>"Are you ready to go on and write now? Are your eyes recovered? Could
- you copy a small paper for me this morning? or help examine a few lines?
- or step round to the post-office? In a word, will you do any thing at all,
- to give a coloring to your refusal to depart the premises?"</p>
- <p>He silently
- retired into his hermitage.</p>
- <p>I was now in such a state of nervous resentment that I thought it but
- prudentto check myself at present from further demonstrations. Bartleby
- and I were alone. I
- remembered the tragedy of the unfortunate Adams and the still
- more unfortunate Colt in the solitary office of the latter; and how poor
- Colt, being dreadfully incensed by Adams, and imprudently permitting himself
- to get wildly excited, was at unawares hurried into his fatal
- act--an act which certainly no
- man could possibly deplore more than the actor himself. Often
- it had occurred to me in my ponderings upon the subject, that had
- that altercation taken place in the public street, or at a private residence,
- it would not have terminated as it did. It was the circumstance of being
- alone in a solitary office, up stairs, of a building entirely unhallowed
- by humanizing domestic associations--an uncarpeted
- office, doubtless of a dusty, haggard sort of appearance;--this
- it must have been, which greatly helped to enhance the irritable desperation
- of the hapless Colt.</p>
- <p>But when this old
- Adam of resentment rose in me and tempted me concerning Bartleby,
- I grappled him and threw him. How? Why, simply by recalling the divine
- injunction: "A new commandment give I unto you, that ye
- love one another." Yes, this it was that saved me. Aside from higher considerations,
- charity often operates as a
- vastly wise and prudent principle--a great safeguard to its
- possessor. Men have committed murder for jealousy's sake, and anger's sake,
- and hatred's sake, and selfishness' sake, and spiritual pride's sake; but
- no man that ever I heard of, ever committed
- a diabolical murder for sweet charity's sake. Mere
- self-interest, then, if no better motive can be enlisted,
- should, especially with high-tempered men, prompt all beings to charity
- and philanthropy. At any rate, upon the occasion in question, I strove
- to drown
- my exasperated feelings towards the scrivener by benevolently
- construing his conduct. Poor fellow, poor fellow! thought I, he don't mean
- any thing; and besides, he has seen hard times, and ought to be indulged.</p>
- <p>I endeavored also immediately to occupy myself, and at the same time
- to comfort my despondency.I tried to fancy that in the course of the
- morning, at such time as might prove agreeable to him, Bartleby, of his
- own free accord, would emerge from his hermitage, and take up some decided
- line of march in the direction of the door. But no. Half-past twelve o'clock
- came; Turkey began to glow in the face, overturn his inkstand, and become
- generally obstreperous; Nippers abated down into quietude and courtesy;
- Ginger Nut munched his noon apple; and Bartleby remained standing at his
- window in one of his profoundest deadwall reveries. Will
- it be credited? Ought I to acknowledge it? That afternoon
- I left the office without saying one further word to him.</p>
- <p>Some days now passed, during which, at leisure intervals I looked a little
- into Edwards
- on the Will," and "Priestly on Necessity." Under the circumstances,
- those books induced a salutary feeling. Gradually I slid
- into the persuasion that these troubles of mine touching
- the scrivener, had been all predestinated
- from eternity, and Bartleby was billeted upon me for some mysterious
- purpose of an all-wise Providence, which it was not for a mere mortal like
- me to fathom. Yes, Bartleby, stay there behind your screen, thought
- I; I shall persecute you no more; you are harmless and noiseless
- as any of these old chairs; in short, I never feel so private as when I
- know you are here. At least I see it, I feel it; I penetrate to the predestinated
- purpose of my life. I am content. Others may have loftier parts to enact;
- but my
- mission in this world, Bartleby, is to furnish you with office-room
- for such period as you may see fit to remain.</p>
- <p>I believe that this wise and blessed frame of mind would have continued
- with me, had it not been for the unsolicited and uncharitable remarks obtruded
- upon me by my
- professional friends who visited the rooms. But thus it often
- is, that the constant friction of illiberal minds wears out at last the
- best resolves of the more generous. Though to be sure, when
- I reflected upon it, it was not strange that people entering my office
- should be struck by the peculiar aspect of the unaccountable Bartleby,
- and so be tempted to throw out some sinister observations concerning him.
- Sometimes an attorney having business with me, and calling at my office,
- and finding no one but the scrivener there, would undertake to obtain some
- sort of precise information from him touching my whereabouts; but without
- heeding his idle
- talk, Bartleby would remain standing immovable in the middle
- of the room. So after contemplating him in that position for a time, the
- attorney would depart, no wiser than he came.</p>
- <p>Also, when a Reference was going on, and the room full of lawyers and
- witnesses and business was driving fast; some deeply occupied legal gentleman
- present, seeing Bartleby wholly unemployed, would request him to run round
- to his (the legal gentleman's) office and fetch some papers for him. Thereupon,
- Bartleby would tranquilly decline, and remain idle as before. Then the
- lawyer would give a great stare, and turn to me. And what could I say?
- At last I was made aware that all through the circle of my professional
- acquaintance, a whisper of wonder was running round, having reference to
- the strange creature I kept at my office. This worried
- me very much. And as the idea came upon me of his possibly
- turning out a long-lived man, and keep occupying my chambers, and denying
- my authority; and perplexing my visitors; and scandalizing
- my professional reputation; and casting a general gloom over the premises;
- keeping soul and body together to the last upon his savings (for doubtless
- he spent but half a dime a day), and in the end perhaps outlive
- me, and claim possession of my office by right of his perpetual
- occupancy: as all these dark anticipations crowded upon me more and more,
- and my friends continually intruded their relentless remarks upon the apparition
- in my room; a great change was wrought in me. I resolved to gather all
- my faculties together, and for ever rid me of this intolerable
- incubus.</p>
- <p>Ere revolving any complicated project, however, adapted to this end, I
- first simply suggested to Bartleby the propriety of his permanent departure.
- In a calm and serious tone, I commended the idea to his careful and mature
- consideration. But having taken three days to meditate upon it, he apprised
- me that his original determination remained the same; in short, that he
- still preferred to abide
- with me.</p>
- <p>What shall I do? I now said to myself, buttoning
- up my coat to the last button. What shall I do? what ought
- I to do? what does conscience say I should do with this man, or rather
- ghost. Rid myself of him, I must; go, he shall. But how? You will not thrust
- him, the poor, pale, passive mortal,--you will not thrust such a helpless
- creature out of your door? you will not dishonor
- yourself by such cruelty? No, I will not, I cannot do that.
- Rather would I let him live and die here, and then mason
- up his remains in the wall. What then will you do? For all
- your coaxing, he will not budge. Bribes he leaves under your own paperweight
- on your table; in short, it is quite plain that he prefers
- to cling to you.</p>
- <p>Then something severe, something unusual must be done. What! surely you
- will not have him collared by a constable, and commit his innocent pallor
- to the common jail? And upon what ground could you procure such a thing
- to be done?--a vagrant, is he? What! he a vagrant, a wanderer, who
- refuses to budge? It is because he will not be a vagrant, then, that you
- seek to count him as a vagrant. That is too absurd. No visible means of
- support: there I have him. Wrong again: for indubitably he does support
- himself, and that is the only unanswerable proof that any man can show
- of his possessing the means so to do. No more then. Since he will not quit
- me, I must quit him. I will change my offices; I will move elsewhere; and
- give him fair notice, that if I find him on my new premises I will then
- proceed against him as a common trespasser.</p>
- <p>Acting accordingly, next day I thus addressed him: "I find these chambers
- too far from the City Hall; the air is unwholesome. In a word, I propose
- to remove my offices next week, and shall no longer require your services.
- I tell you this now, in order that you may seek another place."</p>
- <p>He made no reply, and nothing more was said.</p>
- <p>On the appointed day I engaged carts and men, proceeded to my chambers,
- and having but little furniture, every thing was removed in a few hours.
- Throughout, the scrivener remained standing behind the
- screen, which I directed to be removed the last thing. It
- was withdrawn; and being folded up like a huge folio, left him the motionless
- occupant of a naked room. I stood in the entry watching him
- a moment, while something from within me upbraided me.</p>
- <p>I re-entered, with my hand
- in my pocket--and--and my heart in my mouth.
- </p>
- <p>"Good-bye, Bartleby; I am going--good-bye, and God some way bless you;
- and take that," slipping something in his hand. But it dropped to the floor,
- and then,--strange
- to say--I tore myself from him whom I had so longed to be
- rid of.</p>
- <p>Established in my new quarters, for a day or two I kept the door locked,
- and started at every footfall in the passages. When I returned to my rooms
- after any little absence, I would pause at the threshold for an instant,
- and attentively listen, ere applying my key. But these fears were needless.
- Bartleby never came nigh me.</p>
- <p>I thought all was going well, when a perturbed looking stranger visited
- me, inquiring whether I was the person who had recently occupied rooms
- at No.--Wall-street.</p>
- <p>Full of forebodings, I replied that I was.</p>
- <p>"Then, sir," said the stranger,
- who proved a lawyer, "you are responsible for the man you
- left there. He refuses to do any copying; he refuses to do any thing; he
- says he prefers not to; and he refuses to quit the premises."</p>
- <p>"I am very sorry, sir," said I, with assumed tranquillity, but an inward
- tremor, "but, really, the
- man you allude to is nothing to me --he is no relation or
- apprentice of mine, that you should hold me responsible for him."</p>
- <p>"In mercy's name, who is he?"</p>
- <p>"I certainly cannot inform you. I know nothing about him. Formerly I employed
- him as a copyist; but he has done nothing for me now for some time past."</p>
- <p>"I
- shall settle him then,--good morning, sir."</p>
- <p>Several days passed, and I heard nothing more; and though I often felt
- a charitable prompting to call at the place and see poor Bartleby, yet
- a certain squeamishness of I know not what withheld
- me.</p>
- <p>All is over with him, by this time, thought I at last, when through another
- week no further intelligence reached me. But coming to my room the day
- after, I found several persons waiting at my door in a high state of nervous
- excitement.</p>
- <p>"That's the man--here he comes," cried the foremost one, whom recognized
- as the lawyer who had previously called upon me alone.</p>
- <p>"You must take him away, sir, at once," cried a portly person among them,
- advancing upon me, and whom I knew to be the landlord of No.--Wall-street.
- "These gentlemen, my tenants, cannot stand it any longer; Mr. B--" pointing
- to the lawyer, "has turned him out of his room, and he now persists in
- haunting the buildinggenerally, sitting upon the banisters of the
- stairs by day, and sleeping in the entry by night. Every body is concerned;
- clients are leaving the offices; some
- fears are entertained of a mob; something you must do, and
- that without delay."</p>
- <p> Aghast
- at this torment, I fell back before it, and would fain have
- locked myselfin my new quarters. In vain I persisted that Bartleby
- was nothing to me--no more than to any one else. In vain:--I was the last
- person known to have any thing to do with him, and they held me to the
- terrible account. Fearful
- then of being exposed in the papers (as one person present
- obscurely threatened) I considered the matter, and at length said, that
- if the lawyer would give me a confidential interview with the scrivener,
- in his (the lawyer's) own room, I would that afternoon strive my best to
- rid them of the nuisance they complained of.</p>
- <p>Going up stairs to my old haunt, there was Bartleby silently sitting upon
- the banister at the landing.</p>
- <p>"What are you doing here, Bartleby?" said I.</p>
- <p>"Sitting upon the banister," he mildly replied.</p>
- <p>I motioned him into the lawyer's room, who then left us.</p>
- <p>"Bartleby,"
- said I, "are you aware that you are the cause of great tribulation
- to me, by persisting in occupying the entry after being dismissed from
- the office?"</p>
- <p>No answer.</p>
- <p>"Now one of two things must take place. Either you must do something or
- something must be done to you. Now what sort of business would you like
- to engage in? Would you like to re-engage in copying for some one?"</p>
- <p>"No; I would prefer not to make any change."</p>
- <p>"Would you like a clerkship in a dry-goods store?"</p>
- <p>"There is too much confinement about that. No, I would not like a clerkship;
- but I am not particular."</p>
- <p>"Too much confinement," I cried, "why you keep yourself confined all the
- time!"</p>
- <p>"I would prefer not to take a clerkship," he rejoined, as if to settle
- that little item at once.</p>
- <p>"How would a bar-tender's business suit you? There is no trying of the
- eyesight in that."</p>
- <p>"I would not like it at all; though, as I said before, I am not particular."</p>
- <p>His unwonted wordiness inspirited me. I returned to the charge.</p>
- <p>"Well then, would you like to travel through the country collecting bills
- for the merchants? That would improve your health."</p>
- <p>"No, I would prefer to be doing something else."</p>
- <p>"How then would going as a companion to Europe, to entertain some young
- gentleman with your conversation,--how would that suit you?"</p>
- <p>"Not at all. It does not strike me that there is any thing definite about
- that. I like to be stationary. But I am not particular.</p>
- <p>"Stationary you shall be then," I cried, now losing all patience, and
- for the first time in all my exasperating connection with him fairly flying
- into a passion. "If you do not go away from these premises before night,
- I shall feel bound--indeed I am bound--to-- to--to quit the premises
- myself!" I rather absurdly concluded, knowing not with what possible
- threat to try to frighten his immobility into compliance.
- Despairing of all further efforts, I was precipitately leaving him, when
- a final thought occurred to me--one
- which had not been wholly unindulged before.
- </p>
- <p>"Bartleby," said I, in the kindest tone
- I could assume under such exciting circumstances, "will you
- go home with me now--not to my office, but my dwelling--and remain there
- till we can conclude upon some convenient arrangement for you at our leisure?
- Come, let us start now, right away."</p>
- <p>"No: at present I would prefer not to make any change at all."</p>
- <p>I answered nothing; but effectualy dodging every one by the suddenness
- and rapidity of my flight, rushed from the building, ran
- up Wall-street towards Broadway, and jumping into the first omnibus was
- soon removed from pursuit. As soon as tranquility returned I distinctly
- perceived that I had now done all that I possibly could, both in respect
- to the demands of the landlord and his tenants, and with regard to my own
- desire and sense of duty, to benefit Bartleby, and shield him from rude
- persecution. I now strove to be entirely care-free and quiescent; and my
- conscience justified me in the attempt; though indeed it was not so successful
- as I could have wished. So fearful was I of being again hunted out by the
- incensed landlord and his exasperated tenants, that, surrendering my business
- to Nippers, for a few days I drove about the upper part of the town and
- through the suburbs, in my rockaway; crossed over to Jersey City and Hoboken,
- and paid fugitive visits to Manhattanville and Astoria. In fact I almost
- lived in my rockaway for the time.</p>
- <p>When again I entered my office, lo, a note from the landlord lay upon
- desk. opened it with trembling hands. informed me that writer had sent
- to police, and Bartleby removed the
- Tombs as a vagrant. Moreover, since I knew more
- about him than any one else, he wished me to appear at that place, and
- make a suitable statement of the facts. These tidings had a conflicting
- effect upon me. At first I was indignant; but at last almost approved.
- The landlord's energetic, summary disposition, had led him to adopt a procedure
- which I do not think I would have decided upon myself; and yet as a last
- resort, under such peculiar circumstances, it seemed the only plan.</p>
- <p>As I afterwards learned, the poor scrivener, when told that he must be
- conducted to the Tombs, offered not the slightest obstacle, but in his
- pale unmoving way, silently
- acquiesced.
- </p>
- <p>Some of the compassionate and curious bystanders joined the party; and
- headed by one of the constables arm in arm with Bartleby, the
- silent procession filed its way through all the noise, and
- heat, and joy of the roaring thoroughfares at noon.</p>
- <p>The same day I received the note I went to the Tombs, or to speak more
- properly, the Halls of Justice. Seeking the right officer, I stated the
- purpose of my call, and was informed that the individual I described was
- indeed within. I then assured the functionary that Bartleby was a perfectly
- honest man, and greatly to be compassionated, however unaccountably eccentric.
- I narrated all I knew,and closed by suggesting the idea of letting
- him remain in as indulgent confinement as possible till something less
- harsh might be done--though indeed I hardly knew what. At all events, if
- nothing else could be decided upon, the alms-house must receive him. I
- then begged to have an interview.</p>
- <p>Being under no disgraceful charge, and quite serene and harmless in all
- his ways, they had permitted him freely to wander about the prison, and
- especially in the inclosed grass-platted yards thereof. And so I found
- him there, standing all alone in the quietest of the yards, his face
- towards a high wall, while all around, from the narrow slits of the
- jail windows, I thought I
- saw peering out upon him the eyes of murderers and thieves.
- </p>
- <p>"Bartleby!"</p>
- <p>"I
- know you," he said, without looking round,--"and I want
- nothing to say to you."</p>
- <p>"It was not I that brought you here, Bartleby," said I, keenly
- pained at his implied suspicion. "And to you, this should
- not be so vile a place. Nothing reproachful attaches to you by being here.
- And see, it
- is not so sad a place as one might think. Look, there is
- the sky, and here is the grass."</p>
- <p>"I know where I am," he replied, but would say nothing more, and so I
- left him.</p>
- <p>As I entered the corridor again, a broad meat-like
- man in an apron, accosted me, and jerking his thumb over
- his shoulder said--"Is that your
- friend?"</p>
- <p>"Yes."</p>
- <p>"Does he want to starve? If he does, let him live on the prison fare,
- that's all.</p>
- <p>"Who are you?" asked I, not knowing what to make of such an unofficially
- speaking person in such a place.</p>
- <p>"I am the grub-man. Such gentlemen as have friends here, hire me to provide
- them with something good to eat."</p>
- <p>"Is this so?" said I, turning to the turnkey.</p>
- <p>He said it was.</p>
- <p>"Well then," said I, slipping some silver into the grub-man's hands (for
- so they called him). "I want you to give particular attention to my friend
- there; let him have the best dinner you can get. And you must be as polite
- to him as possible."</p>
- <p>"Introduce me, will you?" said the grub-man, looking at me with an expression
- which seemed to say he was all impatience for an opportunity to give a
- specimen of his breeding.</p>
- <p>Thinking it would prove of benefit to the scrivener, I acquiesced; and
- asking the grub-man his name, went up with him to Bartleby.</p>
- <p>"Bartleby, this is a
- friend; you will find him very useful to you."</p>
- <p>"Your
- sarvant, sir, your sarvant," said the grub-man, making a
- low salutation behind his apron. "Hope you find it pleasant
- here, sir;--spacious grounds--cool apartments, sir--hope
- you'll stay with us some time--try to make it agreeable. What will you
- have for dinner today?"</p>
- <p>"I prefer not to dine to-day," said Bartleby, turning away. "It would
- disagree with me; I am unused to dinners." So saying he slowly moved to
- the other side of the inclosure, and took up a
- position fronting the dead-wall.</p>
- <p>"How's this?" said the grub-man, addressing me with a stare of astonishment.
- "He's odd, aint he?"</p>
- <p>"I think he is a little deranged," said I, sadly.</p>
- <p>"Deranged? deranged is it? Well now, upon my word, I thought that friend
- of yourn was a gentleman
- forger; they are always pale and genteel-like, them forgers.
- I can't help pity 'em--can't help it, sir. Did you know Monroe Edwards?"
- he added touchingly, and paused. Then, laying his hand pityingly on my
- shoulder, sighed, "he died of consumption at Sing-Sing. so you weren't
- acquainted with Monroe?"</p>
- <p>"No, I was never socially acquainted with any forgers. But I cannot stop
- longer. Look to my friend yonder. You will not lose by it. I will see you
- again."</p>
- <p>Some few days after this, I again obtained admission to the Tombs, and
- went through the corridors in quest of Bartleby; but without finding him.</p>
- <p>"I saw him coming from his cell not long ago," said a turnkey, "may be
- he's gone to loiter in the yards."</p>
- <p>So I went in that direction.</p>
- <p>"Are you looking for the silent man?" said another turnkey passing me.
- "Yonder he lies--sleeping in the yard there. 'Tis not twenty minutes since
- I saw him lie down."</p>
- <p>The yard was entirely quiet. It was not accessible to the common prisoners.
- The surrounding walls, of amazing thickness, kept
- off all sound behind them. The Egyptian
- character of the masonry weighed upon me with its gloom.
- But a soft imprisoned
- turf grew under foot. The heart of the eternal pyramids,
- it seemed, wherein, by some strange magic, through the clefts, grass-seed,
- dropped by birds, had sprung.</p>
- <p>Strangely huddled at the base of the wall, his
- knees drawn up, and lying on his side, his head touching
- the cold stones, I saw the wasted Bartleby. But nothing stirred. I paused;
- then went close up to him; stooped over, and saw that his dim eyes were
- open; otherwise he seemed profoundly sleeping. Something prompted me
- to touch him. I felt his hand, when a tingling shiver ran up my arm
- and down my spine to my feet.</p>
- <p>The round face of the grub-man peered upon me now. "His dinner is ready.
- Won't he dine to-day, either? Or does he live without dining?"</p>
- <p>"Lives without dining," said I, and closed the eyes.</p>
- <p>"Eh!--He's asleep, aint he?"</p>
- <p>"With
- kings and counsellors," murmured I.</p>
- <p>* * * * * * * *</p>
- <p>There would seem little need for proceeding further in this history. Imagination
- will readily supply the meagre recital of poor Bartleby's interment. But
- ere parting with the reader, let me say, that if this little narrative
- has sufficiently interested him, to awaken curiosity as to who Bartleby
- was, and what manner of life he led prior to the present narrator's making
- his acquaintance, I can only reply, that in such curiosity I fully share,
- but am wholly unable to gratify it. Yet here I hardly know whether I should
- divulge one
- little item of rumor, which came to my ear a few months
- after the scrivener's decease. Upon what basis it rested, I could never
- ascertain; and hence how true it is I cannot now tell. But inasmuch as
- this vague report has not been without a certain strange suggestive
- interest to me, however said, it may prove the same with
- some others; and so I will briefly mention it. The report was this: that
- Bartleby had been a subordinate clerk in the Dead
- Letter Office at <a href="http://raven.cc.ukans.edu/%7Ezeke/bartleby/parker.html" target="_blank">Washington</a>, from which he had been suddenly removed
- by a change in the administration. When I think over this rumor, I cannot
- adequately express the emotions which seize me. Dead
- letters! does it not sound like dead men? Conceive a man
- by nature and misfortune prone to a pallid hopelessness, can any business
- seem more fitted to heighten it than that of continually handling these
- dead letters and assorting them for the flames? For by the cart-load they
- are annually burned. Sometimes from out the folded paper
- the pale clerk takes a ring:--the bank-note sent in swiftest charity:--he
- whom it would relieve, nor eats nor hungers any more; pardon for those
- who died despairing; hope for those who died unhoping; good tidings for
- those who died stifled by unrelieved calamities. On
- errands of life, these letters speed to death.
- </p>
- <p> Ah
- Bartleby! Ah humanity!</p>
- </td>
- </tr></tbody></table></div> \ No newline at end of file
+ <h5>Click on text in red for hypertext notes and questions</h5> I am a rather elderly man. The nature of my avocations for the last thirty years has brought me into more than ordinary contact with what would seem an interesting and somewhat singular set of men of whom as yet nothing that I know of has ever been written:-- I mean the law-copyists or scriveners. I have known very many of them, professionally and privately, and if I pleased, could relate divers histories, at which good-natured gentlemen might smile, and sentimental souls might weep. But I waive the biographies of all other scriveners for a few passages in the life of Bartleby, who was a scrivener the strangest I ever saw or heard of. While of other law-copyists I might write the complete life, of Bartleby nothing of that sort can be done. I believe that no materials exist for a full and satisfactory biography of this man. It is an irreparable loss to literature. Bartleby was one of those beings of whom nothing is ascertainable, except from the original sources, and in his case those are very small. What my own astonished eyes saw of Bartleby, that is all I know of him, except, indeed, one vague report which will appear in the sequel.
+ <p>Ere introducing the scrivener, as he first appeared to me, it is fit I make some mention of myself, my employees, my business, my chambers, and general surroundings; because some such description is indispensable to an adequate understanding of the chief character about to be presented. </p>
+ <p> <i>Imprimis</i>: I am a man who, from his youth upwards, has been filled with a profound conviction that the easiest way of life is the best.. Hence, though I belong to a profession proverbially energetic and nervous, even to turbulence, at times, yet nothing of that sort have I ever suffered to invade my peace. I am one of those unambitious lawyers who never addresses a jury, or in any way draws down public applause; but in the cool tranquillity of a snug retreat, do a snug business among rich men's bonds and mortgages and title-deeds. The late John Jacob Astor, a personage little given to poetic enthusiasm, had no hesitation in pronouncing my first grand point to be prudence; my next, method. I do not speak it in vanity, but simply record the fact, that I was not unemployed in my profession by the last John Jacob Astor; a name which, I admit, I love to repeat, for it hath a rounded and orbicular sound to it, and rings like unto bullion. I will freely add, that I was not insensible to the late John Jacob Astor's good opinion.</p>
+ <p>Some time prior to the period at which this little history begins, my avocations had been largely increased. The good old office, now extinct in the State of New York, of a Master in Chancery, had been conferred upon me. It was not a very arduous office, but very pleasantly remunerative. I seldom lose my temper; much more seldom indulge in dangerous indignation at wrongs and outrages; but I must be permitted to be rash here and declare, that I consider the sudden and violent abrogation of the office of Master of Chancery, by the new Constitution, as a----premature act; inasmuch as I had counted upon a life-lease of the profits, whereas I only received those of a few short years. But this is by the way.</p>
+ <p>My chambers were up stairs at No.--Wall-street. At one end they looked upon the white wall of the interior of a spacious sky-light shaft, penetrating the building from top to bottom. This view might have been considered rather tame than otherwise, deficient in what landscape painters call "life." But if so, the view from the other end of my chambers offered, at least, a contrast, if nothing more. In that direction my windows commanded an unobstructed view of a lofty brick wall,black by age and everlasting shade; which wall required no spy-glass to bring out its lurking beauties, but for the benefit of all near-sighted spectators, was pushed up to within ten feet of my window panes. Owing to the great height of the surrounding buildings, and my chambers being on the second floor, the interval between this wall and mine not a little resembled a huge square cistern.</p>
+ <p>At the period just preceding the advent of Bartleby, I had two persons as copyists in my employment, and a promising lad as an office-boy. First, Turkey; second, Nippers; third, Ginger Nut.These may seem names, the like of which are not usually found in the Directory. In truth they were nicknames, mutually conferred upon each other by my three clerks, and were deemed expressive of their respective persons or characters. Turkey was a short, pursy Englishman of about my own age, that is, somewhere not far from sixty. In the morning, one might say, his face was of a fine florid hue, but after twelve o'clock, meridian-- his dinner hour-- it blazed like a grate full of Christmas coals; and continued blazing--but, as it were, with a gradual wane--till 6 o'clock, P.M. or thereabouts, after which I saw no more of the proprietor of the face, which gaining its meridian with the sun, seemed to set with it, to rise, culminate, and decline the following day, with the like regularity and undiminished glory. There are many singular coincidences I have known in the course of my life, not the least among which was the fact that exactly when Turkey displayed his fullest beams from his red and radiant countenance, just then, too, at the critical moment, began the daily period when I considered his business capacities as seriously disturbed for the remainder of the twenty-four hours. Not that he was absolutely idle, or averse to business then; far from it. The difficulty was, he was apt to be altogether too energetic. There was a strange, inflamed, flurried, flighty recklessness of activity about him. He would be incautious in dipping his pen into his inkstand. All his blots upon my documents, were dropped there after twelve o'clock, meridian. Indeed, not only would he be reckless and sadly given to making blots in the afternoon, but some days he went further, and was rather noisy. At such times, too, his face flamed with augmented blazonry, as if cannel coal had been heaped on anthracite. He made an unpleasant racket with his chair; spilled his sand-box; in mending his pens, impatiently split them all to pieces, and threw them on the floor in a sudden passion; stood up and leaned over his table, boxing his papers about in a most indecorous manner, very sad to behold in an elderly manlike him. Nevertheless, as he was in many ways a most valuable person to me, and all the time before twelve o'clock, meridian, was the quickest, steadiest creature too, accomplishing a great deal of work in a style not easy to be matched--for these reasons, I was willingto overlook his eccentricities, though indeed, occasionally, I remonstrated with him. I did this very gently, however, because, though the civilest, nay, the blandest and most reverential of men in the morning, yet in the afternoon he was disposed, upon provocation, to be slightly rash with his tongue, in fact, insolent. Now, valuing his morning services as I did, and resolved not to lose them; yet, at the same time made uncomfortable by his inflamed ways after twelve o'clock; and being a man of peace, unwilling by my admonitions to call forth unseemingly retorts from him; I took upon me, one Saturday noon (he was always worse on Saturdays), to hint to him, very kindly, that perhaps now that he was growing old, it might be well to abridge his labors; in short, he need not come to my chambers after twelve o'clock, but, dinner over, had best go home to his lodgings and rest himself till tea-time. But no; he insisted upon his afternoon devotions. His countenance became intolerably fervid, as he oratorically assured me--gesticulating with a long ruler at the other end of the room--that if his services in the morning were useful, how indispensible, then, in the afternoon?</p>
+ <p>"With submission, sir," said Turkey on this occasion, "I consider myself your right-hand man. In the morning I but marshal and deploy my columns; but in the afternoon I put myself at their head, and gallantly charge the foe, thus!"--and he made a violent thrust with the ruler.</p>
+ <p>"But the blots, Turkey," intimated I.</p>
+ <p>"True,--but, with submission, sir, behold these hairs! I am getting old. Surely, sir, a blot or two of a warm afternoon is not the page--is honorable. With submission, sir, we both are getting old."</p>
+ <p>This appeal to my fellow-feeling was hardly to be resisted. At all events, I saw that go he would not. So I made up my mind to let him stay, resolving, nevertheless, to see to it, that during the afternoon he had to do with my less important papers.</p>
+ <p>Nippers, the second on my list, was a whiskered, sallow, and, upon the whole, rather piratical-looking young man of about five and twenty. I always deemed him the victim of two evil powers-- ambition and indigestion. The ambition was evinced by a certain impatience of the duties of a mere copyist, an unwarrantable usurpation of strictly profession affairs, such as the original drawing up of legal documents. The indigestion seemed betokened in an occasional nervous testiness and grinning irritability, causing the teeth to audibly grind together over mistakes committed in copying; unnecessary maledictions, hissed, rather than spoken, in the heat of business; and especially by a continual discontent with the height of the table where he worked. Though of a very ingenious mechanical turn, Nippers could never get this table to suit him. He put chips under it, blocks of various sorts, bits of pasteboard, and at last went so far as to attempt an exquisite adjustment by final pieces of folded blotting-paper. But no invention would answer. If, for the sake of easing his back, he brought the table lid at a sharp angle well up towards his chin, and wrote there like a man using the steep roof of a Dutch house for his desk:--then he declared that it stopped the circulation in his arms. If now he lowered the table to his waistbands, and stooped over it in writing, then there was a sore aching in his back. In short, the truth of the matter was, Nippers knew not what he wanted. Or, if he wanted anything, it was to be rid of a scrivener's table altogether. Among the manifestations of his diseased ambition was a fondness he had for receiving visits from certain ambiguous-looking fellows in seedy coats, whom he called his clients. Indeed I was aware that not only was he, at times, considerable of a ward-politician, but he occasionally did a little businessat the Justices' courts, and was not unknown on the steps of the Tombs. I have good reason to believe, however, that one individual who called upon him at my chambers, and who, with a grand air, he insisted was his client, was no other than a dun, and the alleged title-deed, a bill. But with all his failings, and the annoyances he caused me, Nippers, like his compatriot Turkey, was a very useful man to me; wrote a neat, swift hand; and, when he chose, was not deficient in a gentlemanly sort of deportment. Added to this, he always dressedin a gentlemanly sort of way; and so, incidentally, reflected credit upon my chambers. Whereas with respect to Turkey, I had much ado to keep him from being a reproach to me. His clothes were apt to look oily and smell of eating-houses. He wore his pantaloons very loose and baggy in summer. His coats were execrable; his hat not to be handled. But while the hat was a thing of indifference to me, inasmuch as his natural civility and deference, as a dependent Englishman, always led him to doff it the moment he entered the room, yet his coat was another matter. Concerning his coats, I reasoned with him; but with no effect. The truth was, I suppose, that a man with so small an income, could not afford to sport such a lustrous face and a lustrous coat at one and the same time. As Nippers once observed, Turkey's money went chiefly for red ink. One winter day I presented Turkey with a highly-respectable looking coat of my own, a padded gray coat, of a most comfortable warmth, and which buttoned straight up from the knee to the neck. I thought Turkey would appreciate the favor, and abate his rashness and obstreperousness of afternoons. But no. I verily believe that buttoning himself up in so downy and blanket-like a coat had a pernicious effect upon him; upon the same principle that too much oats are bad for horses. In fact, precisely as a rash, restive horse is said to feel his oats, so Turkey felt his coat. It made him insolent. He was a man whom prosperity harmed.</p>
+ <p>Though concerning the self-indulgent habits of Turkey I had my own private surmises, yet touching Nippers I was well persuaded that whatever might be his faults in other respects, he was, at least, a temperate young man. But indeed, nature herself seemed to have been his vintner, and at his birth charged him so thoroughly with an irritable, brandy-like disposition, that all subsequent potations were needless. When I consider how, amid the stillness of my chambers, Nippers would sometimes impatiently rise from his seat, and stooping over his table, spread his arms wide apart, seize the whole desk, and move it, and jerk it, with a grim, grinding motion on the floor, as if the table were a perverse voluntary agent, intent on thwarting and vexing him; I plainly perceive that for Nippers, brandy and water were altogether superfluous.</p>
+ <p>It was fortunate for me that, owing to its course--indigestion--the irritability and consequent nervousness of Nippers, were mainly observable in the morning, while in the afternoon he was comparatively mild. So that Turkey's paroxysms only coming on about twelve o'clock, I never had to do with their eccentricities at one time. Their fits relieved each other like guards. When Nippers' was on, Turkey's was off, and vice versa. This was a good natural arrangement under the circumstances.</p>
+ <p>Ginger Nut, the third on my list, was a lad some twelve years old. His father was a carman, ambitious of seeing his son on the bench instead of a cart, before he died. So he sent him to my office as a student at law, errand boy, and cleaner and sweeper, at the rate of one dollar a week. He had a little desk to himself, but he did not use it much. Upon inspection, the drawer exhibited a great array of the shells of various sorts of nuts. Indeed, to this quick-witted youth the whole noble science of the law was contained in a nut-shell. Not the least among the employments of Ginger Nut, as well as one which he discharged with the most alacrity, was his duty as cake and apple purveyor for Turkey and Nippers. Copying law papers being proverbially a dry, husky sort of business, my two scriveners were fain to moisten their mouths very often with Spitzenbergs to be had at the numerous stalls nigh the Custom House and Post Office. Also, they sent Ginger Nut very frequently for that peculiar cake--small, flat, round, and very spicy--after which he had been named by them. Of a cold morning when business was but dull, Turkey would gobble up scores of these cakes, as if they were mere wafers--indeed they sell them at the rate of six or eight for a penny--the scrape of his pen blending with the crunching of the crisp particles in his mouth. Of all the fiery afternoon blunders and flurried rashnesses of Turkey, was his once moistening a ginger-cake between his lips, and clapping it on to a mortgage for a seal. I came within an ace of dismissing him then. But he mollified me by making an oriental bow, and saying--"With submission, sir, it was generous of me to find you in stationery on my own account."</p>
+ <p>Now my original business--that of a conveyancer and title hunter, and drawer-up of recondite documents of all sorts--was considerably increased by receiving the master's office. There was now great work for scriveners. Not only must I push the clerks already with me, but I must have additional help. In answer to my advertisement, a motionless young man one morning, stood upon my office threshold, the door being open, for it was summer. I can see that figure now--pallidly neat, pitiably respectable, incurably forlorn! It was Bartleby.</p>
+ <p>After a few words touching his qualifications, I engaged him, glad to have among my corps of copyists a man of so singularly sedate an aspect, which I thought might operate beneficially upon the flighty temper of Turkey, and the fiery one of Nippers.</p>
+ <p>I should have stated before that ground glass folding-doors divided my premises into two parts, one of which was occupied by my scriveners, the other by myself. According to my humor I threw open these doors, or closed them. I resolved to assign Bartleby a corner by the folding-doors, but on my side of them, so as to have this quiet man within easy call, in case any trifling thing was to be done. I placed his desk close up to a small side window in that part of the room, a window which originally had afforded a lateral view of certain grimy back-yards and bricks, but which, owing to subsequent erections, commanded at present no view at all, though it gave some light. Within three feet of the panes was a wall, and the light came down from far above, between two lofty buildings, as from a very small opening in a dome. Still further to a satisfactory arrangement, I procured a high green folding screen, which might entirely isolate Bartleby from my sight, though not remove him from my voice. And thus, in a manner, privacy and society were conjoined. </p>
+ <p>At first Bartleby did an extraordinary quantity of writing. As if long famishingfor something to copy, he seemed to gorge himself on my documents. There was no pause for digestion. He ran a day and night line, copying by sun-light and by candle-light. I should have been quite delighted with his application, had be been cheerfully industrious. But he wrote on silently, palely, mechanically. </p>
+ <p>It is, of course, an indispensable part of a scrivener's business to verify the accuracy of his copy, word by word. Where there are two or more scriveners in an office, they assist each other in this examination, one reading from the copy, the other holding the original. It is a very dull, wearisome, and lethargic affair. I can readily imagine that to some sanguine temperaments it would be altogether intolerable. For example, I cannot credit that the mettlesome poet Byron would have contentedly sat down with Bartleby to examine a law document of, say five hundred pages, closely written in a crimpy hand.</p>
+ <p>Now and then, in the haste of business, it had been my habit to assist in comparing some brief document myself, calling Turkey or Nippers for this purpose. One object I had in placing Bartleby so handy to me behind the screen, was to avail myself of his services on such trivial occasions. It was on the third day, I think, of his being with me, and before any necessity had arisen for having his own writing examined, that, being much hurried to complete a small affair I had in hand, I abruptly called to Bartleby. In my haste and natural expectancy of instant compliance, I sat with my head bent over the original on my desk, and my right hand sideways, and somewhat nervously extended with the copy, so that immediately upon emerging from his retreat, Bartleby might snatch it and proceed to business without the least delay.</p>
+ <p>In this very attitude did I sit when I called to him, rapidly stating what it was I wanted him to do--namely, to examine a small paper with me. Imagine my surprise, nay, my consternation, when without moving from his privacy, Bartleby in a singularly mild, firm voice, replied,"I would prefer not to." </p>
+ <p>I sat awhile in perfect silence, rallying my stunned faculties. Immediately it occurred to me that my ears had deceived me, or Bartleby had entirely misunderstood my meaning. I repeated my request in the clearest tone I could assume. But in quite as clear a one came the previous reply, "I would prefer not to."</p>
+ <p>"Prefer not to," echoed I, rising in high excitement, and crossing the room with a stride, "What do you mean? Are you moon-struck? I want you to help me compare this sheet here--take it," and I thrust it towards him.</p>
+ <p>"I would prefer not to," said he.</p>
+ <p>I looked at him steadfastly. His face was leanly composed; his gray eye dimly calm. Not a wrinkle of agitation rippled him. Had there been the least uneasiness, anger, impatience or impertinence in his manner; in other words, had there been any thing ordinarily human about him, doubtless I should have violently dismissed him from the premises. But as it was, I should have as soon thought of turning my pale plaster-of-paris bust of Cicero out of doors. I stood gazing at him awhile, as he went on with his own writing, and then reseated myself at my desk. This is very strange, thought I. What had one best do? But my business hurried me. I concluded to forget the matter for the present, reserving it for my future leisure. So calling Nippers from the other room, the paper was speedily examined.</p>
+ <p>A few days after this, Bartleby concluded four lengthy documents, being quadruplicates of a week's testimony taken before me in my High Court of Chancery. It became necessary to examine them. It was an important suit, and great accuracy was imperative. Having all things arranged I called Turkey, Nippers and Ginger Nut from the next room, meaning to place the four copies in the hands of my four clerks, while I should read from the original. Accordingly Turkey, Nippers and Ginger Nut had taken their seats in a row, each with his document in hand, when I called to Bartleby to join this interesting group.</p>
+ <p>"Bartleby! quick, I am waiting."</p>
+ <p>I heard a low scrape of his chair legs on the unscraped floor, and soon he appeared standing at the entrance of his hermitage. </p>
+ <p>"What is wanted?" said he mildly.</p>
+ <p>"The copies, the copies," said I hurriedly. "We are going to examine them. There"--and I held towards him the fourth quadruplicate.</p>
+ <p>"I would prefer not to," he said, and gently disappeared behind the screen.</p>
+ <p>For a few moments I was turned into a pillar of salt, standing at the head of my seated column of clerks. Recovering myself, I advanced towards the screen, and demanded the reason for such extraordinary conduct.</p>
+ <p>"<i>Why</i> do you refuse?"</p>
+ <p>"I would prefer not to."</p>
+ <p>With any other man I should have flown outright into a dreadful passion, scorned all further words, and thrust him ignominiously from my presence. But there was something about Bartleby that not only strangely disarmed me, but in a wonderful manner touched and disconcerted me. I began to reason with him.</p>
+ <p>"These are your own copies we are about to examine. It is labor saving to you, because one examination will answer for your four papers. It is common usage. Every copyist is bound to help examine his copy. Is it not so? Will you not speak? Answer!"</p>
+ <p>"I prefer not to," he replied in a flute-like tone. It seemed to me that while I had been addressing him, he carefully revolved every statement that I made; fully comprehended the meaning; could not gainsay the irresistible conclusion; but, at the same time, some paramount consideration prevailed with him to reply as he did.</p>
+ <p>"You are decided, then, not to comply with my request--a request made according to common usage and common sense?"</p>
+ <p>He briefly gave me to understand that on that point my judgment was sound. Yes: his decision was irreversible.</p>
+ <p>It is not seldom the case that when a man is browbeaten in some unprecedented and violently unreasonable way, he begins to stagger in his own plainest faith. He begins, as it were, vaguely to surmise that, wonderful as it may be, all the justice and all the reason is on the other side. Accordingly, if any disinterested persons are present, he turns to them for some reinforcement for his own faltering mind. </p>
+ <p>"Turkey," said I, "what do you think of this? Am I not right?"</p>
+ <p>"With submission, sir," said Turkey, with his blandest tone, "I think that you are."</p>
+ <p>"Nippers," said I, "what do<i> you</i> think of it?"</p>
+ <p>"I think I should kick him out of the office."</p>
+ <p>(The reader of nice perceptions will here perceive that, it being morning, Turkey's answer is couched in polite and tranquil terms, but Nippers replies in ill-tempered ones. Or, to repeat a previous sentence, Nipper's ugly mood was on duty, and Turkey's off.)</p>
+ <p>"Ginger Nut," said I, willing to enlist the smallest suffrage in my behalf, "what do<i> you</i> think of it?"</p>
+ <p>"I think, sir, he's a little<i> luny</i>," replied Ginger Nut, with a grin.</p>
+ <p>"You hear what they say," said I, turning towards the screen, "come forth and do your duty."</p>
+ <p>But he vouchsafed no reply. I pondered a moment in sore perplexity. But once more business hurried me. I determined again to postpone the consideration of this dilemma to my future leisure. With a little trouble we made out to examine the papers without Bartleby, though at every page or two, Turkey deferentially dropped his opinion that this proceeding was quite out of the common; while Nippers, twitching in his chair with a dyspeptic nervousness, ground out between his set teeth occasional hissing maledictions against the stubborn oaf behind the screen. And for his (Nipper's) part, this was the first and the last time he would do another man's business without pay.</p>
+ <p>Meanwhile Bartleby sat in his hermitage, oblivious to every thing but his own peculiar business there.</p>
+ <p>Some days passed, the scrivener being employed upon another lengthy work. His late remarkable conduct led me to regard his way narrowly. I observed that he never went to dinner; indeed that he never went any where. As yet I had never of my personal knowledge known him to be outside of my office. He was a perpetual sentry in the corner. At about eleven o'clock though, in the morning, I noticed that Ginger Nut would advance toward the opening in Bartleby's screen, as if silently beckoned thither by a gesture invisible to me where I sat. That boy would then leave the office jingling a few pence, and reappear with a handful of ginger-nuts which he delivered in the hermitage, receiving two of the cakes for his trouble.</p>
+ <p>He lives, then, on ginger-nuts, thought I; never eats a dinner, properly speaking; he must be a vegetarian then, but no; he never eats even vegetables, he eats nothing but ginger-nuts. My mind then ran on in reveries concerning the probable effects upon the human constitution of living entirely on ginger-nuts. Ginger-nuts are so called because they contain ginger as one of their peculiar constituents, and the final flavoring one. Now what was ginger? A hot, spicy thing. Was Bartleby hot and spicy? Not at all. Ginger, then, had no effect upon Bartleby. Probably he preferred it should have none. </p>
+ <p>Nothing so aggravates an earnest person as a passive resistance. If the individual so resisted be of a not inhumane temper, and the resisting one perfectly harmless in his passivity; then, in the better moods of the former, he will endeavor charitably to construe to his imagination what proves impossible to be solved by his judgment. Even so, for the most part, I regarded Bartleby and his ways. Poor fellow! thought I, he means no mischief; it is plain he intends no insolence; his aspect sufficiently evinces that his eccentricities are involuntary. He is useful to me. I can get along with him. If I turn him away, the chances are he will fall in with some less indulgent employer, and then he will be rudely treated, and perhaps driven forth miserably to starve. Yes. Here I can cheaply purchase a delicious self-approval. To befriend Bartleby; to humor him in his strange willfulness, will cost me little or nothing, while I lay up in my soul what will eventually prove a sweet morsel for my conscience. But this mood was not invariable with me. The passiveness of Bartleby sometimes irritated me. I felt strangely goaded on to encounter him in new opposition, to elicit some angry spark from him answerable to my own. But indeed I might as well have essayed to strike fire with my knuckles against a bit of Windsor soap. But one afternoon the evil impulse in me mastered me, and the following little scene ensued:</p>
+ <p>"Bartleby," said I, "when those papers are all copied, I will compare them with you."</p>
+ <p>"I would prefer not to."</p>
+ <p>"How? Surely you do not mean to persist in that mulish vagary?"</p>
+ <p>No answer.</p>
+ <p>I threw open the folding-doors near by, and turning upon Turkey and Nippers, exclaimed in an excited manner--</p>
+ <p>"He says, a second time, he won't examine his papers. What do you think of it, Turkey?"</p>
+ <p>It was afternoon, be it remembered. Turkey sat glowing like a brass boiler, his bald head steaming, his hands reeling among his blotted papers.</p>
+ <p>"Think of it?" roared Turkey; "I think I'll just step behind his screen, and black his eyes for him!"</p>
+ <p>So saying, Turkey rose to his feet and threw his arms into a pugilistic position. He was hurrying away to make good his promise, when I detained him, alarmed at the effect of incautiously rousing Turkey's combativeness after dinner.</p>
+ <p>"Sit down, Turkey," said I, "and hear what Nippers has to say. What do you think of it, Nippers? Would I not be justified in immediately dismissing Bartleby?"</p>
+ <p>"Excuse me, that is for you to decide, sir. I think his conduct quite unusual, and indeed unjust, as regards Turkey and myself. But it may only be a passing whim."</p>
+ <p>"Ah," exclaimed I, "you have strangely changed your mind then--you speak very gently of him now."</p>
+ <p>"All beer," cried Turkey; "gentleness is effects of beer--Nippers and I dined together to-day. You see how gentle I am, sir. Shall I go and black his eyes?"</p>
+ <p>"You refer to Bartleby, I suppose. No, not to-day, Turkey," I replied; "pray, put up your fists."</p>
+ <p>I closed the doors, and again advanced towards Bartleby. I felt additional incentives tempting me to my fate. I burned to be rebelled against again. I remembered that Bartleby never left the office.</p>
+ <p>"Bartleby," said I, "Ginger Nut is away; just step round to the Post Office, won't you? (it was but a three minutes walk,) and see if there is any thing for me."</p>
+ <p>"I would prefer not to."</p>
+ <p>"You<i> will</i> not?"</p>
+ <p>"I <i>prefer</i> not."</p>
+ <p>I staggered to my desk, and sat there in a deep study. My blind inveteracy returned. Was there any other thing in which I could procure myself to be ignominiously repulsed by this lean, penniless with?--my hired clerk? What added thing is there, perfectly reasonable, that he will be sure to refuse to do?</p>
+ <p>"Bartleby!"</p>
+ <p>No answer.</p>
+ <p>"Bartleby," in a louder tone.</p>
+ <p>No answer.</p>
+ <p>"Bartleby," I roared.</p>
+ <p>Like a very ghost, agreeably to the laws of magical invocation, at the third summons, he appeared at the entrance of his hermitage.</p>
+ <p>"Go to the next room, and tell Nippers to come to me."</p>
+ <p>"I prefer not to," he respectfully and slowly said, and mildly disappeared.</p>
+ <p>"Very good, Bartleby," said I, in a quiet sort of serenely severe self-possessed tone, intimating the unalterable purpose of some terrible retribution very close at hand. At the moment I half intended something of the kind. But upon the whole, as it was drawing towards my dinner-hour, I thought it best to put on my hat and walk home for the day, suffering much from perplexity and distress of mind.</p>
+ <p> Shall I acknowledge it? The conclusion of this whole business was that it soon became a fixed fact of my chambers, that a pale young scrivener, by the name of Bartleby, had a desk there; that he copied for me at the usual rate of four cents a folio (one hundred words); but he was permanently exempt from examining the work done by him, that duty being transferred to Turkey and Nippers, one of compliment doubtless to their superior acuteness; moreover, said Bartleby was never on any account to be dispatched on the most trivial errand of any sort; and that even if entreated to take upon him such a matter, it was generally understood that he would prefer not to--in other words, that he would refuse point-blank. </p>
+ <p>32 As days passed on, I became considerably reconciled to Bartleby. His steadiness, his freedom from all dissipation, his incessant industry (except when he chose to throw himself into a standing revery behind his screen), his great stillness, his unalterableness of demeanor under all circumstances, made him a valuable acquisition. One prime thing was this,--he was always there;--first in the morning, continually through the day, and the last at night. I had a singular confidence in his honesty. I felt my most precious papers perfectly safe in his hands. Sometimes to be sure I could not, for the very soul of me, avoid falling into sudden spasmodic passions with him. For it was exceeding difficult to bear in mind all the time those strange peculiarities, privileges, and unheard of exemptions, forming the tacit stipulations on Bartleby's part under which he remained in my office. Now and then, in the eagerness of dispatching pressing business, I would inadvertently summon Bartleby, in a short, rapid tone, to put his finger, say, on the incipient tie of a bit of red tape with which I was about compressing some papers. Of course, from behind the screen the usual answer, "I prefer not to," was sure to come; and then, how could a human creature with the common infirmities of our nature, refrain from bitterly exclaiming upon such perverseness--such unreasonableness. However, every added repulse of this sort which I received only tended to lessen the probability of my repeating the inadvertence.</p>
+ <p>Here is must be said, that according to the custom of most legal gentlemen occupying chambers in densely-populated law buildings, there were several keys to my door. One was kept by a woman residing in the attic, which person weekly scrubbed and daily swept and dusted my apartments. Another was kept by Turkey for convenience sake. The third I sometimes carried in my own pocket. The fourth I knew not who had.</p>
+ <p>Now, one Sunday morning I happened to go to Trinity Church, to hear a celebrated preacher, and finding myself rather early on the ground, I thought I would walk round to my chambers for a while. Luckily I had my key with me; but upon applying it to the lock, I found it resisted by something inserted from the inside. Quite surprised, I called out; when to my consternation a key was turned from within; and thrusting his lean visage at me, and holding the door ajar, the apparition of Bartleby appeared, in his shirt sleeves, and otherwise in a strangely tattered dishabille, saying quietly that he was sorry, but he was deeply engaged just then, and--preferred not admitting me at present. In a brief word or two, he moreover added, that perhaps I had better walk round the block two or three times, and by that time he would probably have concluded his affairs. Now, the utterly unsurmised appearance of Bartleby, tenanting my law-chambers of a Sunday morning, with his cadaverously gentlemanly nonchalance, yet withal firm and self-possessed, had such a strange effect upon me, that incontinently I slunk away from my own door, and did as desired. But not without sundry twinges of impotent rebellion against the mild effrontery of this unaccountable scrivener. Indeed, it was his wonderful mildness chiefly, which not only disarmed me, but unmanned me, as it were. For I consider that one, for the time, is a sort of unmanned when he tranquilly permits his hired clerk to dictate to him, and order him away from his own premises. Furthermore, I was full of uneasiness as to what Bartleby could possibly be doing in my office in his shirt sleeves, and in an otherwise dismantled condition of a Sunday morning. Was any thing amiss going on? Nay, that was out of the question. It was not to be thought of for a moment that Bartleby was an immoral person. But what could he be doing there?--copying? Nay again, whatever might be his eccentricities, Bartleby was an eminently decorous person. He would be the last man to sit down to his desk in any state approaching to nudity. Besides, it was Sunday; and there was something about Bartleby that forbade the supposition that we would by any secular occupation violate the proprieties of the day.</p>
+ <p>Nevertheless, my mind was not pacified; and full of a restless curiosity, at last I returned to the door. Without hindrance I inserted my key, opened it, and entered. Bartleby was not to be seen. I looked round anxiously, peeped behind his screen; but it was very plain that he was gone. Upon more closely examining the place, I surmised that for an indefinite period Bartleby must have ate, dressed, and slept in my office, and that too without plate, mirror, or bed. The cushioned seat of a rickety old sofa in one corner bore t faint impress of a lean, reclining form. Rolled away under his desk, I found a blanket; under the empty grate, a blacking box and brush; on a chair, a tin basin, with soap and a ragged towel; in a newspaper a few crumbs of ginger-nuts and a morsel of cheese. Yet, thought I, it is evident enough that Bartleby has been making his home here, keeping bachelor's hallall by himself. Immediately then the thought came sweeping across me, What miserable friendlessness and loneliness are here revealed! His poverty is great; but his solitude, how horrible! Think of it. Of a Sunday, Wall-street is deserted as Petra; and every night of every day it is an emptiness. This building too, which of week-days hums with industry and life, at nightfall echoes with sheer vacancy, and all through Sunday is forlorn. And here Bartleby makes his home; sole spectator of a solitude which he has seen all populous--a sort of innocent and transformed Marius brooding among the ruins of Carthage! </p>
+ <p>For the first time in my life a feeling of overpowering stinging melancholy seized me. Before, I had never experienced aught but a not-unpleasing sadness. The bond of a common humanity now drew me irresistibly to gloom. A fraternal melancholy! For both I and Bartleby were sons of Adam. I remembered the bright silks and sparkling faces I had seen that day in gala trim, swan-like sailing down the Mississippi of Broadway; and I contrasted them with the pallid copyist, and thought to myself, Ah, happiness courts the light, so we deem the world is gay; but misery hides aloof, so we deem that misery there is none. These sad fancyings-- chimeras, doubtless, of a sick and silly brain--led on to other and more special thoughts, concerning the eccentricities of Bartleby. Presentiments of strange discoveries hovered round me. The scrivener's pale form appeared to me laid out, among uncaring strangers, in its shivering winding sheet.</p>
+ <p>Suddenly I was attracted by Bartleby's closed desk, the key in open sight left in the lock.</p>
+ <p> I mean no mischief, seek the gratification of no heartless curiosity, thought I; besides, the desk is mine, and its contents too, so I will make bold to look within. Every thing was methodically arranged, the papers smoothly placed. The pigeon holes were deep, and removing the files of documents, I groped into their recesses. Presently I felt something there, and dragged it out. It was an old bandanna handkerchief, heavy and knotted. I opened it, and saw it was a savings' bank.</p>
+ <p>I now recalled all the quiet mysteries which I had noted in the man. I remembered that he never spoke but to answer; that though at intervals he had considerable time to himself, yet I had never seen him reading--no, not even a newspaper; that for long periods he would stand looking out, at his pale window behind the screen, upon the dead brick wall; I was quite sure he never visited any refectory or eating house; while his pale face clearly indicated that he never drank beer like Turkey, or tea and coffee even, like other men; that he never went any where in particular that I could learn; never went out for a walk, unless indeed that was the case at present; that he had declined telling who he was, or whence he came, or whether he had any relatives in the world; that though so thin and pale, he never complained of ill health. And more than all, I remembered a certain unconscious air of pallid--how shall I call it?--of pallid haughtiness, say, or rather an austere reserve about him, which had positively awed me into my tame compliance with his eccentricities, when I had feared to ask him to do the slightest incidental thing for me, even though I might know, from his long-continued motionlessness, that behind his screen he must be standing in one of those dead-wall reveries of his.</p>
+ <p>Revolving all these things, and coupling them with the recently discovered fact that he made my office his constant abiding place and home, and not forgetful of his morbid moodiness; revolving all these things, a prudential feeling began to steal over me. My first emotions had been those of pure melancholy and sincerest pity; but just in proportion as the forlornness of Bartleby grew and grew to my imagination, did that same melancholy merge into fear, that pity into repulsion. So true it is, and so terrible too, that up to a certain point the thought or sight of misery enlists our best affections; but, in certain special cases, beyond that point it does not. They err who would assert that invariably this is owing to the inherent selfishness of the human heart. It rather proceeds from a certain hopelessness of remedying excessive and organic ill. To a sensitive being, pity is not seldom pain. And when at last it is perceived that such pity cannot lead to effectual succor, common sense bids the soul be rid of it. What I saw that morning persuaded me that the scrivener was the victim of innate and incurable disorder. I might give alms to his body; but his body did not pain him; it was his soul that suffered, and his soul I could not reach. </p>
+ <p>I did not accomplish the purpose of going to Trinity Church that morning. Somehow, the things I had seen disqualified me for the time from church-going. I walked homeward, thinking what I would do with Bartleby. Finally, I resolvedupon this;--I would put certain calm questions to him the next morning, touching his history, &amp;c., and if he declined to answer then openly and reservedly (and I supposed he would prefer not), then to give him a twenty dollar bill over and above whatever I might owe him, and tell him his services were no longer required; but that if in any other way I could assist him, I would be happy to do so, especially if he desired to return to his native place, wherever that might be, I would willingly help to defray the expenses. Moreover, if after reaching home, he found himself at any time in want of aid, a letter from him would be sure of a reply.</p>
+ <p>The next morning came.</p>
+ <p>"Bartleby," said I, gently calling to him behind the screen.</p>
+ <p>No reply.</p>
+ <p>"Bartleby," said I, in a still gentler tone, "come here; I am not going to ask you to do any thing you would prefer not to do--I simply wish to speak to you."</p>
+ <p>Upon this he noiselessly slid into view.</p>
+ <p>"Will you tell me, Bartleby, where you were born?" </p>
+ <p>"I would prefer not to."</p>
+ <p>"Will you tell me <i>anything </i>about yourself?"</p>
+ <p>"I would prefer not to."</p>
+ <p>"But what reasonable objection can you have to speak to me? I feel friendly towards you."</p>
+ <p>He did not look at me while I spoke, but kept his glance fixed upon my bust of Cicero, which as I then sat, was directly behind me, some six inches above my head. "What is your answer, Bartleby?" said I, after waiting a considerable time for a reply, during which his countenance remained immovable, only there was the faintest conceivable tremor of the white attenuated mouth.</p>
+ <p>"At present I prefer to give no answer," he said, and retired into his hermitage.</p>
+ <p>It was rather weak in me I confess, but his manner on this occasion nettled me. Not only did there seem to lurk in it a certain disdain, but his perverseness seemed ungrateful, considering the undeniable good usage and indulgence he had received from me.</p>
+ <p>Again I sat ruminating what I should do.Mortified as I was at his behavior, and resolved as I had been to dismiss him when I entered my office, nevertheless I strangely felt something superstitious knocking at my heart, and forbidding me to carry out my purpose, and denouncing me for a villain if I dared to breathe one bitter word against this forlornest of mankind. At last, familiarly drawing my chair behind his screen, I sat down and said: "Bartleby, never mind then about revealing your history; but let me entreat you, as a friend, to comply as far as may be with the usages of this office. Say now you will help to examine papers tomorrow or next day: in short, say now that in a day or two you will begin to be a little reasonable:--say so, Bartleby."</p>
+ <p>"At present I would prefer not to be a little reasonable was his idly cadaverous reply.,"</p>
+ <p>Just then the folding-doors opened, and Nippers approached. He seemed suffering from an unusually bad night's rest, induced by severer indigestion than common. He overheard those final words of Bartleby.</p>
+ <p><i>"Prefer</i> not, eh?" gritted Nippers--"I'd<i> prefer</i> him, if I were you, sir," addressing me--"I'd <i>prefer</i> him; I'd give him preferences, the stubborn mule! What is it, sir, pray, that he <i>prefers</i> not to do now?"</p>
+ <p>Bartleby moved not a limb.</p>
+ <p>"Mr. Nippers," said I, "I'd prefer that you would withdraw for the present." </p>
+ <p>Somehow, of late I had got into the way of involuntary using this word "prefer" upon all sorts of not exactly suitable occasions. And I trembled to think that my contact with the scrivener had already and seriously affected me in a mental way. And what further and deeper aberration might it not yet produce? This apprehension had not been without efficacy in determining me to summary means.</p>
+ <p>As Nippers, looking very sour and sulky, was departing, Turkey blandly and deferentially approached.</p>
+ <p>"With submission, sir," said he, "yesterday I was thinking about Bartleby here, and I think that if he would but prefer to take a quart of good ale every day, it would do much towards mending him, and enabling him to assist in examining his papers."</p>
+ <p>"So you have got the word too," said I, slightly excited.</p>
+ <p>"With submission, what word, sir," asked Turkey, respectfully crowding himself into the contracted space behind the screen, and by so doing, making me jostle the scrivener. "What word, sir?"</p>
+ <p>"I would prefer to be left alone here," said Bartleby, as if offended at being mobbed in his privacy. </p>
+ <p>"<i>That's</i> the word, Turkey," said I--<i>"that's</i> it."</p>
+ <p>"Oh,<i> prefer</i> oh yes--queer word. I never use it myself. But, sir as I was saying, if he would but prefer--"</p>
+ <p>"Turkey," interrupted I, "you will please withdraw."</p>
+ <p>"Oh, certainly, sir, if you prefer that I should."</p>
+ <p>As he opened the folding-door to retire, Nippers at his desk caught a glimpse of me, and asked whether I would prefer to have a certain paper copied on blue paper or white. He did not in the least roguishly accent the word prefer. It was plain that it involuntarily rolled from his tongue. I thought to myself, surely I must get rid of a demented man, who already has in some degree turned the tongues, if not the heads of myself and clerks. But I thought it prudent not to break the dismission at once.</p>
+ <p>The next day I noticed that Bartleby did nothing but stand at his window in his dead-wall revery. Upon asking him why he did not write, he said that he had decided upon doing no more writing.</p>
+ <p>"Why, how now? what next?" exclaimed I, "do no more writing?"</p>
+ <p>"No more."</p>
+ <p>"And what is the reason?"</p>
+ <p>"Do you not see the reason for yourself," he indifferently replied.</p>
+ <p>I looked steadfastly at him, and perceived that his eyes looked dull and glazed. Instantly it occurred to me, that his unexampled diligence in copying by his dim window for the first few weeks of his stay with me might have temporarily impaired his vision.</p>
+ <p>I was touched. I said something in condolence with him. I hinted that of course he did wisely in abstaining from writing for a while; and urged him to embrace that opportunity of taking wholesome exercise in the open air. This, however, he did not do. A few days after this, my other clerks being absent, and being in a great hurry to dispatch certain letters by the mail, I thought that, having nothing else earthly to do, Bartleby would surely be less inflexible than usual, and carry these letters to the post-office. But he blankly declined. So, much to my inconvenience, I went myself.</p>
+ <p>Still added days went by. Whether Bartleby's eyes improved or not, I could not say. To all appearance, I thought they did. But when I asked him if they did, he vouchsafed no answer. At all events, he would do no copying. At last, in reply to my urgings, he informed me that he had permanently given up copying.</p>
+ <p>"What!" exclaimed I; "suppose your eyes should get entirely well- better than ever before--would you not copy then?"</p>
+ <p>"I have given up copying," he answered, and slid aside. </p>
+ <p>He remained as ever, a fixture in my chamber. Nay--if that were possible--he became still more of a fixture than before. What was to be done? He would do nothing in the office: why should he stay there? In plain fact, he had now become a millstone to me, not only useless as a necklace, but afflictive to bear. Yet I was sorry for him. I speak less than truth when I say that, on his own account, he occasioned me uneasiness. If he would but have named a single relative or friend, I would instantly have written, and urged their taking the poor fellow away to some convenient retreat. But he seemed alone, absolutely alone in the universe. A bit of wreck&lt;/font&gt; in the mid Atlantic. At length, necessities connected with my business tyrannized over all other considerations. Decently as I could, I told Bartleby that in six days' time he must unconditionally leave the office. I warned him to take measures, in the interval, for procuring some other abode. I offered to assist him in this endeavor, if he himself would but take the first step towards a removal. "And when you finally quit me, Bartleby," added I, "I shall see that you go not away entirely unprovided. Six days from this hour, remember."</p>
+ <p>At the expiration of that period, I peeped behind the screen, and lo! Bartleby was there. </p>
+ <p>I buttoned up my coat, balanced myself; advanced slowly towards him, touched his shoulder, and said, "The time has come; you must quit this place; I am sorry for you; here is money; but you must go."</p>
+ <p>"I would prefer not," he replied, with his back still towards me.</p>
+ <p>"You<i> must</i>."</p>
+ <p>He remained silent.</p>
+ <p>Now I had an unbounded confidence in this man's common honesty. He had frequently restored to me six pences and shillings carelessly dropped upon the floor, for I am apt to be very reckless in such shirt-button affairs. The proceeding then which followed will not be deemed extraordinary. "Bartleby," said I, "I owe you twelve dollars on account; here are thirty-two; the odd twenty are yours.--Will you take it? and I handed the bills towards him.</p>
+ <p>But he made no motion.</p>
+ <p>"I will leave them here then," putting them under a weight on the table. Then taking my hat and cane and going to the door I tranquilly turned and added--"After you have removed your things from these offices, Bartleby, you will of course lock the door--since every one is now gone for the day but you--and if you please, slip your key underneath the mat, so that I may have it in the morning. I shall not see you again; so good-bye to you. If hereafter in your new place of abode I can be of any service to you, do not fail to advise me by letter. Good-bye, Bartleby, and fare you well."</p>
+ <p>But he answered not a word; like the last column of some ruined temple, he remained standing mute and solitary in the middle of the otherwise deserted room.</p>
+ <p>As I walked home in a pensive mood, my vanity got the better of my pity. I could not but highly plume myself on my masterly management in getting rid of Bartleby. Masterly I call it, and such it must appear to any dispassionate thinker. The beauty of my procedure seemed to consist in its perfect quietness. There was no vulgar bullying, no bravado of any sort, no choleric hectoring and striding to and fro across the apartment, jerking out vehement commands for Bartleby to bundle himself off with his beggarly traps. Nothing of the kind. Without loudly bidding Bartleby depart--as an inferior genius might have done--I assumed the ground that depart he must; and upon the assumption built all I had to say. The more I thought over my procedure, the more I was charmed with it. Nevertheless, next morning, upon awakening, I had my doubts,--I had somehow slept off the fumes of vanity. One of the coolest and wisest hours a man has, is just after he awakes in the morning. My procedure seemed as sagacious as ever,--but only in theory. How it would prove in practice--there was the rub. It was truly a beautiful thought to have assumed Bartleby's departure; but, after all, that assumption was simply my own, and none of Bartleby's. The great point was, not whether I had assumed that he would quit me, but whether he would prefer so to do. He was more a man of preferences than assumptions.</p>
+ <p>After breakfast, I walked down town, arguing the probabilities pro and con. One moment I thought it would prove a miserable failure, and Bartleby would be found all alive at my office as usual; the next moment it seemed certain that I should see his chair empty. And so I kept veering about. At the corner of Broadway and Canal- street, I saw quite an excited group of people standing in earnest conversation.</p>
+ <p>"I'll take odds he doesn't," said a voice as I passed.</p>
+ <p>"Doesn't go?--done!" said I, "put up your money."</p>
+ <p>I was instinctively putting my hand in my pocket to produce my own, when I remembered that this was an election day. The words I had overheard bore no reference to Bartleby, but to the success or non-success of some candidate for the mayoralty. In my intent frame of mind, I had, as it were, imagined that all Broadway shared in my excitement, and were debating the same question with me. I passed on, very thankful that the uproar of the street screened my momentary absent-mindedness.</p>
+ <p>As I had intended, I was earlier than usual at my office door. I stood listening for a moment. All was still. He must be gone. I tried the knob. The door was locked. Yes, my procedure had worked to a charm; he indeed must be vanished. Yet a certain melancholy mixed with this: I was almost sorry for my brilliant success. I was fumbling under the door mat for the key, which Bartleby was to have left there for me, when accidentally my knee knocked against a panel, producing a summoning sound, and in response a voice came to me from within--"Not yet; I am occupied."</p>
+ <p>It was Bartleby.</p>
+ <p>I was thunderstruck. For an instant I stood like the man who, pipe in mouth, was killed one cloudless afternoon long ago in Virginia, by summer lightning; at his own warm open window he was killed, and remained leaning out there upon the dreamy afternoon, till some one touched him, when he fell. "Not gone!" I murmured at last. But again obeying that wondrous ascendancy which the inscrutable scrivener had over me, and from which ascendancy, for all my chafing, I could not completely escape, I slowly went down stairs and out into the street, and while walking round the block, considered what I should next do in this unheard-of-perplexity. Turn the man out by an actual thrusting I could not; to drive him away by calling him hard names would not do; calling in the police was an unpleasant idea; and yet, permit him to enjoy his cadaverous triumph over me,--this too I could not think of. What was to be done? or, if nothing could be done, was there any thing further that I could assume in the matter? Yes, as before I had prospectively assumed that Bartleby would depart, so now I might retrospectively assume that departed he was. In the legitimate carrying out of this assumption, I might enter my office in a great hurry, and pretending not to see Bartleby at all, walk straight against him as if he were air. Such a proceeding would in a singular degree have the appearance of a home-thrust. It was hardly possible that Bartleby could withstand such an application of the doctrine of assumptions. But upon second thoughts the success of the plan seemed rather dubious. I resolved to argue the matter over with him again.</p>
+ <p>Bartleby," said I, entering the office, with a quietly severe expression. "I am seriously displeased. I am pained, Bartleby. I had thought better of you. I had imagined you of such a gentlemanly organization, that in any delicate dilemma a slight hint would suffice--in short, an assumption. But it appears I am deceived. Why," I added, unaffectedly starting, "you have not even touched the money yet," pointing to it, just where I had left it the evening previous.</p>
+ <p>He answered nothing.</p>
+ <p>"Will you, or will you not, quit me?" I now demanded in a sudden passion, advancing close to him.</p>
+ <p>"I would prefer <i>not</i> to quit you," he replied, gently emphasizing the<i> not</i>.</p>
+ <p>"What earthly right have you to stay here? do you pay any rent? Do you pay my taxes? Or is this property yours?"</p>
+ <p>He answered nothing.</p>
+ <p>"Are you ready to go on and write now? Are your eyes recovered? Could you copy a small paper for me this morning? or help examine a few lines? or step round to the post-office? In a word, will you do any thing at all, to give a coloring to your refusal to depart the premises?"</p>
+ <p>He silently retired into his hermitage.</p>
+ <p>I was now in such a state of nervous resentment that I thought it but prudentto check myself at present from further demonstrations. Bartleby and I were alone. I remembered the tragedy of the unfortunate Adams and the still more unfortunate Colt in the solitary office of the latter; and how poor Colt, being dreadfully incensed by Adams, and imprudently permitting himself to get wildly excited, was at unawares hurried into his fatal act--an act which certainly no man could possibly deplore more than the actor himself. Often it had occurred to me in my ponderings upon the subject, that had that altercation taken place in the public street, or at a private residence, it would not have terminated as it did. It was the circumstance of being alone in a solitary office, up stairs, of a building entirely unhallowed by humanizing domestic associations--an uncarpeted office, doubtless of a dusty, haggard sort of appearance;--this it must have been, which greatly helped to enhance the irritable desperation of the hapless Colt.</p>
+ <p>But when this old Adam of resentment rose in me and tempted me concerning Bartleby, I grappled him and threw him. How? Why, simply by recalling the divine injunction: "A new commandment give I unto you, that ye love one another." Yes, this it was that saved me. Aside from higher considerations, charity often operates as a vastly wise and prudent principle--a great safeguard to its possessor. Men have committed murder for jealousy's sake, and anger's sake, and hatred's sake, and selfishness' sake, and spiritual pride's sake; but no man that ever I heard of, ever committed a diabolical murder for sweet charity's sake. Mere self-interest, then, if no better motive can be enlisted, should, especially with high-tempered men, prompt all beings to charity and philanthropy. At any rate, upon the occasion in question, I strove to drown my exasperated feelings towards the scrivener by benevolently construing his conduct. Poor fellow, poor fellow! thought I, he don't mean any thing; and besides, he has seen hard times, and ought to be indulged.</p>
+ <p>I endeavored also immediately to occupy myself, and at the same time to comfort my despondency.I tried to fancy that in the course of the morning, at such time as might prove agreeable to him, Bartleby, of his own free accord, would emerge from his hermitage, and take up some decided line of march in the direction of the door. But no. Half-past twelve o'clock came; Turkey began to glow in the face, overturn his inkstand, and become generally obstreperous; Nippers abated down into quietude and courtesy; Ginger Nut munched his noon apple; and Bartleby remained standing at his window in one of his profoundest deadwall reveries. Will it be credited? Ought I to acknowledge it? That afternoon I left the office without saying one further word to him.</p>
+ <p>Some days now passed, during which, at leisure intervals I looked a little into Edwards on the Will," and "Priestly on Necessity." Under the circumstances, those books induced a salutary feeling. Gradually I slid into the persuasion that these troubles of mine touching the scrivener, had been all predestinated from eternity, and Bartleby was billeted upon me for some mysterious purpose of an all-wise Providence, which it was not for a mere mortal like me to fathom. Yes, Bartleby, stay there behind your screen, thought I; I shall persecute you no more; you are harmless and noiseless as any of these old chairs; in short, I never feel so private as when I know you are here. At least I see it, I feel it; I penetrate to the predestinated purpose of my life. I am content. Others may have loftier parts to enact; but my mission in this world, Bartleby, is to furnish you with office-room for such period as you may see fit to remain.</p>
+ <p>I believe that this wise and blessed frame of mind would have continued with me, had it not been for the unsolicited and uncharitable remarks obtruded upon me by my professional friends who visited the rooms. But thus it often is, that the constant friction of illiberal minds wears out at last the best resolves of the more generous. Though to be sure, when I reflected upon it, it was not strange that people entering my office should be struck by the peculiar aspect of the unaccountable Bartleby, and so be tempted to throw out some sinister observations concerning him. Sometimes an attorney having business with me, and calling at my office, and finding no one but the scrivener there, would undertake to obtain some sort of precise information from him touching my whereabouts; but without heeding his idle talk, Bartleby would remain standing immovable in the middle of the room. So after contemplating him in that position for a time, the attorney would depart, no wiser than he came.</p>
+ <p>Also, when a Reference was going on, and the room full of lawyers and witnesses and business was driving fast; some deeply occupied legal gentleman present, seeing Bartleby wholly unemployed, would request him to run round to his (the legal gentleman's) office and fetch some papers for him. Thereupon, Bartleby would tranquilly decline, and remain idle as before. Then the lawyer would give a great stare, and turn to me. And what could I say? At last I was made aware that all through the circle of my professional acquaintance, a whisper of wonder was running round, having reference to the strange creature I kept at my office. This worried me very much. And as the idea came upon me of his possibly turning out a long-lived man, and keep occupying my chambers, and denying my authority; and perplexing my visitors; and scandalizing my professional reputation; and casting a general gloom over the premises; keeping soul and body together to the last upon his savings (for doubtless he spent but half a dime a day), and in the end perhaps outlive me, and claim possession of my office by right of his perpetual occupancy: as all these dark anticipations crowded upon me more and more, and my friends continually intruded their relentless remarks upon the apparition in my room; a great change was wrought in me. I resolved to gather all my faculties together, and for ever rid me of this intolerable incubus.</p>
+ <p>Ere revolving any complicated project, however, adapted to this end, I first simply suggested to Bartleby the propriety of his permanent departure. In a calm and serious tone, I commended the idea to his careful and mature consideration. But having taken three days to meditate upon it, he apprised me that his original determination remained the same; in short, that he still preferred to abide with me.</p>
+ <p>What shall I do? I now said to myself, buttoning up my coat to the last button. What shall I do? what ought I to do? what does conscience say I should do with this man, or rather ghost. Rid myself of him, I must; go, he shall. But how? You will not thrust him, the poor, pale, passive mortal,--you will not thrust such a helpless creature out of your door? you will not dishonor yourself by such cruelty? No, I will not, I cannot do that. Rather would I let him live and die here, and then mason up his remains in the wall. What then will you do? For all your coaxing, he will not budge. Bribes he leaves under your own paperweight on your table; in short, it is quite plain that he prefers to cling to you.</p>
+ <p>Then something severe, something unusual must be done. What! surely you will not have him collared by a constable, and commit his innocent pallor to the common jail? And upon what ground could you procure such a thing to be done?--a vagrant, is he? What! he a vagrant, a wanderer, who refuses to budge? It is because he will not be a vagrant, then, that you seek to count him as a vagrant. That is too absurd. No visible means of support: there I have him. Wrong again: for indubitably he does support himself, and that is the only unanswerable proof that any man can show of his possessing the means so to do. No more then. Since he will not quit me, I must quit him. I will change my offices; I will move elsewhere; and give him fair notice, that if I find him on my new premises I will then proceed against him as a common trespasser.</p>
+ <p>Acting accordingly, next day I thus addressed him: "I find these chambers too far from the City Hall; the air is unwholesome. In a word, I propose to remove my offices next week, and shall no longer require your services. I tell you this now, in order that you may seek another place."</p>
+ <p>He made no reply, and nothing more was said.</p>
+ <p>On the appointed day I engaged carts and men, proceeded to my chambers, and having but little furniture, every thing was removed in a few hours. Throughout, the scrivener remained standing behind the screen, which I directed to be removed the last thing. It was withdrawn; and being folded up like a huge folio, left him the motionless occupant of a naked room. I stood in the entry watching him a moment, while something from within me upbraided me.</p>
+ <p>I re-entered, with my hand in my pocket--and--and my heart in my mouth. </p>
+ <p>"Good-bye, Bartleby; I am going--good-bye, and God some way bless you; and take that," slipping something in his hand. But it dropped to the floor, and then,--strange to say--I tore myself from him whom I had so longed to be rid of.</p>
+ <p>Established in my new quarters, for a day or two I kept the door locked, and started at every footfall in the passages. When I returned to my rooms after any little absence, I would pause at the threshold for an instant, and attentively listen, ere applying my key. But these fears were needless. Bartleby never came nigh me.</p>
+ <p>I thought all was going well, when a perturbed looking stranger visited me, inquiring whether I was the person who had recently occupied rooms at No.--Wall-street.</p>
+ <p>Full of forebodings, I replied that I was.</p>
+ <p>"Then, sir," said the stranger, who proved a lawyer, "you are responsible for the man you left there. He refuses to do any copying; he refuses to do any thing; he says he prefers not to; and he refuses to quit the premises."</p>
+ <p>"I am very sorry, sir," said I, with assumed tranquillity, but an inward tremor, "but, really, the man you allude to is nothing to me --he is no relation or apprentice of mine, that you should hold me responsible for him."</p>
+ <p>"In mercy's name, who is he?"</p>
+ <p>"I certainly cannot inform you. I know nothing about him. Formerly I employed him as a copyist; but he has done nothing for me now for some time past."</p>
+ <p>"I shall settle him then,--good morning, sir."</p>
+ <p>Several days passed, and I heard nothing more; and though I often felt a charitable prompting to call at the place and see poor Bartleby, yet a certain squeamishness of I know not what withheld me.</p>
+ <p>All is over with him, by this time, thought I at last, when through another week no further intelligence reached me. But coming to my room the day after, I found several persons waiting at my door in a high state of nervous excitement.</p>
+ <p>"That's the man--here he comes," cried the foremost one, whom recognized as the lawyer who had previously called upon me alone.</p>
+ <p>"You must take him away, sir, at once," cried a portly person among them, advancing upon me, and whom I knew to be the landlord of No.--Wall-street. "These gentlemen, my tenants, cannot stand it any longer; Mr. B--" pointing to the lawyer, "has turned him out of his room, and he now persists in haunting the buildinggenerally, sitting upon the banisters of the stairs by day, and sleeping in the entry by night. Every body is concerned; clients are leaving the offices; some fears are entertained of a mob; something you must do, and that without delay."</p>
+ <p> Aghast at this torment, I fell back before it, and would fain have locked myselfin my new quarters. In vain I persisted that Bartleby was nothing to me--no more than to any one else. In vain:--I was the last person known to have any thing to do with him, and they held me to the terrible account. Fearful then of being exposed in the papers (as one person present obscurely threatened) I considered the matter, and at length said, that if the lawyer would give me a confidential interview with the scrivener, in his (the lawyer's) own room, I would that afternoon strive my best to rid them of the nuisance they complained of.</p>
+ <p>Going up stairs to my old haunt, there was Bartleby silently sitting upon the banister at the landing.</p>
+ <p>"What are you doing here, Bartleby?" said I.</p>
+ <p>"Sitting upon the banister," he mildly replied.</p>
+ <p>I motioned him into the lawyer's room, who then left us.</p>
+ <p>"Bartleby," said I, "are you aware that you are the cause of great tribulation to me, by persisting in occupying the entry after being dismissed from the office?"</p>
+ <p>No answer.</p>
+ <p>"Now one of two things must take place. Either you must do something or something must be done to you. Now what sort of business would you like to engage in? Would you like to re-engage in copying for some one?"</p>
+ <p>"No; I would prefer not to make any change."</p>
+ <p>"Would you like a clerkship in a dry-goods store?"</p>
+ <p>"There is too much confinement about that. No, I would not like a clerkship; but I am not particular."</p>
+ <p>"Too much confinement," I cried, "why you keep yourself confined all the time!"</p>
+ <p>"I would prefer not to take a clerkship," he rejoined, as if to settle that little item at once.</p>
+ <p>"How would a bar-tender's business suit you? There is no trying of the eyesight in that."</p>
+ <p>"I would not like it at all; though, as I said before, I am not particular."</p>
+ <p>His unwonted wordiness inspirited me. I returned to the charge.</p>
+ <p>"Well then, would you like to travel through the country collecting bills for the merchants? That would improve your health."</p>
+ <p>"No, I would prefer to be doing something else."</p>
+ <p>"How then would going as a companion to Europe, to entertain some young gentleman with your conversation,--how would that suit you?"</p>
+ <p>"Not at all. It does not strike me that there is any thing definite about that. I like to be stationary. But I am not particular.</p>
+ <p>"Stationary you shall be then," I cried, now losing all patience, and for the first time in all my exasperating connection with him fairly flying into a passion. "If you do not go away from these premises before night, I shall feel bound--indeed I am bound--to-- to--to quit the premises myself!" I rather absurdly concluded, knowing not with what possible threat to try to frighten his immobility into compliance. Despairing of all further efforts, I was precipitately leaving him, when a final thought occurred to me--one which had not been wholly unindulged before. </p>
+ <p>"Bartleby," said I, in the kindest tone I could assume under such exciting circumstances, "will you go home with me now--not to my office, but my dwelling--and remain there till we can conclude upon some convenient arrangement for you at our leisure? Come, let us start now, right away."</p>
+ <p>"No: at present I would prefer not to make any change at all."</p>
+ <p>I answered nothing; but effectualy dodging every one by the suddenness and rapidity of my flight, rushed from the building, ran up Wall-street towards Broadway, and jumping into the first omnibus was soon removed from pursuit. As soon as tranquility returned I distinctly perceived that I had now done all that I possibly could, both in respect to the demands of the landlord and his tenants, and with regard to my own desire and sense of duty, to benefit Bartleby, and shield him from rude persecution. I now strove to be entirely care-free and quiescent; and my conscience justified me in the attempt; though indeed it was not so successful as I could have wished. So fearful was I of being again hunted out by the incensed landlord and his exasperated tenants, that, surrendering my business to Nippers, for a few days I drove about the upper part of the town and through the suburbs, in my rockaway; crossed over to Jersey City and Hoboken, and paid fugitive visits to Manhattanville and Astoria. In fact I almost lived in my rockaway for the time.</p>
+ <p>When again I entered my office, lo, a note from the landlord lay upon desk. opened it with trembling hands. informed me that writer had sent to police, and Bartleby removed the Tombs as a vagrant. Moreover, since I knew more about him than any one else, he wished me to appear at that place, and make a suitable statement of the facts. These tidings had a conflicting effect upon me. At first I was indignant; but at last almost approved. The landlord's energetic, summary disposition, had led him to adopt a procedure which I do not think I would have decided upon myself; and yet as a last resort, under such peculiar circumstances, it seemed the only plan.</p>
+ <p>As I afterwards learned, the poor scrivener, when told that he must be conducted to the Tombs, offered not the slightest obstacle, but in his pale unmoving way, silently acquiesced. </p>
+ <p>Some of the compassionate and curious bystanders joined the party; and headed by one of the constables arm in arm with Bartleby, the silent procession filed its way through all the noise, and heat, and joy of the roaring thoroughfares at noon.</p>
+ <p>The same day I received the note I went to the Tombs, or to speak more properly, the Halls of Justice. Seeking the right officer, I stated the purpose of my call, and was informed that the individual I described was indeed within. I then assured the functionary that Bartleby was a perfectly honest man, and greatly to be compassionated, however unaccountably eccentric. I narrated all I knew,and closed by suggesting the idea of letting him remain in as indulgent confinement as possible till something less harsh might be done--though indeed I hardly knew what. At all events, if nothing else could be decided upon, the alms-house must receive him. I then begged to have an interview.</p>
+ <p>Being under no disgraceful charge, and quite serene and harmless in all his ways, they had permitted him freely to wander about the prison, and especially in the inclosed grass-platted yards thereof. And so I found him there, standing all alone in the quietest of the yards, his face towards a high wall, while all around, from the narrow slits of the jail windows, I thought I saw peering out upon him the eyes of murderers and thieves. </p>
+ <p>"Bartleby!"</p>
+ <p>"I know you," he said, without looking round,--"and I want nothing to say to you."</p>
+ <p>"It was not I that brought you here, Bartleby," said I, keenly pained at his implied suspicion. "And to you, this should not be so vile a place. Nothing reproachful attaches to you by being here. And see, it is not so sad a place as one might think. Look, there is the sky, and here is the grass."</p>
+ <p>"I know where I am," he replied, but would say nothing more, and so I left him.</p>
+ <p>As I entered the corridor again, a broad meat-like man in an apron, accosted me, and jerking his thumb over his shoulder said--"Is that your friend?"</p>
+ <p>"Yes."</p>
+ <p>"Does he want to starve? If he does, let him live on the prison fare, that's all.</p>
+ <p>"Who are you?" asked I, not knowing what to make of such an unofficially speaking person in such a place.</p>
+ <p>"I am the grub-man. Such gentlemen as have friends here, hire me to provide them with something good to eat."</p>
+ <p>"Is this so?" said I, turning to the turnkey.</p>
+ <p>He said it was.</p>
+ <p>"Well then," said I, slipping some silver into the grub-man's hands (for so they called him). "I want you to give particular attention to my friend there; let him have the best dinner you can get. And you must be as polite to him as possible."</p>
+ <p>"Introduce me, will you?" said the grub-man, looking at me with an expression which seemed to say he was all impatience for an opportunity to give a specimen of his breeding.</p>
+ <p>Thinking it would prove of benefit to the scrivener, I acquiesced; and asking the grub-man his name, went up with him to Bartleby.</p>
+ <p>"Bartleby, this is a friend; you will find him very useful to you."</p>
+ <p>"Your sarvant, sir, your sarvant," said the grub-man, making a low salutation behind his apron. "Hope you find it pleasant here, sir;--spacious grounds--cool apartments, sir--hope you'll stay with us some time--try to make it agreeable. What will you have for dinner today?"</p>
+ <p>"I prefer not to dine to-day," said Bartleby, turning away. "It would disagree with me; I am unused to dinners." So saying he slowly moved to the other side of the inclosure, and took up a position fronting the dead-wall.</p>
+ <p>"How's this?" said the grub-man, addressing me with a stare of astonishment. "He's odd, aint he?"</p>
+ <p>"I think he is a little deranged," said I, sadly.</p>
+ <p>"Deranged? deranged is it? Well now, upon my word, I thought that friend of yourn was a gentleman forger; they are always pale and genteel-like, them forgers. I can't help pity 'em--can't help it, sir. Did you know Monroe Edwards?" he added touchingly, and paused. Then, laying his hand pityingly on my shoulder, sighed, "he died of consumption at Sing-Sing. so you weren't acquainted with Monroe?"</p>
+ <p>"No, I was never socially acquainted with any forgers. But I cannot stop longer. Look to my friend yonder. You will not lose by it. I will see you again."</p>
+ <p>Some few days after this, I again obtained admission to the Tombs, and went through the corridors in quest of Bartleby; but without finding him.</p>
+ <p>"I saw him coming from his cell not long ago," said a turnkey, "may be he's gone to loiter in the yards."</p>
+ <p>So I went in that direction.</p>
+ <p>"Are you looking for the silent man?" said another turnkey passing me. "Yonder he lies--sleeping in the yard there. 'Tis not twenty minutes since I saw him lie down."</p>
+ <p>The yard was entirely quiet. It was not accessible to the common prisoners. The surrounding walls, of amazing thickness, kept off all sound behind them. The Egyptian character of the masonry weighed upon me with its gloom. But a soft imprisoned turf grew under foot. The heart of the eternal pyramids, it seemed, wherein, by some strange magic, through the clefts, grass-seed, dropped by birds, had sprung.</p>
+ <p>Strangely huddled at the base of the wall, his knees drawn up, and lying on his side, his head touching the cold stones, I saw the wasted Bartleby. But nothing stirred. I paused; then went close up to him; stooped over, and saw that his dim eyes were open; otherwise he seemed profoundly sleeping. Something prompted me to touch him. I felt his hand, when a tingling shiver ran up my arm and down my spine to my feet.</p>
+ <p>The round face of the grub-man peered upon me now. "His dinner is ready. Won't he dine to-day, either? Or does he live without dining?"</p>
+ <p>"Lives without dining," said I, and closed the eyes.</p>
+ <p>"Eh!--He's asleep, aint he?"</p>
+ <p>"With kings and counsellors," murmured I.</p>
+ <p>* * * * * * * *</p>
+ <p>There would seem little need for proceeding further in this history. Imagination will readily supply the meagre recital of poor Bartleby's interment. But ere parting with the reader, let me say, that if this little narrative has sufficiently interested him, to awaken curiosity as to who Bartleby was, and what manner of life he led prior to the present narrator's making his acquaintance, I can only reply, that in such curiosity I fully share, but am wholly unable to gratify it. Yet here I hardly know whether I should divulge one little item of rumor, which came to my ear a few months after the scrivener's decease. Upon what basis it rested, I could never ascertain; and hence how true it is I cannot now tell. But inasmuch as this vague report has not been without a certain strange suggestive interest to me, however said, it may prove the same with some others; and so I will briefly mention it. The report was this: that Bartleby had been a subordinate clerk in the Dead Letter Office at <a href="http://raven.cc.ukans.edu/%7Ezeke/bartleby/parker.html" target="_blank">Washington</a>, from which he had been suddenly removed by a change in the administration. When I think over this rumor, I cannot adequately express the emotions which seize me. Dead letters! does it not sound like dead men? Conceive a man by nature and misfortune prone to a pallid hopelessness, can any business seem more fitted to heighten it than that of continually handling these dead letters and assorting them for the flames? For by the cart-load they are annually burned. Sometimes from out the folded paper the pale clerk takes a ring:--the bank-note sent in swiftest charity:--he whom it would relieve, nor eats nor hungers any more; pardon for those who died despairing; hope for those who died unhoping; good tidings for those who died stifled by unrelieved calamities. On errands of life, these letters speed to death. </p>
+ <p> Ah Bartleby! Ah humanity!</p>
+ </div>
+ </div>
+</div> \ No newline at end of file
diff --git a/test/test-pages/cnet-svg-classes/expected.html b/test/test-pages/cnet-svg-classes/expected.html
index 26b7440..c8f00f8 100644
--- a/test/test-pages/cnet-svg-classes/expected.html
+++ b/test/test-pages/cnet-svg-classes/expected.html
@@ -5,19 +5,19 @@
</span></figcaption></figure><p>Twitter ha dado a conocer que Twitter Lite llegará a un total de 24 nuevos países a partir de hoy, 11 de ellos de América Latina. </p>
<p>Según explicó en un <a data-component="externalLink" href="https://blog.twitter.com/official/en_us/topics/product/2017/twitter-lite-in-the-google-play-store-in-24-more-countries.html#" target="_blank">comunicado</a> <span section="shortcodeLink"><a href="http://fakehost/es/noticias/twitter-estrena-twitter-lite/">Twitter Lite</a></span> ahora estará disponible en Bolivia, Brasil, Chile, Colombia, Costa Rica, Ecuador, México, Panamá, Perú, El Salvador y Venezuela.</p>
<p>Twitter Lite es la versión ligera de la aplicación de la red social para Android, disponible en la Google Play Store. Con este app los usuarios que experimentan fallos de red o que viven en países con redes con poca velocidad de conexión como Venezuela podrán descargar los tuits de forma más rápida.</p>
-
+
<p>Entre sus novedades, Twitter Lite permite la carga rápida de tuits en redes 2G y 3G, y ofrece ayuda offline en caso de que pierdas tu conexión; a eso debemos sumar que minimiza el uso de datos y ofrece un modo de ahorro, en el que únicamente se descargan las fotos o videos de los tuits que quieres ver.</p>
-
-
+
+
<p>Además, el app ocupa menos espacio en tu teléfono móvil, al reducir a 3MB su peso.</p>
<p>Twitter dio a conocer Twitter Lite en abril en India, y desde entonces ha estado trabajando para llevarlo a más países. La empresa en los últimos meses también se ha involucrado de forma definitiva en la <span section="shortcodeLink"><a href="http://fakehost/es/noticias/twitter-hemos-progresado-en-nuestra-batalla-contra-el-abuso/">eliminación de los abusos en la red social</a></span>, tomando medidas incluso en la <span section="shortcodeLink"><a href="http://fakehost/es/noticias/twitter-elimina-verificacion-a-cuentas-ofensivas/">verificación de cuentas.</a></span></p><svg><symbol id="play" viewbox="0 0 26.6 32"><path d="M0,2.6c0-2.4,1.6-3.3,3.7-2L25,13.7c2,1.3,2,3.2,0,4.5L3.7,31.4c-2,1.3-3.7,0.3-3.7-2C0,29.4,0,2.6,0,2.6z"></path></symbol><symbol id="pause" viewbox="0 0 26.6 32"><g><polygon points="16,32 26.5,32 26.5,8.8 26.5,0 16,0"></polygon><rect height="32" width="10.6" x="0.1" y="0"></rect></g></symbol><symbol id="playlist" viewbox="0 0 32 22.9"><g><circle cx="2.3" cy="20.6" r="2.3"></circle><circle cx="2.3" cy="11.4" r="2.3"></circle><circle cx="2.3" cy="2.3" r="2.3"></circle><path d="M32,1.1C32,0.5,31.5,0,30.9,0H10.3C9.7,0,9.1,0.5,9.1,1.1v2.3c0,0.6,0.5,1.1,1.1,1.1h20.6c0.6,0,1.1-0.5,1.1-1.1V1.1z"></path><path d="M32,10.3c0-0.6-0.5-1.1-1.1-1.1H10.3c-0.6,0-1.1,0.5-1.1,1.1v2.3c0,0.6,0.5,1.1,1.1,1.1h20.6c0.6,0,1.1-0.5,1.1-1.1V10.3z"></path><path d="M32,19.4c0-0.6-0.5-1.1-1.1-1.1H10.3c-0.6,0-1.1,0.5-1.1,1.1v2.3c0,0.6,0.5,1.1,1.1,1.1h20.6c0.6,0,1.1-0.5,1.1-1.1V19.4z"></path></g></symbol><symbol id="speaker-on" viewbox="0 0 32 28.1"><g><g><path d="M12.6,5L6.3,8.7H0.6C0.3,8.7,0,9,0,9.3V19c0,0.4,0.3,0.7,0.6,0.7h5.9l6.1,3.4c1.3,0.8,1.5,0.2,1.5-1.5V6.5C14.2,4.8,13.9,4.2,12.6,5z"></path></g><path d="M18,23.1v-2.8c2.6,0,4.7-2.8,4.7-6.2S20.6,7.8,18,7.8V5c4.2,0,7.5,4,7.5,9S22.1,23.1,18,23.1z"></path><path d="M21.3,28.1v-2.8c4.4,0,7.9-5,7.9-11.2S25.6,2.8,21.3,2.8V0C27.2,0,32,6.3,32,14C32,21.8,27.2,28.1,21.3,28.1z"></path></g></symbol><symbol id="speaker-off" viewbox="0 0 32 18.8"><g><g><path d="M12.6,0.4L6.3,4H0.6C0.3,4,0,4.3,0,4.7v9.7c0,0.4,0.3,0.7,0.6,0.7h5.9l6.1,3.4c1.3,0.8,1.5,0.2,1.5-1.5V1.8C14.2,0.2,13.9-0.5,12.6,0.4z"></path></g><polygon points="32,4.5 30.2,2.7 25.3,7.6 20.4,2.7 18.6,4.5 23.5,9.4 18.6,14.3 20.4,16.1 25.3,11.2 30.2,16.1 32,14.3 27.1,9.4 "></polygon></g></symbol><symbol id="captions" viewbox="0 0 32 16.2"><g><path d="M8.6,16.2c-1.2,0-2.4-0.2-3.4-0.6c-1.1-0.4-2-0.9-2.7-1.6c-0.8-0.7-1.4-1.6-1.8-2.6C0.2,10.4,0,9.3,0,8.1c0-1.2,0.2-2.3,0.7-3.3s1-1.8,1.8-2.6C3.2,1.5,4.1,1,5.2,0.6S7.4,0,8.6,0c1,0,1.9,0.1,2.7,0.4c0.8,0.3,1.4,0.6,2,1.1c0.6,0.4,1.1,0.9,1.4,1.5c0.4,0.5,0.7,1.1,0.9,1.6l-4.1,1.9c-0.1-0.3-0.2-0.6-0.4-0.9C11,5.3,10.8,5,10.5,4.8c-0.3-0.2-0.6-0.4-0.9-0.5c-0.3-0.1-0.7-0.2-1-0.2C8,4.2,7.5,4.3,7,4.5C6.6,4.7,6.2,5,5.8,5.3C5.5,5.7,5.2,6.1,5.1,6.5C4.9,7,4.8,7.5,4.8,8.1c0,0.5,0.1,1.1,0.3,1.5c0.2,0.5,0.4,0.9,0.8,1.2c0.3,0.4,0.7,0.6,1.2,0.8C7.5,11.9,8,12,8.6,12c0.3,0,0.7-0.1,1-0.2c0.3-0.1,0.6-0.3,0.9-0.5c0.3-0.2,0.5-0.4,0.7-0.7c0.2-0.3,0.3-0.6,0.4-0.9l4.1,1.9c-0.2,0.5-0.5,1-0.9,1.6c-0.4,0.5-0.9,1-1.4,1.5c-0.6,0.4-1.2,0.8-2,1.1C10.5,16,9.6,16.2,8.6,16.2z"></path><path d="M24.9,16.2c-1.2,0-2.4-0.2-3.4-0.6c-1.1-0.4-2-0.9-2.7-1.6c-0.8-0.7-1.4-1.6-1.8-2.6c-0.4-1-0.7-2.1-0.7-3.3c0-1.2,0.2-2.3,0.7-3.3c0.4-1,1-1.8,1.8-2.6c0.8-0.7,1.7-1.3,2.7-1.7C22.6,0.2,23.7,0,24.9,0c1,0,1.9,0.1,2.7,0.4c0.8,0.3,1.4,0.6,2,1.1c0.6,0.4,1.1,0.9,1.4,1.5C31.5,3.5,31.8,4,32,4.5l-4.1,1.9c-0.1-0.3-0.2-0.6-0.4-0.9c-0.2-0.3-0.4-0.5-0.7-0.7c-0.3-0.2-0.6-0.4-0.9-0.5c-0.3-0.1-0.7-0.2-1-0.2c-0.6,0-1.1,0.1-1.5,0.3c-0.5,0.2-0.9,0.5-1.2,0.8c-0.3,0.4-0.6,0.8-0.8,1.2c-0.2,0.5-0.3,1-0.3,1.5c0,0.5,0.1,1.1,0.3,1.5c0.2,0.5,0.4,0.9,0.8,1.2c0.3,0.4,0.7,0.6,1.2,0.8c0.5,0.2,1,0.3,1.5,0.3c0.3,0,0.7-0.1,1-0.2c0.3-0.1,0.6-0.3,0.9-0.5c0.3-0.2,0.5-0.4,0.7-0.7c0.2-0.3,0.3-0.6,0.4-0.9l4.1,1.9c-0.2,0.5-0.5,1-0.9,1.6c-0.4,0.5-0.9,1-1.4,1.5c-0.6,0.4-1.2,0.8-2,1.1C26.8,16,25.9,16.2,24.9,16.2z"></path></g></symbol><symbol id="fullscreen" viewbox="0 0 32 32"><g><g><polygon points="11.4,0 0,0 0,11.4 3.4,8 9.1,13.7 13.7,9.1 8,3.4 &#x9;&#x9;&#x9;"></polygon></g><g><polygon points="20.6,32 32,32 32,20.6 28.6,24 22.9,18.3 18.3,22.9 24,28.6 &#x9;&#x9;&#x9;"></polygon></g><g><polygon points="32,11.4 32,0 20.6,0 24,3.4 18.3,9.1 22.9,13.7 28.6,8 &#x9;&#x9;&#x9;"></polygon></g><g><polygon points="0,20.6 0,32 11.4,32 8,28.6 13.7,22.9 9.1,18.3 3.4,24 &#x9;&#x9;&#x9;"></polygon></g></g></symbol><symbol id="video" viewbox="0 0 32 22"><g><path d="M29,2.2c-0.7,0.2-4.6,3-7.9,5.3V2.1C21.1,1,20.1,0,19,0H2.1C1,0,0,1,0,2.1v17.7C0,21,1,22,2.1,22H19c1.2,0,2.1-1,2.1-2.1v-5.9c3.3,2.4,7.4,5.4,8.2,5.6c1.4,0.4,2.7-0.1,2.7-0.1V2.2C32,2.2,30.1,1.8,29,2.2z"></path></g></symbol></svg><div data-load-playlist="[{&quot;id&quot;:&quot;dc362fcb-cba9-4bf6-b62d-aa7e39a092c7&quot;,&quot;title&quot;:&quot;Google Assistant mejora, hay m\u00e1s cambios en Twitter y llega el OnePlus 5T&quot;,&quot;description&quot;:&quot;[La semana en CNET en Espa\u00f1ol #163] Esta semana hablamos de las caracter\u00edsticas del OnePlus 5T, las novedades de Google Assistant y los cambios que ha hecho Twitter a su proceso de verificaci\u00f3n.&quot;,&quot;slug&quot;:&quot;google-assistant-mejora-hay-mas-cambios-en-twitter-y-llega-el-oneplus-5t&quot;,&quot;chapters&quot;:{&quot;data&quot;:[],&quot;paging&quot;:{&quot;total&quot;:0,&quot;limit&quot;:15,&quot;offset&quot;:0}},&quot;duration&quot;:489,&quot;hasCaptions&quot;:true,&quot;mpxId&quot;:&quot;&quot;,&quot;mpxRefId&quot;:&quot;38uKprB1_hIkwXffuj20eMptuapoWX4K&quot;,&quot;ratingVChip&quot;:&quot;TV-14&quot;,&quot;primaryTopic&quot;:{&quot;id&quot;:&quot;1c0fd1cb-c387-11e2-8208-0291187b029a&quot;},&quot;author&quot;:{&quot;id&quot;:&quot;6a9b3b6b-575a-4b66-b4b2-4aedee01be6d&quot;,&quot;firstName&quot;:&quot;Gabriel&quot;,&quot;lastName&quot;:&quot;Sama&quot;},&quot;primaryCollection&quot;:{&quot;id&quot;:&quot;b45f7536-5ba2-40d8-a054-40341b279649&quot;,&quot;title&quot;:&quot;La semana&quot;},&quot;image&quot;:{&quot;id&quot;:&quot;70540d7a-cbc5-4563-ab86-b5549ef68168&quot;,&quot;filename&quot;:&quot;oneplus-5t-product-21.jpg&quot;,&quot;dateCreated&quot;:{&quot;date&quot;:&quot;2017-11-13 17:56:07&quot;,&quot;timezone_type&quot;:3,&quot;timezone&quot;:&quot;UTC&quot;},&quot;alt&quot;:&quot;oneplus-5t-product-21&quot;,&quot;credits&quot;:&quot;Andrew Hoyle\/CNET&quot;,&quot;path&quot;:&quot;https:\/\/cnet4.cbsistatic.com\/img\/EcEJ76YiEastX8yctETLURpwICc=\/2017\/11\/13\/70540d7a-cbc5-4563-ab86-b5549ef68168\/oneplus-5t-product-21.jpg&quot;,&quot;cropGravity&quot;:0,&quot;crop&quot;:null,&quot;typeName&quot;:&quot;content_image&quot;},&quot;thumbnail&quot;:&quot;https:\/\/cdn1.cnet.com\/img\/xTOX9ZdBnxWFXxkzSLG6dBydTMg=\/fit-in\/194x109\/2017\/11\/13\/70540d7a-cbc5-4563-ab86-b5549ef68168\/oneplus-5t-product-21.jpg&quot;,&quot;isVertical&quot;:false,&quot;m3u8&quot;:&quot;\/es\/videos\/manifest\/google-assistant-mejora-hay-mas-cambios-en-twitter-y-llega-el-oneplus-5t.m3u8&quot;,&quot;mp4&quot;:&quot;https:\/\/cnetmedia-a.akamaihd.net\/21923\/2017\/11\/17\/1098353731717\/es_lasemana16novFINAL_1265786_740.mp4&quot;,&quot;selector&quot;:&quot;\/es\/videos\/selector\/google-assistant-mejora-hay-mas-cambios-en-twitter-y-llega-el-oneplus-5t\/&quot;},{&quot;id&quot;:&quot;7097a578-8dc8-48b8-9bea-bc0dcabdb558&quot;,&quot;title&quot;:&quot;El \u0027bug\u0027 de MacOS High Sierra y la expansi\u00f3n de Huawei en Latinoam\u00e9rica&quot;,&quot;description&quot;:&quot;[La semana en CNET en Espa\u00f1ol #165] Apple solucion\u00f3 el problema de que se pod\u00eda acceder a algunas Mac sin contrase\u00f1a. Huawei adelant\u00f3 planes para la regi\u00f3n.&quot;,&quot;slug&quot;:&quot;bug-de-macos-high-sierra-expansion-huawei-en-latinoamerica&quot;,&quot;chapters&quot;:&quot;&quot;,&quot;duration&quot;:550,&quot;hasCaptions&quot;:true,&quot;mpxId&quot;:1107731523514,&quot;mpxRefId&quot;:&quot;IwoiIhK2JgjRf8oj2sS99ClHB2K8w8uw&quot;,&quot;ratingVChip&quot;:&quot;&quot;,&quot;primaryTopic&quot;:{&quot;id&quot;:&quot;&quot;},&quot;author&quot;:{&quot;id&quot;:&quot;272ff2eb-03d3-4e24-9b55-09f4633368f9&quot;,&quot;firstName&quot;:&quot;Mariana&quot;,&quot;lastName&quot;:&quot;Marcaletti&quot;},&quot;primaryCollection&quot;:{&quot;id&quot;:&quot;b45f7536-5ba2-40d8-a054-40341b279649&quot;,&quot;title&quot;:[&quot;La semana&quot;]},&quot;image&quot;:{&quot;id&quot;:&quot;1934b65e-89f2-4449-ae15-61584288ed9d&quot;,&quot;name&quot;:&quot;macos-high-sierra-image&quot;,&quot;filename&quot;:&quot;macos-high-sierra-image.jpg&quot;,&quot;path&quot;:&quot;https:\/\/cnet4.cbsistatic.com\/img\/bmNGTUwxlWz6QUuj1pUj2G90QUE=\/2017\/09\/27\/1934b65e-89f2-4449-ae15-61584288ed9d\/macos-high-sierra-image.jpg&quot;,&quot;size&quot;:1306802,&quot;height&quot;:1080,&quot;width&quot;:1920,&quot;dateCreated&quot;:{&quot;date&quot;:&quot;2017-09-27 17:49:57&quot;,&quot;timezone_type&quot;:3,&quot;timezone&quot;:&quot;UTC&quot;},&quot;dateUpdated&quot;:{&quot;date&quot;:&quot;2017-09-27 17:49:57&quot;,&quot;timezone_type&quot;:3,&quot;timezone&quot;:&quot;UTC&quot;},&quot;needsModeration&quot;:0,&quot;mimeType&quot;:&quot;image\/jpeg&quot;,&quot;deleted&quot;:0,&quot;preferred&quot;:0,&quot;watermark&quot;:0,&quot;alt&quot;:&quot;macos-high-sierra-image&quot;,&quot;cropGravity&quot;:0},&quot;thumbnail&quot;:&quot;https:\/\/cdn3.cnet.com\/img\/C6S9ny6QsPl0M4RazJBreX1ZaO8=\/fit-in\/194x109\/2017\/09\/27\/1934b65e-89f2-4449-ae15-61584288ed9d\/macos-high-sierra-image.jpg&quot;,&quot;isVertical&quot;:false,&quot;m3u8&quot;:&quot;\/es\/videos\/manifest\/bug-de-macos-high-sierra-expansion-huawei-en-latinoamerica.m3u8&quot;,&quot;mp4&quot;:&quot;https:\/\/cnetmedia-a.akamaihd.net\/21923\/2017\/12\/01\/1107731523514\/es_lasemana1diciembre_1275504_740.mp4&quot;,&quot;selector&quot;:&quot;\/es\/videos\/selector\/bug-de-macos-high-sierra-expansion-huawei-en-latinoamerica\/&quot;},{&quot;id&quot;:&quot;41e31d24-ab17-445d-8841-ceb86ae9044f&quot;,&quot;title&quot;:&quot;Nuestros consejos para la temporada de ofertas&quot;,&quot;description&quot;:&quot;[La semana en CNET en Espa\u00f1ol #164] Nada de madrugar, hacer filas largas y estresarte. Esta semana te compartimos sugerencias puntuales para que le saques m\u00e1s jugo a las compras de Black Friday y Cyber Monday.&quot;,&quot;slug&quot;:&quot;consejos-ofertas-viernes-negro&quot;,&quot;chapters&quot;:&quot;&quot;,&quot;duration&quot;:441,&quot;hasCaptions&quot;:true,&quot;mpxId&quot;:1102073923731,&quot;mpxRefId&quot;:&quot;5XzHm1c3DBSxFhifEcVyEyTaNwlg6R0a&quot;,&quot;ratingVChip&quot;:&quot;&quot;,&quot;primaryTopic&quot;:{&quot;id&quot;:&quot;&quot;},&quot;author&quot;:{&quot;id&quot;:&quot;272ff2eb-03d3-4e24-9b55-09f4633368f9&quot;,&quot;firstName&quot;:&quot;Mariana&quot;,&quot;lastName&quot;:&quot;Marcaletti&quot;},&quot;primaryCollection&quot;:{&quot;id&quot;:&quot;b45f7536-5ba2-40d8-a054-40341b279649&quot;,&quot;title&quot;:[&quot;La semana&quot;]},&quot;image&quot;:{&quot;id&quot;:&quot;154d2576-1ff8-41d8-ac2a-414450d5ee6c&quot;,&quot;name&quot;:&quot;viernesnegro&quot;,&quot;filename&quot;:&quot;viernesnegro.jpg&quot;,&quot;path&quot;:&quot;https:\/\/cnet4.cbsistatic.com\/img\/e6vO1LTPdKpSs3924nDWctNCZMY=\/2017\/11\/22\/154d2576-1ff8-41d8-ac2a-414450d5ee6c\/viernesnegro.jpg&quot;,&quot;size&quot;:278742,&quot;height&quot;:900,&quot;width&quot;:1600,&quot;dateCreated&quot;:{&quot;date&quot;:&quot;2017-11-22 22:32:03&quot;,&quot;timezone_type&quot;:3,&quot;timezone&quot;:&quot;UTC&quot;},&quot;dateUpdated&quot;:{&quot;date&quot;:&quot;2017-11-22 22:32:03&quot;,&quot;timezone_type&quot;:3,&quot;timezone&quot;:&quot;UTC&quot;},&quot;needsModeration&quot;:0,&quot;mimeType&quot;:&quot;image\/jpeg&quot;,&quot;deleted&quot;:0,&quot;preferred&quot;:0,&quot;watermark&quot;:0,&quot;alt&quot;:&quot;viernesnegro&quot;},&quot;thumbnail&quot;:&quot;https:\/\/cdn4.cnet.com\/img\/fcY_4UWuEddB5TbPXMSaNvgfcec=\/fit-in\/194x109\/2017\/11\/22\/154d2576-1ff8-41d8-ac2a-414450d5ee6c\/viernesnegro.jpg&quot;,&quot;isVertical&quot;:false,&quot;m3u8&quot;:&quot;\/es\/videos\/manifest\/consejos-ofertas-viernes-negro.m3u8&quot;,&quot;mp4&quot;:&quot;https:\/\/cnetmedia-a.akamaihd.net\/21923\/2017\/11\/22\/1102073923731\/semana_nov22_1270073_740.mp4&quot;,&quot;selector&quot;:&quot;\/es\/videos\/selector\/consejos-ofertas-viernes-negro\/&quot;},{&quot;id&quot;:&quot;db8b62cc-68fc-4f96-8fbc-bcbe5d4f8a1c&quot;,&quot;title&quot;:&quot;El desembarco de Xiaomi en Espa\u00f1a y la previa del OnePlus 5T&quot;,&quot;description&quot;:&quot;[La semana en CNET en Espa\u00f1ol #162] La fabricante de celulares china llega a Espa\u00f1a con m\u00e1s de seis tel\u00e9fonos de menos de 300 euros, y el OnePlus 5T se presentar\u00e1 el 16 de noviembre en Estados Unidos.&quot;,&quot;slug&quot;:&quot;el-desembarco-de-xiaomi-en-espana-y-la-previa-del-oneplus-5t&quot;,&quot;chapters&quot;:&quot;&quot;,&quot;duration&quot;:500,&quot;hasCaptions&quot;:true,&quot;mpxId&quot;:1093211715579,&quot;mpxRefId&quot;:&quot;APQJZKaXzbhmwxYJcFFg_AHYIHfLWNU6&quot;,&quot;ratingVChip&quot;:&quot;&quot;,&quot;primaryTopic&quot;:{&quot;id&quot;:&quot;&quot;},&quot;author&quot;:{&quot;id&quot;:&quot;272ff2eb-03d3-4e24-9b55-09f4633368f9&quot;,&quot;firstName&quot;:&quot;Mariana&quot;,&quot;lastName&quot;:&quot;Marcaletti&quot;},&quot;primaryCollection&quot;:{&quot;id&quot;:&quot;b45f7536-5ba2-40d8-a054-40341b279649&quot;,&quot;title&quot;:[&quot;La semana&quot;]},&quot;image&quot;:{&quot;id&quot;:&quot;96ec74ea-1acb-48be-b74e-816ba301d19a&quot;,&quot;name&quot;:&quot;oneplus-5t&quot;,&quot;filename&quot;:&quot;oneplus-5t.jpg&quot;,&quot;path&quot;:&quot;https:\/\/cnet4.cbsistatic.com\/img\/KK0CqnMaqMxZ9bC-3jbAiQhnutM=\/2017\/10\/30\/96ec74ea-1acb-48be-b74e-816ba301d19a\/oneplus-5t.jpg&quot;,&quot;caption&quot;:&quot;&lt;p>Una supuesta foto del OnePlus 5T filtrada en China.&lt;\/p>&quot;,&quot;size&quot;:41019,&quot;height&quot;:592,&quot;width&quot;:690,&quot;dateCreated&quot;:{&quot;date&quot;:&quot;2017-10-30 19:55:39&quot;,&quot;timezone_type&quot;:3,&quot;timezone&quot;:&quot;UTC&quot;},&quot;dateUpdated&quot;:{&quot;date&quot;:&quot;2017-10-30 19:56:18&quot;,&quot;timezone_type&quot;:3,&quot;timezone&quot;:&quot;UTC&quot;},&quot;needsModeration&quot;:0,&quot;mimeType&quot;:&quot;image\/jpeg&quot;,&quot;deleted&quot;:0,&quot;preferred&quot;:0,&quot;watermark&quot;:0,&quot;credits&quot;:&quot;Weibo&quot;,&quot;alt&quot;:&quot;oneplus-5t&quot;},&quot;thumbnail&quot;:&quot;https:\/\/cdn2.cnet.com\/img\/9CtVwepYPv7fktP5LlCjoAjq0is=\/fit-in\/194x109\/2017\/10\/30\/96ec74ea-1acb-48be-b74e-816ba301d19a\/oneplus-5t.jpg&quot;,&quot;isVertical&quot;:false,&quot;m3u8&quot;:&quot;\/es\/videos\/manifest\/el-desembarco-de-xiaomi-en-espana-y-la-previa-del-oneplus-5t.m3u8&quot;,&quot;mp4&quot;:&quot;https:\/\/cnetmedia-a.akamaihd.net\/21923\/2017\/11\/10\/1093211715579\/es_lasemana_9noviembre02_1259372_740.mp4&quot;,&quot;selector&quot;:&quot;\/es\/videos\/selector\/el-desembarco-de-xiaomi-en-espana-y-la-previa-del-oneplus-5t\/&quot;},{&quot;id&quot;:&quot;283c729a-eeeb-454b-ae03-d1d95229031d&quot;,&quot;title&quot;:&quot;Google Assistant habla espa\u00f1ol y el iPhone X presenta un nuevo idioma de dise\u00f1o&quot;,&quot;description&quot;:&quot;[La semana en CNET en Espa\u00f1ol #161] El asistente virtual de Google ahora domina el idioma de Cervantes, y el iPhone X inaugura nuevos gestos y un nuevo lenguaje de dise\u00f1o de la marca.&quot;,&quot;slug&quot;:&quot;google-assistant-habla-espanol-y-el-iphone-x-un-nuevo-idioma&quot;,&quot;chapters&quot;:&quot;&quot;,&quot;duration&quot;:683,&quot;hasCaptions&quot;:true,&quot;mpxId&quot;:1087923267594,&quot;mpxRefId&quot;:&quot;jCXv62P0jCNTJB3jKuthMzA3CV0ghejk&quot;,&quot;ratingVChip&quot;:&quot;&quot;,&quot;primaryTopic&quot;:{&quot;id&quot;:&quot;&quot;},&quot;author&quot;:{&quot;id&quot;:&quot;272ff2eb-03d3-4e24-9b55-09f4633368f9&quot;,&quot;firstName&quot;:&quot;Mariana&quot;,&quot;lastName&quot;:&quot;Marcaletti&quot;},&quot;primaryCollection&quot;:{&quot;id&quot;:&quot;b45f7536-5ba2-40d8-a054-40341b279649&quot;,&quot;title&quot;:[&quot;La semana&quot;]},&quot;image&quot;:{&quot;id&quot;:&quot;0d404b1c-30e9-4ccf-9901-d2125b2b23f2&quot;,&quot;name&quot;:&quot;iphone-x-67&quot;,&quot;filename&quot;:&quot;iphone-x-67.jpg&quot;,&quot;path&quot;:&quot;https:\/\/cnet4.cbsistatic.com\/img\/JoewZeNO5ePGyD5iGiD7VM32i9w=\/2017\/11\/03\/0d404b1c-30e9-4ccf-9901-d2125b2b23f2\/iphone-x-67.jpg&quot;,&quot;size&quot;:153088,&quot;height&quot;:900,&quot;width&quot;:1600,&quot;dateCreated&quot;:{&quot;date&quot;:&quot;2017-11-03 16:19:37&quot;,&quot;timezone_type&quot;:3,&quot;timezone&quot;:&quot;UTC&quot;},&quot;dateUpdated&quot;:{&quot;date&quot;:&quot;2017-11-03 16:19:37&quot;,&quot;timezone_type&quot;:3,&quot;timezone&quot;:&quot;UTC&quot;},&quot;needsModeration&quot;:0,&quot;mimeType&quot;:&quot;image\/jpeg&quot;,&quot;deleted&quot;:0,&quot;preferred&quot;:0,&quot;watermark&quot;:0,&quot;alt&quot;:&quot;iphone-x-67&quot;},&quot;thumbnail&quot;:&quot;https:\/\/cdn3.cnet.com\/img\/6fdfuTdyxV3t7waWLSKyE6df3fY=\/fit-in\/194x109\/2017\/11\/03\/0d404b1c-30e9-4ccf-9901-d2125b2b23f2\/iphone-x-67.jpg&quot;,&quot;isVertical&quot;:false,&quot;m3u8&quot;:&quot;\/es\/videos\/manifest\/google-assistant-habla-espanol-y-el-iphone-x-un-nuevo-idioma.m3u8&quot;,&quot;mp4&quot;:&quot;https:\/\/cnetmedia-a.akamaihd.net\/21923\/2017\/11\/03\/1087923267594\/semananov2_1253191_740.mp4&quot;,&quot;selector&quot;:&quot;\/es\/videos\/selector\/google-assistant-habla-espanol-y-el-iphone-x-un-nuevo-idioma\/&quot;},{&quot;id&quot;:&quot;a3c0de25-3d75-44b9-9c83-6925dbd3ebb2&quot;,&quot;title&quot;:&quot;La pantalla del Pixel 2 XL, la llave maestra de Amazon y el inminente iPhone X&quot;,&quot;description&quot;:&quot;[La semana en CNET en Espa\u00f1ol #160] Analizamos los problemas con el panel OLED del tel\u00e9fono de Google, los env\u00edos de Amazon entran en tu hogar y ya est\u00e1 a la puerta el nuevo tel\u00e9fono de Apple.&quot;,&quot;slug&quot;:&quot;la-pantalla-de-pixel-2-xl-la-llave-maestra-de-amazon-y-el-inminente-iphone-x&quot;,&quot;chapters&quot;:&quot;&quot;,&quot;duration&quot;:574,&quot;hasCaptions&quot;:true,&quot;mpxId&quot;:1082906179568,&quot;mpxRefId&quot;:&quot;t4LPcFt8Hmm8Vg7U8o4s4_E0Xn_xqxAj&quot;,&quot;ratingVChip&quot;:&quot;&quot;,&quot;primaryTopic&quot;:{&quot;id&quot;:&quot;&quot;},&quot;author&quot;:{&quot;id&quot;:&quot;272ff2eb-03d3-4e24-9b55-09f4633368f9&quot;,&quot;firstName&quot;:&quot;Mariana&quot;,&quot;lastName&quot;:&quot;Marcaletti&quot;},&quot;primaryCollection&quot;:{&quot;id&quot;:&quot;b45f7536-5ba2-40d8-a054-40341b279649&quot;,&quot;title&quot;:[&quot;La semana&quot;]},&quot;image&quot;:{&quot;id&quot;:&quot;00597069-4f14-41dd-b1f1-e7bc413d4e17&quot;,&quot;name&quot;:&quot;Google Pixel 2 XL screen burn-in&quot;,&quot;filename&quot;:&quot;screen-problems-2405-001.jpg&quot;,&quot;path&quot;:&quot;https:\/\/cnet4.cbsistatic.com\/img\/zM13Oy086Lnor1efnDjx0mVca88=\/2017\/10\/23\/00597069-4f14-41dd-b1f1-e7bc413d4e17\/screen-problems-2405-001.jpg&quot;,&quot;caption&quot;:&quot;&lt;p>&lt;\/p>&quot;,&quot;size&quot;:1865911,&quot;height&quot;:1467,&quot;width&quot;:2200,&quot;dateCreated&quot;:{&quot;date&quot;:&quot;2017-10-23 19:09:04&quot;,&quot;timezone_type&quot;:3,&quot;timezone&quot;:&quot;UTC&quot;},&quot;dateUpdated&quot;:{&quot;date&quot;:&quot;2017-10-23 19:09:23&quot;,&quot;timezone_type&quot;:3,&quot;timezone&quot;:&quot;UTC&quot;},&quot;needsModeration&quot;:0,&quot;mimeType&quot;:&quot;image\/jpeg&quot;,&quot;deleted&quot;:0,&quot;preferred&quot;:0,&quot;watermark&quot;:1,&quot;credits&quot;:&quot;Josh Miller\/CNET&quot;,&quot;alt&quot;:&quot;Google Pixel 2 XL screen burn-in&quot;},&quot;thumbnail&quot;:&quot;https:\/\/cdn4.cnet.com\/img\/XTHaIZ7ZBuXvKPKB5niFqcP_23M=\/fit-in\/194x109\/2017\/10\/23\/00597069-4f14-41dd-b1f1-e7bc413d4e17\/screen-problems-2405-001.jpg&quot;,&quot;isVertical&quot;:false,&quot;m3u8&quot;:&quot;\/es\/videos\/manifest\/la-pantalla-de-pixel-2-xl-la-llave-maestra-de-amazon-y-el-inminente-iphone-x.m3u8&quot;,&quot;mp4&quot;:&quot;https:\/\/cnetmedia-a.akamaihd.net\/21923\/2017\/10\/27\/1082906179568\/es_lasemana27october_1247416_740.mp4&quot;,&quot;selector&quot;:&quot;\/es\/videos\/selector\/la-pantalla-de-pixel-2-xl-la-llave-maestra-de-amazon-y-el-inminente-iphone-x\/&quot;},{&quot;id&quot;:&quot;ae23b111-1e88-4edd-b1b5-dfed3e0cb061&quot;,&quot;title&quot;:&quot;Se consolida el hogar inteligente y aparece el fallo KRACK&quot;,&quot;description&quot;:&quot;[La semana en CNET en Espa\u00f1ol #159] Esta semana hablamos de la nueva plataforma de Samsung para el Internet de las Cosas, de la vulnerabilidad KRACK y de los nuevos tel\u00e9fonos en el mercado.&quot;,&quot;slug&quot;:&quot;la-semana-oct-19-cnet-espanol&quot;,&quot;chapters&quot;:&quot;&quot;,&quot;duration&quot;:691,&quot;hasCaptions&quot;:true,&quot;mpxId&quot;:1077887555736,&quot;mpxRefId&quot;:&quot;H4gkX0JjbU6b4gxZOkirySjFp3Z845dA&quot;,&quot;ratingVChip&quot;:&quot;&quot;,&quot;primaryTopic&quot;:{&quot;id&quot;:&quot;&quot;},&quot;author&quot;:{&quot;id&quot;:&quot;6a9b3b6b-575a-4b66-b4b2-4aedee01be6d&quot;,&quot;firstName&quot;:&quot;Gabriel&quot;,&quot;lastName&quot;:&quot;Sama&quot;},&quot;primaryCollection&quot;:{&quot;id&quot;:&quot;b45f7536-5ba2-40d8-a054-40341b279649&quot;,&quot;title&quot;:[&quot;La semana&quot;]},&quot;image&quot;:{&quot;id&quot;:&quot;d704b38b-cafe-414b-879b-459dd712796c&quot;,&quot;name&quot;:&quot;zte-axon-m-9755-024&quot;,&quot;filename&quot;:&quot;zte-axon-m-9755-024.jpg&quot;,&quot;path&quot;:&quot;https:\/\/cnet4.cbsistatic.com\/img\/VAqXY-db6xzcKly6P5BNqbaHpQw=\/2017\/10\/20\/d704b38b-cafe-414b-879b-459dd712796c\/zte-axon-m-9755-024.jpg&quot;,&quot;size&quot;:87148,&quot;height&quot;:900,&quot;width&quot;:1600,&quot;dateCreated&quot;:{&quot;date&quot;:&quot;2017-10-20 16:33:13&quot;,&quot;timezone_type&quot;:3,&quot;timezone&quot;:&quot;UTC&quot;},&quot;dateUpdated&quot;:{&quot;date&quot;:&quot;2017-10-20 16:33:13&quot;,&quot;timezone_type&quot;:3,&quot;timezone&quot;:&quot;UTC&quot;},&quot;needsModeration&quot;:0,&quot;mimeType&quot;:&quot;image\/jpeg&quot;,&quot;deleted&quot;:0,&quot;preferred&quot;:0,&quot;watermark&quot;:0,&quot;alt&quot;:&quot;zte-axon-m-9755-024&quot;},&quot;thumbnail&quot;:&quot;https:\/\/cdn3.cnet.com\/img\/ReV56T1ZCShd3YWImeR2IWEqAXU=\/fit-in\/194x109\/2017\/10\/20\/d704b38b-cafe-414b-879b-459dd712796c\/zte-axon-m-9755-024.jpg&quot;,&quot;isVertical&quot;:false,&quot;m3u8&quot;:&quot;\/es\/videos\/manifest\/la-semana-oct-19-cnet-espanol.m3u8&quot;,&quot;mp4&quot;:&quot;https:\/\/cnetmedia-a.akamaihd.net\/21923\/2017\/10\/20\/1077887555736\/semana_oct19_1241505_740.mp4&quot;,&quot;selector&quot;:&quot;\/es\/videos\/selector\/la-semana-oct-19-cnet-espanol\/&quot;},{&quot;id&quot;:&quot;4cb73b8d-1b2f-40ef-bb98-6b093198c681&quot;,&quot;title&quot;:&quot;Un nuevo Kindle y se asoman las nuevas gafas VR de Oculus&quot;,&quot;description&quot;:&quot;[La semana en CNET en Espa\u00f1ol #158] Esta semana, lleg\u00f3 el Kindle Oasis impermeable, se anunciaron las Oculus Go y Santa Cruz para realidad virtual y hubo un problemita con la Google Home Mini.&quot;,&quot;slug&quot;:&quot;un-nuevo-kindle-y-nuevas-gafas-vr-de-oculus-se-asoman&quot;,&quot;chapters&quot;:&quot;&quot;,&quot;duration&quot;:422,&quot;hasCaptions&quot;:true,&quot;mpxId&quot;:1072264259697,&quot;mpxRefId&quot;:&quot;8RTAYZ4ou1BgXXiybOYiclkJ6avdl6SM&quot;,&quot;ratingVChip&quot;:&quot;&quot;,&quot;primaryTopic&quot;:{&quot;id&quot;:&quot;&quot;},&quot;author&quot;:{&quot;id&quot;:&quot;272ff2eb-03d3-4e24-9b55-09f4633368f9&quot;,&quot;firstName&quot;:&quot;Mariana&quot;,&quot;lastName&quot;:&quot;Marcaletti&quot;},&quot;primaryCollection&quot;:{&quot;id&quot;:&quot;b45f7536-5ba2-40d8-a054-40341b279649&quot;,&quot;title&quot;:[&quot;La semana&quot;]},&quot;image&quot;:{&quot;id&quot;:&quot;4514916c-88c7-4c00-8324-9d522e0b3047&quot;,&quot;name&quot;:&quot;kindle-oasis-covers&quot;,&quot;filename&quot;:&quot;kindle-oasis-covers.jpg&quot;,&quot;path&quot;:&quot;https:\/\/cnet4.cbsistatic.com\/img\/el7STcxt2T02OoIFWp08KB2D1Bk=\/2017\/10\/05\/4514916c-88c7-4c00-8324-9d522e0b3047\/kindle-oasis-covers.jpg&quot;,&quot;caption&quot;:&quot;&lt;p>The optional covers start at $40 and come in nylon or leather.&lt;\/p>&quot;,&quot;size&quot;:4432570,&quot;height&quot;:3024,&quot;width&quot;:4032,&quot;dateCreated&quot;:{&quot;date&quot;:&quot;2017-10-05 19:52:22&quot;,&quot;timezone_type&quot;:3,&quot;timezone&quot;:&quot;UTC&quot;},&quot;dateUpdated&quot;:{&quot;date&quot;:&quot;2017-10-05 19:53:38&quot;,&quot;timezone_type&quot;:3,&quot;timezone&quot;:&quot;UTC&quot;},&quot;startDate&quot;:{&quot;date&quot;:&quot;2017-10-11 13:00:00&quot;,&quot;timezone_type&quot;:3,&quot;timezone&quot;:&quot;UTC&quot;},&quot;needsModeration&quot;:0,&quot;mimeType&quot;:&quot;image\/jpeg&quot;,&quot;deleted&quot;:0,&quot;preferred&quot;:0,&quot;watermark&quot;:1,&quot;credits&quot;:&quot;David Carnoy\/CNET&quot;,&quot;alt&quot;:&quot;kindle-oasis-covers&quot;},&quot;thumbnail&quot;:&quot;https:\/\/cdn3.cnet.com\/img\/vDQrwxSq2oDqDHdtnPLwD_eJR98=\/fit-in\/194x109\/2017\/10\/05\/4514916c-88c7-4c00-8324-9d522e0b3047\/kindle-oasis-covers.jpg&quot;,&quot;isVertical&quot;:false,&quot;m3u8&quot;:&quot;\/es\/videos\/manifest\/un-nuevo-kindle-y-nuevas-gafas-vr-de-oculus-se-asoman.m3u8&quot;,&quot;mp4&quot;:&quot;https:\/\/cnetmedia-a.akamaihd.net\/21923\/2017\/10\/13\/1072264259697\/es_lasemana12_oct_1235274_740.mp4&quot;,&quot;selector&quot;:&quot;\/es\/videos\/selector\/un-nuevo-kindle-y-nuevas-gafas-vr-de-oculus-se-asoman\/&quot;},{&quot;id&quot;:&quot;09051611-4cd7-4384-a459-b4a1050b5c1c&quot;,&quot;title&quot;:&quot;Google Pixel 2 y lo que nos dej\u00f3 la temporada de s\u00faper tel\u00e9fonos&quot;,&quot;description&quot;:&quot;[La semana en CNET en Espa\u00f1ol #157] La gigante de las b\u00fasquedas se anima con todo al hardware, y sus tel\u00e9fonos marcan el fin de una \u00e9poca de grandes anuncios.&quot;,&quot;slug&quot;:&quot;google-pixel-2-lo-que-nos-dejo-la-temporada-de-super-telefonos&quot;,&quot;chapters&quot;:&quot;&quot;,&quot;duration&quot;:598,&quot;hasCaptions&quot;:true,&quot;mpxId&quot;:1064365123530,&quot;mpxRefId&quot;:&quot;Us3jKld5gPd3TfSG9QLLbD5jw_vdMyds&quot;,&quot;ratingVChip&quot;:&quot;&quot;,&quot;primaryTopic&quot;:{&quot;id&quot;:&quot;&quot;},&quot;author&quot;:{&quot;id&quot;:&quot;272ff2eb-03d3-4e24-9b55-09f4633368f9&quot;,&quot;firstName&quot;:&quot;Mariana&quot;,&quot;lastName&quot;:&quot;Marcaletti&quot;},&quot;primaryCollection&quot;:{&quot;id&quot;:&quot;b45f7536-5ba2-40d8-a054-40341b279649&quot;,&quot;title&quot;:[&quot;La semana&quot;]},&quot;image&quot;:{&quot;id&quot;:&quot;d077c3c0-c88f-492f-a8a2-8b043af04f0e&quot;,&quot;name&quot;:&quot;100417-google-pixel-2-7126&quot;,&quot;filename&quot;:&quot;100417-google-pixel-2-7126.jpg&quot;,&quot;path&quot;:&quot;https:\/\/cnet4.cbsistatic.com\/img\/BNbeNYmhimN2Z_KulzpEpn0l7AI=\/2017\/10\/05\/d077c3c0-c88f-492f-a8a2-8b043af04f0e\/100417-google-pixel-2-7126.jpg&quot;,&quot;size&quot;:52547,&quot;height&quot;:467,&quot;width&quot;:830,&quot;dateCreated&quot;:{&quot;date&quot;:&quot;2017-10-05 23:35:43&quot;,&quot;timezone_type&quot;:3,&quot;timezone&quot;:&quot;UTC&quot;},&quot;dateUpdated&quot;:{&quot;date&quot;:&quot;2017-10-05 23:35:43&quot;,&quot;timezone_type&quot;:3,&quot;timezone&quot;:&quot;UTC&quot;},&quot;needsModeration&quot;:0,&quot;mimeType&quot;:&quot;image\/jpeg&quot;,&quot;deleted&quot;:0,&quot;preferred&quot;:0,&quot;watermark&quot;:0,&quot;alt&quot;:&quot;100417-google-pixel-2-7126&quot;},&quot;thumbnail&quot;:&quot;https:\/\/cdn2.cnet.com\/img\/5-e1P5u3K43hFHiSjBjhdB3f1lI=\/fit-in\/194x109\/2017\/10\/05\/d077c3c0-c88f-492f-a8a2-8b043af04f0e\/100417-google-pixel-2-7126.jpg&quot;,&quot;isVertical&quot;:false,&quot;m3u8&quot;:&quot;\/es\/videos\/manifest\/google-pixel-2-lo-que-nos-dejo-la-temporada-de-super-telefonos.m3u8&quot;,&quot;mp4&quot;:&quot;https:\/\/cnetmedia-a.akamaihd.net\/21923\/2017\/10\/06\/1064365123530\/semana_oct5_1229769_740.mp4&quot;,&quot;selector&quot;:&quot;\/es\/videos\/selector\/google-pixel-2-lo-que-nos-dejo-la-temporada-de-super-telefonos\/&quot;},{&quot;id&quot;:&quot;4bb8f3fd-304c-495e-8b83-57fcea47b89b&quot;,&quot;title&quot;:&quot;La avalancha de productos de Amazon, y tuits de 280 caracteres&quot;,&quot;description&quot;:&quot;[La semana en CNET en Espa\u00f1ol #156] Esta semana vimos nuevas bocinas de Amazon; una nueva c\u00e1mara GoPro y Twitter dijo que duplicar\u00e1 el l\u00edmite de caracteres en tuits.&quot;,&quot;slug&quot;:&quot;amazon-nuevos-productos-twitter-280-caracteres&quot;,&quot;chapters&quot;:&quot;&quot;,&quot;duration&quot;:673,&quot;hasCaptions&quot;:true,&quot;mpxId&quot;:1057969219682,&quot;mpxRefId&quot;:&quot;IUOzQ0y6ps_ludp4UH9c1EZFCsJNA7X8&quot;,&quot;ratingVChip&quot;:&quot;&quot;,&quot;primaryTopic&quot;:{&quot;id&quot;:&quot;&quot;},&quot;author&quot;:{&quot;id&quot;:&quot;272ff2eb-03d3-4e24-9b55-09f4633368f9&quot;,&quot;firstName&quot;:&quot;Mariana&quot;,&quot;lastName&quot;:&quot;Marcaletti&quot;},&quot;primaryCollection&quot;:{&quot;id&quot;:&quot;b45f7536-5ba2-40d8-a054-40341b279649&quot;,&quot;title&quot;:[&quot;La semana&quot;]},&quot;image&quot;:{&quot;id&quot;:&quot;194498de-a074-4687-ab0d-d880d5ee05de&quot;,&quot;name&quot;:&quot;amazon-spot-1&quot;,&quot;filename&quot;:&quot;amazon-spot-1.jpg&quot;,&quot;path&quot;:&quot;https:\/\/cnet4.cbsistatic.com\/img\/MLV0Q7ERz3liDf123UtGhwIuMjU=\/2017\/09\/28\/194498de-a074-4687-ab0d-d880d5ee05de\/amazon-spot-1.jpg&quot;,&quot;size&quot;:850748,&quot;height&quot;:1080,&quot;width&quot;:1920,&quot;dateCreated&quot;:{&quot;date&quot;:&quot;2017-09-28 05:39:36&quot;,&quot;timezone_type&quot;:3,&quot;timezone&quot;:&quot;UTC&quot;},&quot;dateUpdated&quot;:{&quot;date&quot;:&quot;2017-09-28 05:39:36&quot;,&quot;timezone_type&quot;:3,&quot;timezone&quot;:&quot;UTC&quot;},&quot;needsModeration&quot;:0,&quot;mimeType&quot;:&quot;image\/jpeg&quot;,&quot;deleted&quot;:0,&quot;preferred&quot;:0,&quot;watermark&quot;:0,&quot;alt&quot;:&quot;amazon-spot-1&quot;},&quot;thumbnail&quot;:&quot;https:\/\/cdn1.cnet.com\/img\/0t12kUyxiPUjjBEvghADT8bfI1Q=\/fit-in\/194x109\/2017\/09\/28\/194498de-a074-4687-ab0d-d880d5ee05de\/amazon-spot-1.jpg&quot;,&quot;isVertical&quot;:false,&quot;m3u8&quot;:&quot;\/es\/videos\/manifest\/amazon-nuevos-productos-twitter-280-caracteres.m3u8&quot;,&quot;mp4&quot;:&quot;https:\/\/cnetmedia-a.akamaihd.net\/21923\/2017\/09\/29\/1057969219682\/es_lasemana_28septiembre_1223993_740.mp4&quot;,&quot;selector&quot;:&quot;\/es\/videos\/selector\/amazon-nuevos-productos-twitter-280-caracteres\/&quot;}]">
<div>
<div> <svg><use aria-hidden="false" xlink:href="#play"></use></svg><svg><use aria-hidden="false" xlink:href="#pause"></use></svg><figure><img alt="" height="96" src="https://cdn1.cnet.com/img/mWcZaiA8Ngv61OQcpdoh6Ra9nY0=/170x96/2017/11/13/70540d7a-cbc5-4563-ab86-b5549ef68168/oneplus-5t-product-21.jpg" width="170"></img></figure></div>
- <p> <span>
+ <p><span>
<span>Reproduciendo:</span> <span>Mira esto:</span> </span> Google Assistant mejora, hay más cambios en Twitter y... </p>
- <p> <span>
+ <p><span>
8:09 <svg><use aria-hidden="false" xlink:href="#video"></use></svg></span> </p>
</div>
</div>
-
+
</div> \ No newline at end of file
diff --git a/test/test-pages/cnet/expected.html b/test/test-pages/cnet/expected.html
index 4f401da..69402b0 100644
--- a/test/test-pages/cnet/expected.html
+++ b/test/test-pages/cnet/expected.html
@@ -6,7 +6,7 @@
<figure section="shortcodeImage"><span><span itemprop="image" itemscope="" itemtype="https://schema.org/ImageObject"><img alt="" class="" height="0" src="https://cnet1.cbsistatic.com/img/nAMdBzIE1ogVw5bOBZBaiJCt3Ro=/570x0/2014/03/21/863df5d9-e8b8-4b38-851b-5e3f77f2cf0e/mark-zuckerberg-facebook-home-10671610x407.jpg" width="570"></img><meta content="https://cnet1.cbsistatic.com/img/nAMdBzIE1ogVw5bOBZBaiJCt3Ro=/570x0/2014/03/21/863df5d9-e8b8-4b38-851b-5e3f77f2cf0e/mark-zuckerberg-facebook-home-10671610x407.jpg" itemprop="url"></meta><meta content="0" itemprop="height"></meta><meta content="570" itemprop="width"></meta></span></span>
<figcaption><span><p>Facebook CEO Mark Zuckerberg, the man with the acquisition plan.</p></span><span>Photo by James Martin/CNET
</span></figcaption></figure><p>Anyone who has ever been involved in closing a billion-dollar acquisition deal will tell you that you don't go in without a clear, well thought out plan.</p>
-
+
<p>Facebook CEO Mark Zuckerberg knows a thing or two about how to seal the deal on blockbuster buys. After all, he's the man behind his company's <a href="https://www.cnet.com/news/facebook-closes-19-billion-deal-for-whatsapp/" target="_blank">$19 billion acquisition</a> of WhatsApp, he <a href="https://www.cnet.com/news/zuckerberg-did-1-billion-instagram-deal-on-his-own/" target="_blank">personally brokered</a> its $1 billion buyout of <a href="https://www.cnet.com/news/why-facebook-plunked-down-1-billion-to-buy-instagram/" target="_blank">Instagram</a> and closed the <a href="https://www.cnet.com/news/facebook-to-buy-oculus-for-2-billion/" target="_blank">$3 billion deal</a> to buy Oculus VR.</p>
<p>Zuckerberg offered a primer on the strategies he and his company employ when they see an attractive target during testimony Tuesday <a href="https://www.cnet.com/news/zenimax-sues-oculus-over-virtual-reality-rift-tech/">in a lawsuit with ZeniMax Media</a>, which accuses Oculus and Facebook of "misappropriating" trade secrets and copyright infringement. At the heart of the lawsuit is technology that helped create liftoff for virtual reality, one of the <a data-component="externalLink" href="http://www.cbsnews.com/videos/the-reality-of-the-virtual-world/" target="_blank">hottest gadget trends today.</a></p>
<p>A key Facebook approach is building a long-term relationship with your target, Zuckerberg said at the trial. These deals don't just pop up over night, he said according to a transcript reviewed by <a data-component="externalLink" href="http://www.businessinsider.com/mark-zuckerberg-explains-facebooks-acquisition-strategy-2017-1" target="_blank">Business Insider</a>. They take time to cultivate. </p>
@@ -20,7 +20,7 @@
-
+
<p>When that doesn't work, Zuckerberg said scare tactics is an effective, if undesirable, way of persuading small startups that they face a better chance of survival if they have Facebook to guide their way rather than going it alone.</p>
<blockquote>That's less my thing, but I think if you are trying to help convince people that they want to join you, helping them understand all the pain that they would have to go through to build it out independently is a valuable tactic. </blockquote>
<p>It also pays to be weary of competing suitors for your startup, Zuckerberg said, and be willing to move fast to stave off rivals and get the deal done.</p>
@@ -31,13 +31,13 @@
-
+
<p><em><strong>Tech Enabled:</strong> CNET chronicles tech's role in providing new kinds of accessibility. Check it out <a href="https://www.cnet.com/tech-enabled/">here</a>.</em><em><strong><br></br></strong></em></p>
<p><em><strong>Technically Literate:</strong> Original works of short fiction with unique perspectives on tech, exclusively on CNET. <a href="https://www.cnet.com/technically-literate/">Here</a>.</em></p>
-
+
</div> \ No newline at end of file
diff --git a/test/test-pages/cnn/expected.html b/test/test-pages/cnn/expected.html
index 66c778d..0aafe57 100644
--- a/test/test-pages/cnn/expected.html
+++ b/test/test-pages/cnn/expected.html
@@ -1,68 +1,38 @@
-<div id="storytext">
- <div id="js-ie-storytop">
-
-
-
- <div id="cnnplayer_cvp_story_0">
- <div>
- <div href="/video/news/2015/11/30/homeboy-industries-priest.cnnmoney" id="vid0" onclick="javascript:VideoPlayerManager.playVideos('cvp_story_0'); return false;"><video controls="controls" height="169" id="cvp_story_0" poster="" preload="metadata" src="http://ht3.cdn.turner.com/money/big/news/2015/11/30/homeboy-industries-priest.cnnmoney_1024x576.mp4" width="300"></video><div id="cvp_story_0_endSlate">
- <div>
- <div>
- <img alt="" height="348" src="" width="620"></img></div>
-
- </div>
- </div>
- </div>
- </div>
-
- </div>
- </div>
-
- <h2>The U.S. has long been heralded as a land of opportunity -- a place where anyone can succeed regardless of the economic class they were born into.</h2>
- <p> But a new report released on Monday by <a href="http://web.stanford.edu/group/scspi-dev/cgi-bin/" target="_blank">Stanford University's Center on Poverty and Inequality</a> calls that into question. </p>
-
- <p> The report assessed poverty levels, income and wealth inequality, economic mobility and unemployment levels among 10 wealthy countries with social welfare programs. </p>
- <div id="smartassetcontainer">
- <div>
- <div>
- <div id="smartasset-article">
- <div>
- <p>
- Powered by SmartAsset.com
- </p>
-
-
-
-
-
-
- <img src="https://smrt.as/ck"></img></div>
- </div>
- </div>
- </div>
- </div>
- <p> Among its key findings: the class you're born into matters much more in the U.S. than many of the other countries. </p>
- <p> As the <a href="http://web.stanford.edu/group/scspi-dev/cgi-bin/publications/state-union-report" target="_blank">report states</a>: "[T]he birth lottery matters more in the U.S. than in most well-off countries." </p>
-
- <p> But this wasn't the only finding that suggests the U.S. isn't quite living up to its reputation as a country where everyone has an equal chance to get ahead through sheer will and hard work. </p>
- <p> <a href="http://money.cnn.com/2016/01/11/news/economy/rich-taxes/index.html?iid=EL"><span>Related: Rich are paying more in taxes but not as much as they used to</span></a> </p>
-
- <p> The report also suggested the U.S. might not be the "jobs machine" it thinks it is, when compared to other countries. </p>
- <p> It ranked near the bottom of the pack based on the levels of unemployment among men and women of prime working age. The study determined this by taking the ratio of employed men and women between the ages of 25 and 54 compared to the total population of each country. </p>
- <p> The overall rankings of the countries were as follows:<span> <br></br>1. Finland <span> <br></br>2. Norway<span> <br></br>3. Australia <span> <br></br>4. Canada<span> <br></br>5. Germany<span> <br></br>6. France<span> <br></br>7. United Kingdom <span> <br></br>8. Italy<span> <br></br>9. Spain<span> <br></br>10. United States </span></span>
- </span>
- </span>
- </span>
- </span>
- </span>
- </span>
- </span>
- </span>
- </p>
- <p> The low ranking the U.S. received was due to its extreme levels of wealth and income inequality and the ineffectiveness of its "safety net" -- social programs aimed at reducing poverty. </p>
- <p> <a href="http://money.cnn.com/2016/01/05/news/economy/chicago-segregated/index.html?iid=EL"><span>Related: Chicago is America's most segregated city</span></a> </p>
- <p> The report concluded that the American safety net was ineffective because it provides only half the financial help people need. Additionally, the levels of assistance in the U.S. are generally lower than in other countries. </p>
-
-
- <p> <span> CNNMoney (New York) </span> <span>First published February 1, 2016: 1:28 AM ET</span> </p>
- </div> \ No newline at end of file
+<div id="readability-page-1" class="page">
+ <div id="storytext">
+ <h2>The U.S. has long been heralded as a land of opportunity -- a place where anyone can succeed regardless of the economic class they were born into.</h2>
+ <p> But a new report released on Monday by <a href="http://web.stanford.edu/group/scspi-dev/cgi-bin/" target="_blank">Stanford University's Center on Poverty and Inequality</a> calls that into question. </p>
+ <p> The report assessed poverty levels, income and wealth inequality, economic mobility and unemployment levels among 10 wealthy countries with social welfare programs. </p>
+ <div id="smartassetcontainer">
+ <div>
+ <div>
+ <div id="smartasset-article">
+ <div>
+ <p> Powered by SmartAsset.com </p>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <p> Among its key findings: the class you're born into matters much more in the U.S. than many of the other countries. </p>
+ <p> As the <a href="http://web.stanford.edu/group/scspi-dev/cgi-bin/publications/state-union-report" target="_blank">report states</a>: "[T]he birth lottery matters more in the U.S. than in most well-off countries." </p>
+ <p> But this wasn't the only finding that suggests the U.S. isn't quite living up to its reputation as a country where everyone has an equal chance to get ahead through sheer will and hard work. </p>
+ <p> <a href="http://money.cnn.com/2016/01/11/news/economy/rich-taxes/index.html?iid=EL"><span>Related: Rich are paying more in taxes but not as much as they used to</span></a> </p>
+ <p> The report also suggested the U.S. might not be the "jobs machine" it thinks it is, when compared to other countries. </p>
+ <p> It ranked near the bottom of the pack based on the levels of unemployment among men and women of prime working age. The study determined this by taking the ratio of employed men and women between the ages of 25 and 54 compared to the total population of each country. </p>
+ <p> The overall rankings of the countries were as follows:<span> <br/>1. Finland <span> <br/>2. Norway<span> <br/>3. Australia <span> <br/>4. Canada<span> <br/>5. Germany<span> <br/>6. France<span> <br/>7. United Kingdom <span> <br/>8. Italy<span> <br/>9. Spain<span> <br/>10. United States </span></span>
+ </span>
+ </span>
+ </span>
+ </span>
+ </span>
+ </span>
+ </span>
+ </span>
+ </p>
+ <p> The low ranking the U.S. received was due to its extreme levels of wealth and income inequality and the ineffectiveness of its "safety net" -- social programs aimed at reducing poverty. </p>
+ <p> <a href="http://money.cnn.com/2016/01/05/news/economy/chicago-segregated/index.html?iid=EL"><span>Related: Chicago is America's most segregated city</span></a> </p>
+ <p> The report concluded that the American safety net was ineffective because it provides only half the financial help people need. Additionally, the levels of assistance in the U.S. are generally lower than in other countries. </p>
+ <p><span> CNNMoney (New York) </span> <span>First published February 1, 2016: 1:28 AM ET</span> </p>
+ </div>
+</div> \ No newline at end of file
diff --git a/test/test-pages/daringfireball-1/expected.html b/test/test-pages/daringfireball-1/expected.html
index 6c3f154..fd7ecb2 100644
--- a/test/test-pages/daringfireball-1/expected.html
+++ b/test/test-pages/daringfireball-1/expected.html
@@ -1,10 +1,10 @@
<div id="Box">
-
-
-
+
+
+
<div id="Main">
<div>
-
+
<p>Daring Fireball is written and produced by John Gruber.</p>
<p>
<a href="http://fakehost/graphics/author/addison-bw.jpg"> <img alt="Photograph of the author." src="http://fakehost/graphics/author/addison-bw-425.jpg"></img></a>
@@ -29,10 +29,10 @@
<p>Web standards are important, and Daring Fireball adheres to them. Specifically, Daring Fireball’s HTML markup should validate as either <a href="http://www.whatwg.org/specs/web-apps/current-work/">HTML 5</a> or XHTML 4.01 Transitional, its layout is constructed using <a href="http://jigsaw.w3.org/css-validator/validator?uri=http://daringfireball.net/css/fireball_screen.css">valid CSS</a>, and its syndicated feed is <a href="http://feedvalidator.org/check?url=http%3A%2F%2Fdaringfireball.net%2Findex.xml">valid Atom</a>.</p>
<p>If Daring Fireball looks goofy in your browser, you’re likely using a shitty browser that doesn’t support web standards. Internet Explorer, I’m looking in your direction. If you complain about this, I will laugh at you, because I do not care. If, however, you are using a modern, standards-compliant browser and have trouble viewing or reading Daring Fireball, please do let me know.</p>
</div>
-
-
-
-
+
+
+
+
</div>
-
+
</div> \ No newline at end of file
diff --git a/test/test-pages/ehow-1/expected.html b/test/test-pages/ehow-1/expected.html
index 06e78cc..0e5d3b0 100644
--- a/test/test-pages/ehow-1/expected.html
+++ b/test/test-pages/ehow-1/expected.html
@@ -1,17 +1,16 @@
<div>
<header>
-
-
+
+
</header><div>
<div>
<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><img alt="Glass cloche terrariums" data-credit="Lucy Akins " longdesc="http://s3.amazonaws.com/photography.prod.demandstudios.com/16149374-814f-40bc-baf3-ca20f149f0ba.jpg" src="http://img-aws.ehowcdn.com/640/cme/photography.prod.demandstudios.com/16149374-814f-40bc-baf3-ca20f149f0ba.jpg" title="Glass cloche terrariums"></img></figure><figcaption> Glass cloche terrariums (Lucy Akins) </figcaption></div>
</div>
-
+
<div>
<div>
- <div> <span>What You'll Need:</span>
- <ul><li>Cloche</li>
+ <div> <p><span>What You'll Need:</span></p><ul><li>Cloche</li>
<li>Planter saucer, small shallow dish or desired platform</li>
<li>Floral foam oasis</li>
<li>Ruler </li>
@@ -26,80 +25,70 @@
</div>
<div>
<div>
- <div> <span>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> <p><span>Step 1</span></p><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><img alt="Dig a hole in the oasis." data-credit="Lucy Akins" src="http://img-aws.ehowcdn.com/default/cme/photography.prod.demandstudios.com/fc249ef6-4d27-41b4-8c21-15f7a8512b50.jpg"></img></figure><figcaption> Dig a hole in the oasis. (Lucy Akins) </figcaption></div>
</div>
-
-
+
+
<div>
<div>
- <div> <span>Step 2</span>
- <p>Insert your plant into the hole.</p>
+ <div> <p><span>Step 2</span></p><p>Insert your plant into the hole.</p>
</div>
<figure><img alt="Orchid in foam oasis" data-credit="Lucy Akins" src="http://img-aws.ehowcdn.com/default/cme/photography.prod.demandstudios.com/aae11d4d-a4aa-4251-a4d9-41023ebf6d84.jpg"></img></figure><figcaption> Orchid in foam oasis (Lucy Akins) </figcaption></div>
</div>
<div>
<div>
- <div> <span>Step 3</span>
- <p>You can add various plants if you wish.</p>
+ <div> <p><span>Step 3</span></p><p>You can add various plants if you wish.</p>
</div>
<figure><img alt="Various foliage" data-credit="Lucy Akins" src="http://img-aws.ehowcdn.com/default/cme/photography.prod.demandstudios.com/7afdfa1e-da74-44b5-b89c-ca8123516272.jpg"></img></figure><figcaption> Various foliage (Lucy Akins) </figcaption></div>
</div>
<div>
<div>
- <div> <span>Step 4</span>
- <p>Using floral pins, attach enough moss around the oasis to cover it.</p>
+ <div> <p><span>Step 4</span></p><p>Using floral pins, attach enough moss around the oasis to cover it.</p>
</div>
<figure><img alt="Attach moss." data-credit="Lucy Akins" src="http://img-aws.ehowcdn.com/default/cme/photography.prod.demandstudios.com/4f6612c0-316a-4c74-bb03-cb4e778f6d72.jpg"></img></figure><figcaption> Attach moss. (Lucy Akins) </figcaption></div>
</div>
<div>
<div>
- <div> <span>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> <p><span>Step 5</span></p><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><img alt="Place cloche over oasis." data-credit="Lucy Akins" src="http://img-aws.ehowcdn.com/default/cme/photography.prod.demandstudios.com/eeb1e0b4-e573-40a3-8db1-2c76f0b13b84.jpg"></img></figure><figcaption> Place cloche over oasis. (Lucy Akins) </figcaption></div>
</div>
<div>
<div>
- <div> <span>Step 6</span>
- <p>Simply pull down the moss with tweezers or insert more moss to fill in the empty spaces.</p>
+ <div> <p><span>Step 6</span></p><p>Simply pull down the moss with tweezers or insert more moss to fill in the empty spaces.</p>
</div>
<figure><img alt="Rearrange moss." data-credit="Lucy Akins" src="http://img-aws.ehowcdn.com/default/cme/photography.prod.demandstudios.com/812d4649-4152-4363-97c0-f181d02e709a.jpg"></img></figure><figcaption> Rearrange moss. (Lucy Akins) </figcaption></div>
</div>
<div>
<div>
- <div> <span>Step 7</span>
- <p>You can use any platform you wish. In this case, a small saucer was used.</p>
+ <div> <p><span>Step 7</span></p><p>You can use any platform you wish. In this case, a small saucer was used.</p>
</div>
<figure><img alt="Place cloche on a platform to sit on." data-credit="Lucy Akins" src="http://img-aws.ehowcdn.com/default/cme/photography.prod.demandstudios.com/0cb3988c-9318-47d6-bc9c-c798da1ede72.jpg"></img></figure><figcaption> Place cloche on a platform to sit on. (Lucy Akins) </figcaption></div>
</div>
<div>
<div>
- <div> <span>Step 8</span>
- <p>This particular terrarium rests on a planter saucer and features a small white pumpkin.</p>
+ <div> <p><span>Step 8</span></p><p>This particular terrarium rests on a planter saucer and features a small white pumpkin.</p>
</div>
<figure><img alt="Cloche placed on a terracotta saucer" data-credit="Lucy Akins" src="http://img-aws.ehowcdn.com/640/cme/photography.prod.demandstudios.com/e3e18f0b-ab2c-4ffb-9988-a1ea63faef8b.jpg"></img></figure><figcaption> Cloche placed on a terracotta saucer (Lucy Akins) </figcaption></div>
</div>
<div>
<div>
- <div> <span>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> <p><span>Step 9</span></p><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><img alt="Placed on a wooden slice" data-credit="Lucy Akins" src="http://img-aws.ehowcdn.com/640/cme/photography.prod.demandstudios.com/2cd79f8d-0d16-4573-8861-e47fb74b0638.jpg"></img></figure><figcaption> Placed on a wooden slice (Lucy Akins) </figcaption></div>
</div>
<div>
<div>
- <div> <span>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> <p><span>Finished Terrarium</span></p><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><img alt="Cloche terrarium" data-credit="Lucy Akins" src="http://img-aws.ehowcdn.com/640/cme/photography.prod.demandstudios.com/78670312-8636-4c42-a75c-3029f7aa6c73.jpg"></img></figure><figcaption> Cloche terrarium (Lucy Akins) </figcaption></div>
</div>
-
-
-
-
+
+
+
+
<section data-module="rcp_tombstone" id="FeaturedTombstone"><h2>Featured</h2>
-
+
</section></div> \ No newline at end of file
diff --git a/test/test-pages/ehow-2/expected.html b/test/test-pages/ehow-2/expected.html
index e7d33e8..78b990f 100644
--- a/test/test-pages/ehow-2/expected.html
+++ b/test/test-pages/ehow-2/expected.html
@@ -1,23 +1,20 @@
<section data-page-id="inlinetemplate" data-section="body" id="Body">
-
+
<header>
<div data-type="AuthorProfile">
<div>
- <a href="http://fakehost/contributor/gina_robertsgrey/" id="img-follow-tip" target="_top">
- <img data-failover="//img-aws.ehowcdn.com/60x60/ehow-cdn-assets/test15/media/images/authors/missing-author-image.png" onerror="var failover = this.getAttribute('data-failover');&#xA; if (failover) failover = failover.replace(/^https?:/,'');&#xA; var src = this.src ? this.src.replace(/^https?:/,'') : '';&#xA; if (src != failover){&#xA; this.src = failover;&#xA; }" src="http://img-aws.ehowcdn.com/60x60/cme/cme_public_images/www_demandstudios_com/sitelife.studiod.com/ver1.0/Content/images/store/9/2/d9dd6f61-b183-4893-927f-5b540e45be91.Small.jpg"></img></a>
-
+ <p><a href="http://fakehost/contributor/gina_robertsgrey/" id="img-follow-tip" target="_top">
+ <img data-failover="//img-aws.ehowcdn.com/60x60/ehow-cdn-assets/test15/media/images/authors/missing-author-image.png" onerror="var failover = this.getAttribute('data-failover');&#xA; if (failover) failover = failover.replace(/^https?:/,'');&#xA; var src = this.src ? this.src.replace(/^https?:/,'') : '';&#xA; if (src != failover){&#xA; this.src = failover;&#xA; }" src="http://img-aws.ehowcdn.com/60x60/cme/cme_public_images/www_demandstudios_com/sitelife.studiod.com/ver1.0/Content/images/store/9/2/d9dd6f61-b183-4893-927f-5b540e45be91.Small.jpg"></img></a></p>
</div>
<div data-author-url="/contributor/gina_robertsgrey/" id="author_powertip">
- <a href="http://fakehost/contributor/gina_robertsgrey/" target="_top">
- <img data-failover="//img-aws.ehowcdn.com/60x60/ehow-cdn-assets/test15/media/images/authors/missing-author-image.png" onerror="var failover = this.getAttribute('data-failover');&#xA; if (failover) failover = failover.replace(/^https?:/,'');&#xA; var src = this.src ? this.src.replace(/^https?:/,'') : '';&#xA; if (src != failover){&#xA; this.src = failover;&#xA; }" src="http://img-aws.ehowcdn.com/60x60/cme/cme_public_images/www_demandstudios_com/sitelife.studiod.com/ver1.0/Content/images/store/9/2/d9dd6f61-b183-4893-927f-5b540e45be91.Small.jpg"></img></a>
-
+ <p><a href="http://fakehost/contributor/gina_robertsgrey/" target="_top">
+ <img data-failover="//img-aws.ehowcdn.com/60x60/ehow-cdn-assets/test15/media/images/authors/missing-author-image.png" onerror="var failover = this.getAttribute('data-failover');&#xA; if (failover) failover = failover.replace(/^https?:/,'');&#xA; var src = this.src ? this.src.replace(/^https?:/,'') : '';&#xA; if (src != failover){&#xA; this.src = failover;&#xA; }" src="http://img-aws.ehowcdn.com/60x60/cme/cme_public_images/www_demandstudios_com/sitelife.studiod.com/ver1.0/Content/images/store/9/2/d9dd6f61-b183-4893-927f-5b540e45be91.Small.jpg"></img></a></p>
<p>Follow</p>
</div>
- <p>
- <time datetime="2016-09-14T07:07:00-04:00" itemprop="dateModified">Last updated September 14, 2016</time></p>
-
+ <p><time datetime="2016-09-14T07:07:00-04:00" itemprop="dateModified">Last updated September 14, 2016</time></p>
+
</div>
-
+
</header><div>
<article data-type="article"><div>
<div>
@@ -30,14 +27,13 @@
(Mike Watson Images/Moodboard/Getty)
</figcaption></div>
</div>
-
-
+
+
<span>
<span>
<div>
<div>
-<div>
-<span><p>Parties hosted at restaurants, clubhouses and country clubs eliminate the need to spend hours cleaning up once party guests have gone home. But that convenience comes with a price tag. A country club may charge as much as $2,000 for room rental and restaurant food and beverage will almost always cost more than food prepped and served at home.</p></span> </div>
+<p><span><p>Parties hosted at restaurants, clubhouses and country clubs eliminate the need to spend hours cleaning up once party guests have gone home. But that convenience comes with a price tag. A country club may charge as much as $2,000 for room rental and restaurant food and beverage will almost always cost more than food prepped and served at home.</p></span> </p>
<figure><img alt="Save money hosting the party at home." data-credit="Thomas Jackson/Digital Vision/Getty Images" data-pin-ehow-hover="true" data-pin-no-hover="true" src="http://img-aws.ehowcdn.com/640/cme/cme_public_images/www_ehow_com/cdn-write.demandstudios.com/upload/image/FE/CB/121569D2-6984-4B2F-83C4-9D2D9A27CBFE/121569D2-6984-4B2F-83C4-9D2D9A27CBFE.jpg"></img></figure><figcaption>
Thomas Jackson/Digital Vision/Getty Images </figcaption></div>
</div>
@@ -47,9 +43,8 @@
<span>
<div>
<div>
-<div>
-<span><p>Instead of hiring a DJ, use your iPod or Smartphone to spin the tunes. Both easily hook up to most speakers or mp3 compatible docks to play music from your music library. Or download Pandora, the free online radio app, and play hours of music for free.</p>
-<p>Personalize the music with a playlist of the grad’s favorite songs or songs that were big hits during his or her years in school.</p></span> </div>
+<p><span><p>Instead of hiring a DJ, use your iPod or Smartphone to spin the tunes. Both easily hook up to most speakers or mp3 compatible docks to play music from your music library. Or download Pandora, the free online radio app, and play hours of music for free.</p>
+<p>Personalize the music with a playlist of the grad’s favorite songs or songs that were big hits during his or her years in school.</p></span> </p>
<figure><img alt="Online radio can take the place of a hired DJ." data-credit="Spencer Platt/Getty Images News/Getty Images" data-pin-ehow-hover="true" data-pin-no-hover="true" src="http://img-aws.ehowcdn.com/640/cme/cme_public_images/www_ehow_com/cdn-write.demandstudios.com/upload/image/DF/FC/A05B0252-BD73-4BC7-A09A-96F0A504FCDF/A05B0252-BD73-4BC7-A09A-96F0A504FCDF.jpg"></img></figure><figcaption>
Spencer Platt/Getty Images News/Getty Images </figcaption></div>
</div>
@@ -59,20 +54,18 @@
<span>
<div>
<div>
-<div>
-<span><p>Avoid canned drinks, which guests often open, but don't finish. Serve pitchers of tap water with lemon and cucumber slices or sliced strawberries for an interesting and refreshing flavor. Opt for punches and non-alcoholic drinks for high school graduates that allow guests to dole out the exact amount they want to drink.</p></span> </div>
+<p><span><p>Avoid canned drinks, which guests often open, but don't finish. Serve pitchers of tap water with lemon and cucumber slices or sliced strawberries for an interesting and refreshing flavor. Opt for punches and non-alcoholic drinks for high school graduates that allow guests to dole out the exact amount they want to drink.</p></span> </p>
<figure><img alt="Serve drinks in pitchers, not in cans." data-credit="evgenyb/iStock/Getty Images" data-pin-ehow-hover="true" data-pin-no-hover="true" src="http://img-aws.ehowcdn.com/640/cme/cme_public_images/www_ehow_com/cdn-write.demandstudios.com/upload/image/EB/DB/8A04CCA7-3255-4225-B59A-C41441F8DBEB/8A04CCA7-3255-4225-B59A-C41441F8DBEB.jpg"></img></figure><figcaption>
evgenyb/iStock/Getty Images </figcaption></div>
</div>
-
+
</span>
</span>
<span>
<span>
<div>
<div>
-<div>
-<span><p>Instead of inviting everyone you – and the graduate – know or ever knew, scale back the guest list. Forgo inviting guests that you or your grad haven't seen for eons. There is no reason to provide provisions for people who are essentially out of your lives. Sticking to a small, but personal, guest list allows more time to mingle with loved ones during the party, too.</p></span> </div>
+<p><span><p>Instead of inviting everyone you – and the graduate – know or ever knew, scale back the guest list. Forgo inviting guests that you or your grad haven't seen for eons. There is no reason to provide provisions for people who are essentially out of your lives. Sticking to a small, but personal, guest list allows more time to mingle with loved ones during the party, too.</p></span> </p>
<figure><img alt="Limit guests to those close to the graduate." data-credit="Kane Skennar/Photodisc/Getty Images" data-pin-ehow-hover="true" data-pin-no-hover="true" src="http://img-aws.ehowcdn.com/640/cme/cme_public_images/www_ehow_com/cdn-write.demandstudios.com/upload/image/94/10/08035476-0167-4A03-AADC-13A7E7AA1094/08035476-0167-4A03-AADC-13A7E7AA1094.jpg"></img></figure><figcaption>
Kane Skennar/Photodisc/Getty Images </figcaption></div>
</div>
@@ -82,8 +75,7 @@
<span>
<div>
<div>
-<div>
-<span><p>See if your grad and his best friend, girlfriend or close family member would consider hosting a joint party. You can split some of the expenses, especially when the two graduates share mutual friends. You'll also have another parent to bounce ideas off of and to help you stick to your budget when you're tempted to splurge.</p></span> </div>
+<p><span><p>See if your grad and his best friend, girlfriend or close family member would consider hosting a joint party. You can split some of the expenses, especially when the two graduates share mutual friends. You'll also have another parent to bounce ideas off of and to help you stick to your budget when you're tempted to splurge.</p></span> </p>
<figure><img alt="Throw a joint bash for big savings." data-credit="Mike Watson Images/Moodboard/Getty" data-pin-ehow-hover="true" data-pin-no-hover="true" src="http://img-aws.ehowcdn.com/640/cme/cme_public_images/www_ehow_com/cdn-write.demandstudios.com/upload/image/06/49/4AD62696-FC95-4DA2-8351-42740C7B4906/4AD62696-FC95-4DA2-8351-42740C7B4906.jpg"></img></figure><figcaption>
Mike Watson Images/Moodboard/Getty </figcaption></div>
</div>
@@ -93,9 +85,8 @@
<span>
<div>
<div>
-<div>
-<span><p>Skip carving stations of prime rib and jumbo shrimp as appetizers, especially for high school graduation parties. Instead, serve some of the graduate's favorite side dishes that are cost effective, like a big pot of spaghetti with breadsticks. Opt for easy and simple food such as pizza, finger food and mini appetizers. </p>
-<p>Avoid pre-packaged foods and pre-made deli platters. These can be quite costly. Instead, make your own cheese and deli platters for less than half the cost of pre-made.</p></span> </div>
+<p><span><p>Skip carving stations of prime rib and jumbo shrimp as appetizers, especially for high school graduation parties. Instead, serve some of the graduate's favorite side dishes that are cost effective, like a big pot of spaghetti with breadsticks. Opt for easy and simple food such as pizza, finger food and mini appetizers. </p>
+<p>Avoid pre-packaged foods and pre-made deli platters. These can be quite costly. Instead, make your own cheese and deli platters for less than half the cost of pre-made.</p></span> </p>
<figure><img alt="Cost effective appetizers are just as satisfying as pre-made deli platters." data-credit="Mark Stout/iStock/Getty Images" data-pin-ehow-hover="true" data-pin-no-hover="true" src="http://img-aws.ehowcdn.com/640/cme/cme_public_images/www_ehow_com/cdn-write.demandstudios.com/upload/image/D0/51/B6AED06C-5E19-4A26-9AAD-0E175F6251D0/B6AED06C-5E19-4A26-9AAD-0E175F6251D0.jpg"></img></figure><figcaption>
Mark Stout/iStock/Getty Images </figcaption></div>
</div>
@@ -105,35 +96,33 @@
<span>
<div>
<div>
-<div>
-<span><p>Instead of an evening dinner party, host a grad lunch or all appetizers party. Brunch and lunch fare or finger food costs less than dinner. Guests also tend to consume less alcohol in the middle of the day, which keeps cost down.</p></span> </div>
+<p><span><p>Instead of an evening dinner party, host a grad lunch or all appetizers party. Brunch and lunch fare or finger food costs less than dinner. Guests also tend to consume less alcohol in the middle of the day, which keeps cost down.</p></span> </p>
<figure><img alt="A brunch gathering will cost less than a dinner party." data-credit="Mark Stout/iStock/Getty Images" data-pin-ehow-hover="true" data-pin-no-hover="true" src="http://img-aws.ehowcdn.com/640/cme/cme_public_images/www_ehow_com/cdn-write.demandstudios.com/upload/image/35/B4/DD5FD05A-B631-4AFE-BC8F-FDACAD1EB435/DD5FD05A-B631-4AFE-BC8F-FDACAD1EB435.jpg"></img></figure><figcaption>
Mark Stout/iStock/Getty Images </figcaption></div>
</div>
-
-
+
+
</span>
</span>
<span>
<span>
<div>
<div>
-<div>
-<span><p>Decorate your party in the graduate's current school colors or the colors of the school he or she will be headed to next. Décor that is not specifically graduation-themed may cost a bit less, and any leftovers can be re-used for future parties, picnics and events.</p></span> </div>
+<p><span><p>Decorate your party in the graduate's current school colors or the colors of the school he or she will be headed to next. Décor that is not specifically graduation-themed may cost a bit less, and any leftovers can be re-used for future parties, picnics and events.</p></span> </p>
<figure><img alt="Theme the party by color without graduation-specific decor." data-credit="jethuynh/iStock/Getty Images" data-pin-ehow-hover="true" data-pin-no-hover="true" src="http://img-aws.ehowcdn.com/640/cme/cme_public_images/www_ehow_com/cdn-write.demandstudios.com/upload/image/A1/FA/2C368B34-8F6A-45F6-9DFC-0B0C4E33FAA1/2C368B34-8F6A-45F6-9DFC-0B0C4E33FAA1.jpg"></img></figure><figcaption>
jethuynh/iStock/Getty Images </figcaption></div>
</div>
</span>
</span>
-
-
+
+
<h2>
<a href="https://www.google.com/adsense/support/bin/request.py?contact=abg_afc&amp;url=http://ehow.com/&amp;hl=en&amp;client=ehow&amp;gl=US" target="_blank">Related Searches</a>
</h2>
-
-
+
+
<p>Promoted By Zergnet</p>
</article></div>
-
-
+
+
</section> \ No newline at end of file
diff --git a/test/test-pages/engadget/expected.html b/test/test-pages/engadget/expected.html
index b39adbb..f80f9a4 100644
--- a/test/test-pages/engadget/expected.html
+++ b/test/test-pages/engadget/expected.html
@@ -1,488 +1,265 @@
-<div><nav data-behavior="ContextNav" data-context-nav-offset="200">
- </nav><header>
- <p>
-
- <h2> But only hardcore
- gamers will appreciate it. </h2>
- </p>
+<div id="readability-page-1" class="page">
+ <div data-nav-drawer-slide-panel="">
+ <main role="main">
+ <nav data-behavior="ContextNav" data-context-nav-offset="200"> </nav>
+ <header>
+ <p>
+ <h2> But only hardcore gamers will appreciate it. </h2>
+ </p>
+ <div>
<div>
<div>
<div>
-
- <div>
- <div><a href="http://fakehost/about/editors/devindra-hardawar/">
- <img src="https://o.aolcdn.com/images/dims?thumbnail=45%2C45&amp;quality=80&amp;image_uri=http%3A%2F%2Fwww.blogcdn.com%2Fwww.engadget.com%2Fmedia%2F2016%2F03%2Fdevindra-engadget-headshot-small.jpg&amp;client=cbc79c14efcebee57402&amp;signature=e6ffba7468c380581b6589a70ce5d7c1ec40cd1d"></img></a></div>
- </div>
-
+ <p><a href="http://fakehost/about/editors/devindra-hardawar/">
+ <img src="https://o.aolcdn.com/images/dims?thumbnail=45%2C45&amp;quality=80&amp;image_uri=http%3A%2F%2Fwww.blogcdn.com%2Fwww.engadget.com%2Fmedia%2F2016%2F03%2Fdevindra-engadget-headshot-small.jpg&amp;client=cbc79c14efcebee57402&amp;signature=e6ffba7468c380581b6589a70ce5d7c1ec40cd1d"/>
+ </a></p>
</div>
-
- <p>
- <span>2192</span> <span>Shares</span></p>
-
</div>
+ <p><span>2192</span> <span>Shares</span></p>
</div>
- </header><div data-behavior="BreakoutsHandler">
+ </div>
+ </header>
+ <div data-behavior="BreakoutsHandler">
+ <div>
<div>
-
- <div>
- <article><div data-behavior="trigger_contents_nav" id="page_body">
- <div>
-
- <div data-behavior="FitVids ">
-
-
+ <article>
+ <div id="page_body" data-behavior="trigger_contents_nav">
+ <div>
+ <div data-behavior="FitVids ">
+ <div>
<div>
<div>
- <div>
- <div data-behavior="Dropcap">
- <p>The <a href="https://www.engadget.com/2017/06/13/the-xbox-one-x-is-aspirational-in-the-purest-sense-of-the-word/">Xbox
- One X</a> is the ultimate video game system. It sports
- more horsepower than any system ever. And it plays more
- titles in native 4K than <a href="https://www.engadget.com/2016/11/07/sony-playstation-4-pro-review/">Sony's
- PlayStation 4 Pro</a>. It's just about everything
- you could want without investing in a gaming PC. The
- only problem? It's now been a year since the PS4 Pro
- launched, and the One X costs $500, while Sony's console
- launched at $400. That high price limits the Xbox One X
- to diehard Microsoft fans who don't mind paying a bit
- more to play the console's exclusive titles in 4K.
- Everyone else might be better off waiting, or opting for
- the $279 <a href="https://www.engadget.com/2016/08/02/xbox-one-s-review/">Xbox
+ <p>The <a href="https://www.engadget.com/2017/06/13/the-xbox-one-x-is-aspirational-in-the-purest-sense-of-the-word/">Xbox
+ One X</a> is the ultimate video game system. It sports more horsepower than any system ever. And it plays more titles in native 4K than <a href="https://www.engadget.com/2016/11/07/sony-playstation-4-pro-review/">Sony's
+ PlayStation 4 Pro</a>. It's just about everything you could want without investing in a gaming PC. The only problem? It's now been a year since the PS4 Pro launched, and the One X costs $500, while Sony's console launched at $400. That high price limits the Xbox One X to diehard Microsoft fans who don't mind paying a bit more to play the console's exclusive titles in 4K. Everyone else might be better off waiting, or opting for the $279 <a href="https://www.engadget.com/2016/08/02/xbox-one-s-review/">Xbox
One S</a>. </p>
-
- </div>
- </div>
</div>
</div>
-
+ </div>
+ <div>
<div>
<div>
- <div>
- <section><h4> Gallery: Xbox One
- X | 14 Photos </h4>
- <div data-behavior="lightbox_trigger" data-eng-bang="{&quot;gallery&quot;:803271,&quot;slide&quot;:7142088,&quot;index&quot;:0}" data-eng-mn="93511844" data-engadget-slideshow-id="803271"><a data-eng-bang="{&quot;gallery&quot;:803271,&quot;slide&quot;:7142088,&quot;index&quot;:0}" data-engadget-slide-id="7142088" data-index="0" href="#">
- <img src="https://o.aolcdn.com/images/dims?thumbnail=980%2C653&amp;quality=80&amp;image_uri=https%3A%2F%2Fs.blogcdn.com%2Fslideshows%2Fimages%2Fslides%2F714%2F208%2F8%2FS7142088%2Fslug%2Fl%2Fxbox-one-x-review-gallery-1-1.jpg&amp;client=cbc79c14efcebee57402&amp;signature=9bb08b52e12de8e4060f863a52c613489529818d"></img></a>
- <p>
- <svg><use xlink:href="#icon-slideshow"></use></svg>
- 14
- </p>
- </div>
- </section></div>
+ <section>
+ <h4> Gallery: Xbox One X | 14 Photos </h4>
+ <div data-behavior="lightbox_trigger" data-engadget-slideshow-id="803271" data-eng-bang="{&quot;gallery&quot;:803271,&quot;slide&quot;:7142088,&quot;index&quot;:0}" data-eng-mn="93511844">
+ <p><a href="#" data-index="0" data-engadget-slide-id="7142088" data-eng-bang="{&quot;gallery&quot;:803271,&quot;slide&quot;:7142088,&quot;index&quot;:0}">
+ <img src="https://o.aolcdn.com/images/dims?thumbnail=980%2C653&amp;quality=80&amp;image_uri=https%3A%2F%2Fs.blogcdn.com%2Fslideshows%2Fimages%2Fslides%2F714%2F208%2F8%2FS7142088%2Fslug%2Fl%2Fxbox-one-x-review-gallery-1-1.jpg&amp;client=cbc79c14efcebee57402&amp;signature=9bb08b52e12de8e4060f863a52c613489529818d"/>
+ </a></p>
+ </div>
+ </section>
</div>
</div>
-
-
+ </div>
+ <div>
<div>
<div>
<div>
-
-
<div>
-
<div>
- <div>
-
- <ul><li>Most
- powerful hardware ever in a home console
- </li>
- <li>Solid
- selection of enhanced titles
- </li>
- <li>4K Blu-ray
- drive is great for movie fans
- </li>
- </ul></div>
- <div>
-
- <ul><li>Expensive
- </li>
- <li>Not worth
- it if you don’t have a 4K TV
- </li>
- <li>Still no VR
- support
- </li>
- </ul></div>
+ <ul>
+ <li>Most powerful hardware ever in a home console </li>
+ <li>Solid selection of enhanced titles </li>
+ <li>4K Blu-ray drive is great for movie fans </li>
+ </ul>
+ </div>
+ <div>
+ <ul>
+ <li>Expensive </li>
+ <li>Not worth it if you don’t have a 4K TV </li>
+ <li>Still no VR support </li>
+ </ul>
</div>
</div>
- <div>
-
- <p>As promised, the Xbox One X is the
- most powerful game console ever. In practice, though, it
- really just puts Microsoft on equal footing with Sony’s
- PlayStation 4 Pro. 4K/HDR enhanced games look great, but
- it’s lack of VR is disappointing in 2017.</p>
- </div>
+ </div>
+ <div>
+ <p>As promised, the Xbox One X is the most powerful game console ever. In practice, though, it really just puts Microsoft on equal footing with Sony’s PlayStation 4 Pro. 4K/HDR enhanced games look great, but it’s lack of VR is disappointing in 2017.</p>
</div>
</div>
</div>
+ </div>
+ <div>
<div>
-
<div>
<div>
<div>
- <div>
- <h3>Hardware</h3>
- <p><img alt="" data-credit="Devindra Hardawar/AOL" data-mep="2181678" src="https://o.aolcdn.com/images/dims?crop=1600%2C1067%2C0%2C0&amp;quality=85&amp;format=jpg&amp;resize=1600%2C1067&amp;image_uri=http%3A%2F%2Fo.aolcdn.com%2Fhss%2Fstorage%2Fmidas%2F93beb86758ae1cf95721699e1e006e35%2F205826074%2FXbox%2BOne%2BX%2Breview%2Bgallery%2B7.jpg&amp;client=a1acac3e1b3290917d92&amp;signature=c0f2d36259c2c1decfb60aae364527cda2560d4a"></img></p>
- <p>Despite all the power inside, the One X is
- Microsoft's smallest console to date. It looks
- similar to the Xbox One S, except it has an entirely
- matte black case and is slightly slimmer. It's also
- surprisingly dense -- the console weighs 8.4 pounds,
- but it feels far heavier than you'd expect for its
- size, thanks to all of its new hardware. The One S,
- in comparison, weighs two pounds less.</p>
- <p>The Xbox One X's real upgrades are under the hood. It
- features an 8-core CPU running at 2.3Ghz, 12GB of
- GDDR5 RAM, a 1 terabyte hard drive and an upgraded
- AMD Polaris GPU with 6 teraflops of computing power.
- The PS4 Pro has only 8GB of RAM and tops out at 4.2
- teraflops. Microsoft's console is clearly faster.
- That additional horsepower means the Xbox One X can
- run more games in full native 4K than the Sony's
- console.</p>
- <p><img alt="" data-credit="Devindra Hardawar/AOL" data-mep="2182489" src="https://o.aolcdn.com/images/dims?crop=1600%2C949%2C0%2C0&amp;quality=85&amp;format=jpg&amp;resize=1600%2C949&amp;image_uri=http%3A%2F%2Fo.aolcdn.com%2Fhss%2Fstorage%2Fmidas%2F9ece7fdad1e7025dec06ac9bf98688d0%2F205826075%2FXbox%2BOne%2BX%2Breview%2Bgallery%2B5.jpg&amp;client=a1acac3e1b3290917d92&amp;signature=9913883753141e7df322616bfe0bc41c6ecd80c8"></img></p>
- <p>Along the front, there's the slot-loading 4K Blu-ray
- drive, a physical power button, a single USB port
- and a controller pairing button. And around back,
- there are HDMI out and in ports, the latter of which
- lets you plug in your cable box. Additionally, there
- are two USB ports, connections for optical audio, IR
- out, and gigabit Ethernet. If you've still got a
- Kinect around, you'll need to use a USB adapter to
- plug it in.</p>
- </div>
+ <h3>Hardware</h3>
+ <p><img data-credit="Devindra Hardawar/AOL" data-mep="2181678" src="https://o.aolcdn.com/images/dims?crop=1600%2C1067%2C0%2C0&amp;quality=85&amp;format=jpg&amp;resize=1600%2C1067&amp;image_uri=http%3A%2F%2Fo.aolcdn.com%2Fhss%2Fstorage%2Fmidas%2F93beb86758ae1cf95721699e1e006e35%2F205826074%2FXbox%2BOne%2BX%2Breview%2Bgallery%2B7.jpg&amp;client=a1acac3e1b3290917d92&amp;signature=c0f2d36259c2c1decfb60aae364527cda2560d4a" alt="" /></p>
+ <p>Despite all the power inside, the One X is Microsoft's smallest console to date. It looks similar to the Xbox One S, except it has an entirely matte black case and is slightly slimmer. It's also surprisingly dense -- the console weighs 8.4 pounds, but it feels far heavier than you'd expect for its size, thanks to all of its new hardware. The One S, in comparison, weighs two pounds less.</p>
+ <p>The Xbox One X's real upgrades are under the hood. It features an 8-core CPU running at 2.3Ghz, 12GB of GDDR5 RAM, a 1 terabyte hard drive and an upgraded AMD Polaris GPU with 6 teraflops of computing power. The PS4 Pro has only 8GB of RAM and tops out at 4.2 teraflops. Microsoft's console is clearly faster. That additional horsepower means the Xbox One X can run more games in full native 4K than the Sony's console.</p>
+ <p><img data-credit="Devindra Hardawar/AOL" data-mep="2182489" src="https://o.aolcdn.com/images/dims?crop=1600%2C949%2C0%2C0&amp;quality=85&amp;format=jpg&amp;resize=1600%2C949&amp;image_uri=http%3A%2F%2Fo.aolcdn.com%2Fhss%2Fstorage%2Fmidas%2F9ece7fdad1e7025dec06ac9bf98688d0%2F205826075%2FXbox%2BOne%2BX%2Breview%2Bgallery%2B5.jpg&amp;client=a1acac3e1b3290917d92&amp;signature=9913883753141e7df322616bfe0bc41c6ecd80c8" alt="" /></p>
+ <p>Along the front, there's the slot-loading 4K Blu-ray drive, a physical power button, a single USB port and a controller pairing button. And around back, there are HDMI out and in ports, the latter of which lets you plug in your cable box. Additionally, there are two USB ports, connections for optical audio, IR out, and gigabit Ethernet. If you've still got a Kinect around, you'll need to use a USB adapter to plug it in.</p>
</div>
</div>
</div>
+ </div>
+ <div>
<div>
- <div>
-
-
- <div data-engadget-breakout-type="image">
- <figure><img src="https://o.aolcdn.com/images/dims?resize=980%2C640&amp;quality=100&amp;image_uri=https%3A%2F%2Fo.aolcdn.com%2Fimages%2Fdims%3Fcrop%3D1599%252C1043%252C0%252C0%26quality%3D85%26format%3Djpg%26resize%3D1600%252C1043%26image_uri%3Dhttp%253A%252F%252Fo.aolcdn.com%252Fhss%252Fstorage%252Fmidas%252F8b98ec8f6649158fe7448ac2f2695ac5%252F205826072%252FXbox%252BOne%252BX%252Breview%252Bgallery%252B6.jpg%26client%3Da1acac3e1b3290917d92%26signature%3D353dad1308f98c2c9dfc82c58a540a8b2f1fe63c&amp;client=cbc79c14efcebee57402&amp;signature=60b7c061460d0d45f5d367b8a9c62978af6b76ce"></img><figcaption><span>Devindra Hardawar/AOL</span>
- </figcaption></figure></div>
+ <div data-engadget-breakout-type="image">
+ <figure><img src="https://o.aolcdn.com/images/dims?resize=980%2C640&amp;quality=100&amp;image_uri=https%3A%2F%2Fo.aolcdn.com%2Fimages%2Fdims%3Fcrop%3D1599%252C1043%252C0%252C0%26quality%3D85%26format%3Djpg%26resize%3D1600%252C1043%26image_uri%3Dhttp%253A%252F%252Fo.aolcdn.com%252Fhss%252Fstorage%252Fmidas%252F8b98ec8f6649158fe7448ac2f2695ac5%252F205826072%252FXbox%252BOne%252BX%252Breview%252Bgallery%252B6.jpg%26client%3Da1acac3e1b3290917d92%26signature%3D353dad1308f98c2c9dfc82c58a540a8b2f1fe63c&amp;client=cbc79c14efcebee57402&amp;signature=60b7c061460d0d45f5d367b8a9c62978af6b76ce" />
+ <figcaption><span>Devindra Hardawar/AOL</span> </figcaption>
+ </figure>
</div>
</div>
+ </div>
+ <div>
<div>
<div>
<div>
- <div>
- <p>The console's controller hasn't changed since its
- last mini-upgrade with the Xbox One S. That revision
- rounded out its seams, improved bumper performance
- and added a 3.5mm headphone jack. It's still a great
- controller, though I'm annoyed Microsoft is sticking
- with AA batteries as their default power source.
- Sure, you could just pick up some renewable
- batteries, or the Play and Charge kit, but that's an
- extra expense. And manually swapping batteries feels
- like a bad user experience when every other console
- has rechargeable controllers.</p>
- <h3>In use</h3>
- </div>
+ <p>The console's controller hasn't changed since its last mini-upgrade with the Xbox One S. That revision rounded out its seams, improved bumper performance and added a 3.5mm headphone jack. It's still a great controller, though I'm annoyed Microsoft is sticking with AA batteries as their default power source. Sure, you could just pick up some renewable batteries, or the Play and Charge kit, but that's an extra expense. And manually swapping batteries feels like a bad user experience when every other console has rechargeable controllers.</p>
+ <h3>In use</h3>
</div>
</div>
</div>
+ </div>
+ <div>
<div>
- <div>
-
-
- <div data-engadget-breakout-type="image">
- <figure><img src="https://o.aolcdn.com/images/dims?resize=980%2C640&amp;quality=100&amp;image_uri=https%3A%2F%2Fo.aolcdn.com%2Fimages%2Fdims%3Fcrop%3D1600%252C900%252C0%252C0%26quality%3D85%26format%3Djpg%26resize%3D1600%252C900%26image_uri%3Dhttp%253A%252F%252Fo.aolcdn.com%252Fhss%252Fstorage%252Fmidas%252F1885534bd201fc37481b806645c1fc8b%252F205828119%252FXbox%252Bone%252BX%252Bscreenshot%252Bgallery%252B8.jpg%26client%3Da1acac3e1b3290917d92%26signature%3Df63cf67c88b37fd9424855984e45f6b950c8c11a&amp;client=cbc79c14efcebee57402&amp;signature=0adca80fc8ee26a7353be639082881450a5ad49f"></img><figcaption><span>Devindra Hardawar/AOL</span>
- </figcaption></figure></div>
+ <div data-engadget-breakout-type="image">
+ <figure><img src="https://o.aolcdn.com/images/dims?resize=980%2C640&amp;quality=100&amp;image_uri=https%3A%2F%2Fo.aolcdn.com%2Fimages%2Fdims%3Fcrop%3D1600%252C900%252C0%252C0%26quality%3D85%26format%3Djpg%26resize%3D1600%252C900%26image_uri%3Dhttp%253A%252F%252Fo.aolcdn.com%252Fhss%252Fstorage%252Fmidas%252F1885534bd201fc37481b806645c1fc8b%252F205828119%252FXbox%252Bone%252BX%252Bscreenshot%252Bgallery%252B8.jpg%26client%3Da1acac3e1b3290917d92%26signature%3Df63cf67c88b37fd9424855984e45f6b950c8c11a&amp;client=cbc79c14efcebee57402&amp;signature=0adca80fc8ee26a7353be639082881450a5ad49f" />
+ <figcaption><span>Devindra Hardawar/AOL</span> </figcaption>
+ </figure>
</div>
</div>
+ </div>
+ <div>
<div>
<div>
<div>
- <div>
- <p>You won't find any major differences between the One
- X and the last Xbox at first — aside from a more
- dramatic startup sequence. Navigating the Xbox
- interface is fast and zippy, but mostly that's due
- to a recent OS upgrade. If you're moving over from
- an older Xbox One, you can use the backup tool to
- transfer your games and settings to an external hard
- drive. Just plug that into the new console during
- setup and it'll make it feel just like your old
- machine. It's also a lot faster than waiting for
- everything to download from Xbox Live.</p>
- <p>You'll still have to set aside some time if you want
- to play an Xbox One X-enhanced title, though. Those
- 4K textures will make games significantly larger,
- but Microsoft says it's come up with a few ways to
- help developers make downloading them more
- efficient. For example, language packs and other
- optional content won't get installed by default.</p>
- <p>We only had a few enhanced titles to test out during
- our review: <em>Gears of War 4</em>, <em>Killer
- Instinct</em> and <em>Super Lucky's Tale</em>.
- They each took advantage of the console in different
- ways. <em>Gears of War 4</em> runs natively in 4K at
- 30 FPS with Dolby Atmos and HDR (high dynamic range
- lighting) support. It looked great -- especially
- with HDR, which highlighted bright elements like
- lightning strikes -- but I noticed the frame rate
- dip occasionally. I was also surprised that load
- times were on-par with what I've seen with the game
- on the Xbox One S.</p>
- </div>
+ <p>You won't find any major differences between the One X and the last Xbox at first — aside from a more dramatic startup sequence. Navigating the Xbox interface is fast and zippy, but mostly that's due to a recent OS upgrade. If you're moving over from an older Xbox One, you can use the backup tool to transfer your games and settings to an external hard drive. Just plug that into the new console during setup and it'll make it feel just like your old machine. It's also a lot faster than waiting for everything to download from Xbox Live.</p>
+ <p>You'll still have to set aside some time if you want to play an Xbox One X-enhanced title, though. Those 4K textures will make games significantly larger, but Microsoft says it's come up with a few ways to help developers make downloading them more efficient. For example, language packs and other optional content won't get installed by default.</p>
+ <p>We only had a few enhanced titles to test out during our review: <em>Gears of War 4</em>, <em>Killer
+ Instinct</em> and <em>Super Lucky's Tale</em>. They each took advantage of the console in different ways. <em>Gears of War 4</em> runs natively in 4K at 30 FPS with Dolby Atmos and HDR (high dynamic range lighting) support. It looked great -- especially with HDR, which highlighted bright elements like lightning strikes -- but I noticed the frame rate dip occasionally. I was also surprised that load times were on-par with what I've seen with the game on the Xbox One S.</p>
</div>
</div>
</div>
+ </div>
+ <div>
<div>
- <div>
- <div data-engadget-breakout-type="e2ehero">
-
+ <div data-engadget-breakout-type="e2ehero">
+ <div>
<div>
<div>
<div>
- <div>
-
- <figure><img src="https://o.aolcdn.com/images/dims?crop=1600%2C900%2C0%2C0&amp;quality=85&amp;format=jpg&amp;resize=1600%2C900&amp;image_uri=http%3A%2F%2Fo.aolcdn.com%2Fhss%2Fstorage%2Fmidas%2F8352a8a14e88e2ca2ba5be4d8381a055%2F205828115%2FXbox%2Bone%2BX%2Bscreenshot%2Bgallery%2B1.jpg&amp;client=a1acac3e1b3290917d92&amp;signature=d2ccb22e0eaabeb05bfe46e83dbe26fd07f01da8"></img><div>
- <div>
- <div>
-
- </div>
- </div>
+ <figure><img src="https://o.aolcdn.com/images/dims?crop=1600%2C900%2C0%2C0&amp;quality=85&amp;format=jpg&amp;resize=1600%2C900&amp;image_uri=http%3A%2F%2Fo.aolcdn.com%2Fhss%2Fstorage%2Fmidas%2F8352a8a14e88e2ca2ba5be4d8381a055%2F205828115%2FXbox%2Bone%2BX%2Bscreenshot%2Bgallery%2B1.jpg&amp;client=a1acac3e1b3290917d92&amp;signature=d2ccb22e0eaabeb05bfe46e83dbe26fd07f01da8" />
+ <div>
+ <div>
+ <div> </div>
</div>
- </figure></div>
+ </div>
+ </figure>
</div>
</div>
</div>
</div>
</div>
</div>
+ </div>
+ <div>
<div>
<div>
<div>
- <div>
- <p>You can also play in Performance mode, which bumps
- the frame rate up to 60FPS and uses higher quality
- graphical effects, while rendering it lower in
- 1080p. Personally, I preferred this, since it makes
- the game much smoother -- as if you're playing it on
- a high-end gaming PC, not a console. Some
- PlayStation 4 Pro games also let you choose how you
- wanted to distribute its power, so in some ways
- Microsoft is just following in its footsteps.</p>
- <p>I've been playing <em>Gears of War 4</em> on my
- gaming PC (which is connected to my home theater)
- over the past year, and I was impressed that the
- Xbox One X is able to deliver a similar experience.
- It didn't quite match my rig though, which is
- powered by Intel Core i7 4790k CPU running at 4GHz,
- 16GB DDR3 RAM and an NVIDIA GTX 1080 GPU. Typically,
- I play at 1,440p (2,560 by 1,440 pixels) with HDR
- and all of the graphical settings set to their
- highest level, and I can easily maintain a 60FPS
- frame rate. The One X felt just as solid at 1080p,
- but there were clearly plenty of graphics settings
- it couldn't take advantage of, in particular higher
- levels of bloom lighting and shadow detail.</p>
-
- </div>
+ <p>You can also play in Performance mode, which bumps the frame rate up to 60FPS and uses higher quality graphical effects, while rendering it lower in 1080p. Personally, I preferred this, since it makes the game much smoother -- as if you're playing it on a high-end gaming PC, not a console. Some PlayStation 4 Pro games also let you choose how you wanted to distribute its power, so in some ways Microsoft is just following in its footsteps.</p>
+ <p>I've been playing <em>Gears of War 4</em> on my gaming PC (which is connected to my home theater) over the past year, and I was impressed that the Xbox One X is able to deliver a similar experience. It didn't quite match my rig though, which is powered by Intel Core i7 4790k CPU running at 4GHz, 16GB DDR3 RAM and an NVIDIA GTX 1080 GPU. Typically, I play at 1,440p (2,560 by 1,440 pixels) with HDR and all of the graphical settings set to their highest level, and I can easily maintain a 60FPS frame rate. The One X felt just as solid at 1080p, but there were clearly plenty of graphics settings it couldn't take advantage of, in particular higher levels of bloom lighting and shadow detail.</p>
</div>
</div>
</div>
-
+ </div>
+ <div>
<div>
- <div>
- <div data-engadget-breakout-type="gallery">
- <section><h3> Gallery: Xbox
- One X screenshots | 9 Photos </h3>
- <div data-behavior="lightbox_trigger" data-eng-bang="{&quot;gallery&quot;:803330,&quot;slide&quot;:7142924}" data-eng-mn="93511844" data-engadget-slideshow-id="803330"><a data-eng-bang="{&quot;gallery&quot;:803330,&quot;slide&quot;:7142924}" data-engadget-slide-id="7142924" data-index="0" href="#">
- <img src="https://o.aolcdn.com/images/dims?thumbnail=980%2C653&amp;quality=80&amp;image_uri=https%3A%2F%2Fs.blogcdn.com%2Fslideshows%2Fimages%2Fslides%2F714%2F292%2F4%2FS7142924%2Fslug%2Fl%2Fxbox-one-x-screenshot-gallery-2-1.jpg&amp;client=cbc79c14efcebee57402&amp;signature=38c95635c7aad58a8a48038e05589f5cf35b1e28"></img></a>
- <p>
- <svg><use xlink:href="#icon-slideshow"></use></svg>
- 9
- </p>
- </div>
- </section></div>
+ <div data-engadget-breakout-type="gallery">
+ <section>
+ <h3> Gallery: Xbox One X screenshots | 9 Photos </h3>
+ <div data-behavior="lightbox_trigger" data-engadget-slideshow-id="803330" data-eng-bang="{&quot;gallery&quot;:803330,&quot;slide&quot;:7142924}" data-eng-mn="93511844">
+ <p><a href="#" data-index="0" data-engadget-slide-id="7142924" data-eng-bang="{&quot;gallery&quot;:803330,&quot;slide&quot;:7142924}">
+ <img src="https://o.aolcdn.com/images/dims?thumbnail=980%2C653&amp;quality=80&amp;image_uri=https%3A%2F%2Fs.blogcdn.com%2Fslideshows%2Fimages%2Fslides%2F714%2F292%2F4%2FS7142924%2Fslug%2Fl%2Fxbox-one-x-screenshot-gallery-2-1.jpg&amp;client=cbc79c14efcebee57402&amp;signature=38c95635c7aad58a8a48038e05589f5cf35b1e28"/>
+ </a></p>
+ </div>
+ </section>
</div>
</div>
+ </div>
+ <div>
<div>
<div>
<div>
- <div>
- <p><em>Killer Instinct</em> and <em>Super Lucky's
- Tale</em> run in 4K at a smooth 60FPS. They both
- looked and played better than their standard
- versions, though I was surprised they didn't take
- advantage of HDR. As usual, I noticed the
- improvement in frame rates more than the higher
- resolution. Unless you're sitting very close to a TV
- above 50-inches, you'd likely have a hard time
- telling between 4K and 1080p.</p>
- <p>That poses a problem for Microsoft: It's betting that
- gamers will actually want true 4K rendering. In
- practice, though, PlayStation 4 Pro titles running
- in HDR and resolutions between 1080p and 4K often
- look just as good to the naked eye. The Xbox One X's
- big advantage is that its hardware could let more
- games reach 60FPS compared to Sony's console.</p>
- <p>Microsoft says over 130 Xbox One X-enhanced titles
- are in the works. That includes already-released
- games like <em>Forza Motorsport 7</em> and <em>Assassin's
- Creed Origins</em>, as well as upcoming titles
- like <em>Call of Duty: WW2</em>. You'll be able to
- find them easily in a special section in the Xbox
- store. There is also a handful of Xbox 360 games
- that'll get enhanced eventually, including <em>Halo
- 3</em> and <em>Fallout 3</em>. Some of those
- titles will get bumped up to a higher resolution,
- while others will get HDR support. Microsoft
- describes these upgrades as a bonus for developers
- who were prescient about how they built their games.
- Basically, don't expect your entire 360 library to
- get enhanced.</p>
- </div>
+ <p><em>Killer Instinct</em> and <em>Super Lucky's
+ Tale</em> run in 4K at a smooth 60FPS. They both looked and played better than their standard versions, though I was surprised they didn't take advantage of HDR. As usual, I noticed the improvement in frame rates more than the higher resolution. Unless you're sitting very close to a TV above 50-inches, you'd likely have a hard time telling between 4K and 1080p.</p>
+ <p>That poses a problem for Microsoft: It's betting that gamers will actually want true 4K rendering. In practice, though, PlayStation 4 Pro titles running in HDR and resolutions between 1080p and 4K often look just as good to the naked eye. The Xbox One X's big advantage is that its hardware could let more games reach 60FPS compared to Sony's console.</p>
+ <p>Microsoft says over 130 Xbox One X-enhanced titles are in the works. That includes already-released games like <em>Forza Motorsport 7</em> and <em>Assassin's
+ Creed Origins</em>, as well as upcoming titles like <em>Call of Duty: WW2</em>. You'll be able to find them easily in a special section in the Xbox store. There is also a handful of Xbox 360 games that'll get enhanced eventually, including <em>Halo
+ 3</em> and <em>Fallout 3</em>. Some of those titles will get bumped up to a higher resolution, while others will get HDR support. Microsoft describes these upgrades as a bonus for developers who were prescient about how they built their games. Basically, don't expect your entire 360 library to get enhanced.</p>
</div>
</div>
</div>
+ </div>
+ <div>
<div>
- <div>
- <div data-engadget-breakout-type="e2ehero">
-
+ <div data-engadget-breakout-type="e2ehero">
+ <div>
<div>
<div>
<div>
- <div>
-
- <figure><img src="https://o.aolcdn.com/images/dims?crop=1600%2C900%2C0%2C0&amp;quality=85&amp;format=jpg&amp;resize=1600%2C900&amp;image_uri=http%3A%2F%2Fo.aolcdn.com%2Fhss%2Fstorage%2Fmidas%2Facb08903fbe26ad77b80db8c8e7e8fb1%2F205828118%2FXbox%2Bone%2BX%2Bscreenshot%2Bgallery%2B7.jpg&amp;client=a1acac3e1b3290917d92&amp;signature=21630fa5ec6d8fdce2c35f7e1f652636a2d8efe7"></img><div>
- <div>
- <div>
-
- </div>
- </div>
+ <figure><img src="https://o.aolcdn.com/images/dims?crop=1600%2C900%2C0%2C0&amp;quality=85&amp;format=jpg&amp;resize=1600%2C900&amp;image_uri=http%3A%2F%2Fo.aolcdn.com%2Fhss%2Fstorage%2Fmidas%2Facb08903fbe26ad77b80db8c8e7e8fb1%2F205828118%2FXbox%2Bone%2BX%2Bscreenshot%2Bgallery%2B7.jpg&amp;client=a1acac3e1b3290917d92&amp;signature=21630fa5ec6d8fdce2c35f7e1f652636a2d8efe7" />
+ <div>
+ <div>
+ <div> </div>
</div>
- </figure></div>
+ </div>
+ </figure>
</div>
</div>
</div>
</div>
</div>
</div>
+ </div>
+ <div>
<div>
<div>
<div>
- <div>
- <p>Even if a game isn't specifically tuned for the new
- console, Microsoft says you might still see some
- performance improvements. The PlayStation 4 Pro,
- meanwhile, has over one hundred games built for its
- hardware, and its boost mode can speed up some older
- games.</p>
- <p>Microsoft is still pushing the Xbox as more than just
- a game console, though. 4K Blu-rays loaded up
- quickly, and I didn't notice many delays as I
- skipped around films. <em>Planet Earth II</em>, in
- particular, looked fantastic thanks to its brilliant
- use of HDR. Unfortunately, the One X doesn't support
- Dolby Vision, so you're stuck with the slightly less
- capable HDR 10 standard. That makes sense since it's
- more widely supported, but it would have been nice
- to see Dolby's, too.</p>
- <p>
- <iframe allowfullscreen="" frameborder="0" gesture="media" height="360" src="https://www.youtube.com/embed/c8aFcHFu8QM" width="640"></iframe>
- </p>
- <p>And speaking of Dolby technology, Microsoft is also
- highlighting Atmos support on the One X, just like
- it did with the One S. The company's app lets you
- configure the console to pass audio Atmos signals to
- your audio receiver. You can also shell out $15 to
- get Atmos support for headphones, which simulates
- immersive surround sound. It's strange to pay money
- to unlock Dolby features, but it's worth it since
- it's significantly better than Microsoft's audio
- virtualization technology. The Netflix app also
- supports Atmos for a handful of films (something
- that the Xbox One S and PlayStation 4 offer, as
- well).</p>
- <p>One thing you won't find in the new Xbox is VR
- support. Microsoft has mentioned that the console
- will offer some sort of mixed reality, but it hasn't
- offered up any details yet. It's technically
- powerful enough to work with any of the Windows
- Mixed Reality headsets launching this fall. It's a
- shame that Microsoft is being so wishy-washy because
- Sony has had a very successful head start with the
- PlayStation VR.</p>
- <h3>Pricing and the competition</h3>
- </div>
+ <p>Even if a game isn't specifically tuned for the new console, Microsoft says you might still see some performance improvements. The PlayStation 4 Pro, meanwhile, has over one hundred games built for its hardware, and its boost mode can speed up some older games.</p>
+ <p>Microsoft is still pushing the Xbox as more than just a game console, though. 4K Blu-rays loaded up quickly, and I didn't notice many delays as I skipped around films. <em>Planet Earth II</em>, in particular, looked fantastic thanks to its brilliant use of HDR. Unfortunately, the One X doesn't support Dolby Vision, so you're stuck with the slightly less capable HDR 10 standard. That makes sense since it's more widely supported, but it would have been nice to see Dolby's, too.</p>
+ <p> <iframe allowfullscreen="" frameborder="0" gesture="media" height="360" src="https://www.youtube.com/embed/c8aFcHFu8QM" width="640"></iframe> </p>
+ <p>And speaking of Dolby technology, Microsoft is also highlighting Atmos support on the One X, just like it did with the One S. The company's app lets you configure the console to pass audio Atmos signals to your audio receiver. You can also shell out $15 to get Atmos support for headphones, which simulates immersive surround sound. It's strange to pay money to unlock Dolby features, but it's worth it since it's significantly better than Microsoft's audio virtualization technology. The Netflix app also supports Atmos for a handful of films (something that the Xbox One S and PlayStation 4 offer, as well).</p>
+ <p>One thing you won't find in the new Xbox is VR support. Microsoft has mentioned that the console will offer some sort of mixed reality, but it hasn't offered up any details yet. It's technically powerful enough to work with any of the Windows Mixed Reality headsets launching this fall. It's a shame that Microsoft is being so wishy-washy because Sony has had a very successful head start with the PlayStation VR.</p>
+ <h3>Pricing and the competition</h3>
</div>
</div>
</div>
+ </div>
+ <div>
<div>
- <div>
-
-
- <div data-engadget-breakout-type="image">
- <figure><img src="https://o.aolcdn.com/images/dims?resize=980%2C640&amp;quality=100&amp;image_uri=https%3A%2F%2Fo.aolcdn.com%2Fimages%2Fdims%3Fcrop%3D1600%252C1027%252C0%252C0%26quality%3D85%26format%3Djpg%26resize%3D1600%252C1027%26image_uri%3Dhttp%253A%252F%252Fo.aolcdn.com%252Fhss%252Fstorage%252Fmidas%252Fa2c8ba1caccdbb9e0559797e5141eafd%252F205826078%252FXbox%252BOne%252BX%252Breview%252Bgallery%252B11.jpg%26client%3Da1acac3e1b3290917d92%26signature%3Da11bcddced805c6e3698f8ce0494102aef057265&amp;client=cbc79c14efcebee57402&amp;signature=1e9bd192add2772bc842a34e67b7572cfd1b265a"></img><figcaption><span>Devindra Hardawar/AOL</span>
- </figcaption></figure></div>
+ <div data-engadget-breakout-type="image">
+ <figure><img src="https://o.aolcdn.com/images/dims?resize=980%2C640&amp;quality=100&amp;image_uri=https%3A%2F%2Fo.aolcdn.com%2Fimages%2Fdims%3Fcrop%3D1600%252C1027%252C0%252C0%26quality%3D85%26format%3Djpg%26resize%3D1600%252C1027%26image_uri%3Dhttp%253A%252F%252Fo.aolcdn.com%252Fhss%252Fstorage%252Fmidas%252Fa2c8ba1caccdbb9e0559797e5141eafd%252F205826078%252FXbox%252BOne%252BX%252Breview%252Bgallery%252B11.jpg%26client%3Da1acac3e1b3290917d92%26signature%3Da11bcddced805c6e3698f8ce0494102aef057265&amp;client=cbc79c14efcebee57402&amp;signature=1e9bd192add2772bc842a34e67b7572cfd1b265a" />
+ <figcaption><span>Devindra Hardawar/AOL</span> </figcaption>
+ </figure>
</div>
</div>
+ </div>
+ <div>
<div>
<div>
<div>
- <div>
- <p>The biggest knock against the Xbox One X is its $500
- price. The PS4 Pro launched at $400 last year, and
- there's a good chance we'll see plenty of deals
- around the holidays. If your friends are on Xbox
- Live, or you're a devotee of Microsoft's first party
- franchises, then the X makes more sense. If you just
- want to play third-party titles that come to both
- platforms, though, the PS4 Pro is clearly the better
- deal.</p>
- <p>If you're looking to upgrade from an original Xbox
- One, and you have a new TV, the One X might be more
- compelling. It's faster and offers more features
- than the One S, and more importantly, it'll last you
- much longer without needing an upgrade. There's also
- plenty of wisdom in simply waiting a while before
- you buy the One X, especially if you haven't moved
- to a 4K TV yet. The new console can make games look
- better on 1080p sets, since it'll supersample
- high-res textures and have more graphical effects,
- but it's simply not worth the upgrade since those
- TVs don't support HDR.</p>
- <p>If price isn't a huge concern for you, it's worth
- considering investing in a gaming PC. A decent one
- costs between $600 and $800, plus the price of a
- monitor, but it'll easily be more powerful than the
- One X. And you have the added benefit of upgrading
- components down the line. Now that Microsoft and
- game publishers are offering most major titles on
- PC, you won't be missing out on much by ditching
- consoles.</p>
- <h3>Wrap-up</h3>
- <p><img alt="" data-credit="Devindra Hardawar/AOL" data-mep="2181681" src="https://o.aolcdn.com/images/dims?crop=1600%2C1028%2C0%2C0&amp;quality=85&amp;format=jpg&amp;resize=1600%2C1028&amp;image_uri=http%3A%2F%2Fo.aolcdn.com%2Fhss%2Fstorage%2Fmidas%2F5396460ef8b6bde7fb7272d9e66a7701%2F205826076%2FXbox%2BOne%2BX%2Breview%2Bgallery%2B9.jpg&amp;client=a1acac3e1b3290917d92&amp;signature=f5b5b4b986c2f8b5031a4469ae0ecec82aff65b0"></img></p>
- <p>Ultimately, the Xbox One X offers some major
- performance upgrades that gamers will notice --
- especially if you're coming from an original Xbox
- One. But it's also a bit disappointing since it's
- coming a year after the PS4 Pro, and it doesn't
- offer VR yet. For Microsoft fans, though, none of
- that will matter. It's exactly what the company
- promised: the fastest game console ever made.</p>
- </div>
+ <p>The biggest knock against the Xbox One X is its $500 price. The PS4 Pro launched at $400 last year, and there's a good chance we'll see plenty of deals around the holidays. If your friends are on Xbox Live, or you're a devotee of Microsoft's first party franchises, then the X makes more sense. If you just want to play third-party titles that come to both platforms, though, the PS4 Pro is clearly the better deal.</p>
+ <p>If you're looking to upgrade from an original Xbox One, and you have a new TV, the One X might be more compelling. It's faster and offers more features than the One S, and more importantly, it'll last you much longer without needing an upgrade. There's also plenty of wisdom in simply waiting a while before you buy the One X, especially if you haven't moved to a 4K TV yet. The new console can make games look better on 1080p sets, since it'll supersample high-res textures and have more graphical effects, but it's simply not worth the upgrade since those TVs don't support HDR.</p>
+ <p>If price isn't a huge concern for you, it's worth considering investing in a gaming PC. A decent one costs between $600 and $800, plus the price of a monitor, but it'll easily be more powerful than the One X. And you have the added benefit of upgrading components down the line. Now that Microsoft and game publishers are offering most major titles on PC, you won't be missing out on much by ditching consoles.</p>
+ <h3>Wrap-up</h3>
+ <p><img data-credit="Devindra Hardawar/AOL" data-mep="2181681" src="https://o.aolcdn.com/images/dims?crop=1600%2C1028%2C0%2C0&amp;quality=85&amp;format=jpg&amp;resize=1600%2C1028&amp;image_uri=http%3A%2F%2Fo.aolcdn.com%2Fhss%2Fstorage%2Fmidas%2F5396460ef8b6bde7fb7272d9e66a7701%2F205826076%2FXbox%2BOne%2BX%2Breview%2Bgallery%2B9.jpg&amp;client=a1acac3e1b3290917d92&amp;signature=f5b5b4b986c2f8b5031a4469ae0ecec82aff65b0" alt="" /></p>
+ <p>Ultimately, the Xbox One X offers some major performance upgrades that gamers will notice -- especially if you're coming from an original Xbox One. But it's also a bit disappointing since it's coming a year after the PS4 Pro, and it doesn't offer VR yet. For Microsoft fans, though, none of that will matter. It's exactly what the company promised: the fastest game console ever made.</p>
</div>
</div>
</div>
-
- </div>
+ </div>
</div>
</div>
</div>
- </article></div>
+ </div>
+ </article>
</div>
</div>
-
- <p>
- <h2> From around the web </h2>
- </p>
-
-
- </div> \ No newline at end of file
+ </div>
+ <p>
+ <h2> From around the web </h2>
+ </p>
+ </main>
+ </div>
+</div> \ No newline at end of file
diff --git a/test/test-pages/gmw/expected.html b/test/test-pages/gmw/expected.html
index b3c62d3..9535494 100644
--- a/test/test-pages/gmw/expected.html
+++ b/test/test-pages/gmw/expected.html
@@ -1,57 +1,45 @@
-<div id="contentMain">
-
-
-
- <p>  翱翔于距地球数千公里的太空中,进入广袤漆黑的未知领域,是一项艰苦卓绝的工作。这让人感到巨大压力和极度恐慌。那么,为什么不能让宇航员来一杯“地球末日”鸡尾酒来放松一下?</p>
- <p>  不幸的是,对于希望能喝上一杯的太空探险者,那些将他们送上太空的政府机构普遍禁止他们染指包括酒在内的含酒精饮料。</p>
- <p>  但是,很快普通人都会有机会向人类“最终的边疆”出发——以平民化旅行的形式,去探索和殖民火星。确实,火星之旅将是一次令人感到痛苦的旅行,可能一去不复返并要几年时间才能完成,但是否应该允许参与者在旅程中痛饮一番?或至少携带能在火星上发酵自制酒精饮料的设备?</p>
- <p><img alt="(Credit: Nasa)" id="45395168" src="http://imgtech.gmw.cn/attachement/jpg/site2/20170310/448a5bc1e2861a2c4e5929.jpg" title="宇航员在太空中喝酒会怎么样?后果很严重"></img></p>
- <p>
- <span face="楷体">  图注:巴兹?奥尔德林(Buzz Aldrin)可能是第二个在月球上行走的人,但他是第一个在月球上喝酒的人</span>
- </p>
- <p>  事实是,历史上酒与太空探险有一种复杂的关系。让我们来看看喝了酒的航天员究竟会发生什么—— 如果我们开始给予进入太空的人类更大的自由度,又可能会发生什么。</p>
- <p>  人们普遍认为,当一个人所处的海拔越高,喝醉后会越容易感到头昏。因此,人们自然地想到,当人身处地球轨道上时,饮酒会对人体有更强烈的致眩作用。但这种说法可能不是正确的。</p>
- <p>  事实上,有证据表明,早在上世纪八十年代就澄清了这一传言。1985年,美国联邦航空管理局(UFAA)开展了一项研究,以验证人在不同的海拔高度饮酒,是否会影响执行复杂任务时的表现和酒精测定仪的读数。</p>
- <p>  在这项研究中,17名男子被要求在地面和一间模拟海拔3.7公里的房间内喝下一些伏特加。然后,他们被要求完成各种任务,包括心算口算问题、用操纵杆在示波器上跟踪灯光以及各种其它测试。研究人员发现,“酒精和海拔高度对酒精测定仪读数或完成任务的表现情况没有交互作用”。</p>
- <p>  所以,人乘坐飞机时醉得更快是个传说?纽约州立大学(State University of New York,SUNY)社会学荣誉教授戴夫·汉森(Dave Hanson)研究酒精和饮酒超过40年,他认为确实如此。他说:“我不认为它(在太空中饮酒)会有任何不同。”</p>
- <p>  他认为高原反应可能类似于宿醉,但它也可能类似于中毒。他说:“如果人们没有感受到充分的大气压力,他们也会觉得喝醉了一样。”</p>
- <p>  相反,那些声称在飞机上比在地面上醉得更快的人,可能只是经历了“自认喝醉(think-drink)”效应,这种效应多年来已被广泛研究。它表明,如果人们认为自己喝醉了,那他们的一举一动会真的像喝醉了一样—— 而不是实际上他们真的醉了。</p>
- <p>  汉森指出:“如果人们脑子里一直认为在飞机上酒精会对他们产生与平常不同的作用,那么他们乘坐飞机时真的会觉得酒精对他们产生了不同的作用。”</p>
- <p>  所以,如果酒精对人体的物理效应与海拔高度无关,那么在国际空间站上睡前小饮一杯不应该是一个大问题,对吧?错了。</p>
- <p>  美国宇航局约翰逊航天中心发言人丹尼尔·霍特(Daniel Huot)表示:“国际空间站上的宇航员不允许喝酒。在国际空间站上,酒精和其它挥发性化合物的使用受到控制,因为它们的挥发物可能对该站的水回收系统产生影响。”</p>
- <p>  为此,国际空间站上的宇航员甚至没有被提供含有酒精的产品,例如漱口水、香水或须后水。如果在国际空间站上饮酒狂欢,溢出的啤酒也可能存在损坏设备的风险。</p>
- <p><img alt="(Credit: iStock)" id="45395150" src="http://imgtech.gmw.cn/attachement/jpg/site2/20170310/448a5bc1e2861a2c4e592a.jpg" title="宇航员在太空中喝酒会怎么样?后果很严重"></img></p>
- <p>
- <span face="楷体">  图注:测试表明,有关人在高空中喝酒更容易醉的传言是不正确的</span>
- </p>
- <p>  然后是责任的问题。我们不允许汽车司机或飞机飞行员喝醉后驾驶,所以并不奇怪同样的规则适用于国际空间站上的宇航员。毕竟国际空间站的造价高达1500亿美元,而且在接近真空的太空中其运行速度达到了每小时27680公里。</p>
- <p>  然而,2007年,美国宇航局(NASA)成立了一个负责调查宇航员健康状况的独立小组,称历史上该机构至少有两名宇航员在即将飞行前喝了大量的酒,但仍然被允许飞行。Nasa安全负责人随后的审查发现并没有证据支持这一指控。宇航员在飞行前12小时是严禁饮酒的,因为他们需要充分的思维能力和清醒的意识。</p>
- <p>  出台这一规则的原因很清楚。在1985年UFAA开展的关于酒精在不同海拔高度影响的研究中,研究人员得出结论,酒精的影响与海拔高度无关。无论参与测试的人员在什么海拔高度喝酒,其酒精测量仪的读数都是一样的。他们的行为表现受到的影响也相同,但如果提供给测试人员的是安慰剂,则身处高空比身处海平面的行为表现要更差一些。这表明,无论是否摄入酒精,海拔高度可能对心理表现有轻微的影响。</p>
- <p>  国际空间站禁止享用啤酒等有大量泡沫的饮料,可能有另一个原因:没有重力的帮助,液体和气体会在宇航员的胃里不停地翻滚,导致他们不断地打嗝。</p>
- <p>  然而,尽管有严格的规则,这并不意味着太空中的人类不会接触发酵液体。在国际空间站上进行了大量有关酒精的实验—— 但没有发生让众人去饮酒的情况,所以没有人真正了解太空中人体对酒精具体有怎样的反应。</p>
- <p>  NASA发言人斯蒂芬妮?席尔霍尔茨(Stephanie Schierhol)表示:“我们研究了太空中宇航员身体的各种变化,包括微生物层面的。我们有一个营养计划,以确保他们的身体获得保持健康所需要的营养。显然,在实施‘天空实验室(skylab)’项目时,他们曾将雪利酒与宇航员一起送到太空中,但宇航员在零重力飞行时使用雪利酒的测试结果不太好。”天空实验室是美国第一座空间站。</p>
- <p>  席尔霍尔茨补充说,在测试中使用雪利酒“引发呕吐反射,公众也反对”。</p>
- <p>  也许最令人惊讶的是,人类在月球表面上喝的第一种液体是葡萄酒。前NASA宇航员巴兹·奥尔德林(Buzz Aldrin)在采访和他撰写的书中表示,1969年,在和尼尔·阿姆斯特朗(Neil Armstrong)走出登月舱之前的圣餐仪式上,他喝了少量葡萄酒。举行这一仪式时与地面的通信出现了暂停,因此这一过程从来没有播出。</p>
- <p>  虽然Nasa对太空中酒精的使用有严格的规定,但在这方面俄罗斯过去似乎更为宽松。在其“和平号”空间站上,宇航员允许喝点干邑和伏特加。当他们发现国际空间站将严格禁止饮酒时,显然有不少怨言。</p>
- <p>  然而,奇怪的是,酒仍然能通过各种方式出现在国际空间站上。2015年,日本酿酒商三得利(Suntory)的全球创新中心将该公司一些获奖的威士忌运送到国际空间站,参与一项旨在验证“能否通过利用微重力环境增强酒精饮料醇厚性”的实验。换句话说,在微重力下酒的陈酿过程可能不同,导致它的陈酿进程更快、味道更好。对此,地球上的每家酿酒商都想进一步地了解。</p>
- <p>  几年前,即2011年9月至2014年9月,Nasa赞助了一个试验,研究微重力环境对威士忌中未发酵麦芽与烧焦橡木颗粒的影响,这两种物质能对威士忌的陈酿起帮助作用。在太空中逗留将近1000天后,用于测试的威士忌的单宁成分保持不变——但是太空中橡木颗粒产生了更高浓度的木质素分解产物,这种物质能赋予威士忌特别的风味。</p>
- <p>  Nasa表示:“这种试验不仅对麦芽威士忌行业有影响,而且对整个食品和饮料行业也有影响。送上太空的威士忌与对照样品之间的风味差异是如此显著,需要进一步分析以破解不同口味产生的原因。”</p>
- <p>  因此,即使宇航员自己被禁止在地球轨道上饮酒,但他们正在做的工作可以提高在地上消费的酒的质量。</p>
- <p>  相比之下,执行登陆火星任务的人将远离家乡几年,而不是几个月,因此可能会有人提出有关禁止饮酒的规定可以放松一些。</p>
- <p>  然而,像戴夫?汉森这样的专家认为,继续禁止饮酒并没有什么害处。除了实际的安全问题,饮酒还可能有其它挑战。汉森认为,地球人存在许多社会文化方面的差异,而且人连续几年时间呆在一个狭小的空间里,很容易突然发怒,这些因素都使饮酒问题变得很棘手。</p>
- <p><img alt="(Credit: David Frohman/Peachstate Historical Consulting Inc)" id="45395153" src="http://imgtech.gmw.cn/attachement/jpg/site2/20170310/448a5bc1e2861a2c4e592d.jpg" title="宇航员在太空中喝酒会怎么样?后果很严重"></img></p>
- <p>
- <span face="楷体">  图注:奥尔德林的圣餐杯回到了地球上</span>
- </p>
- <p>  他说:“这是一个政治问题,也是一个文化方面的问题,但不是一个科学上的问题。这将是未来一个可能产生冲突领域,因为人们具有不同的文化背景,他们对饮酒的态度不同。”他进一步指出,如果你与穆斯林、摩门教徒或禁酒主义者分配在同一间宿舍怎么办?面对未来人们可能在一个没有期限的时间内呆在一个有限的空间里,需要“尽早解决”如何协调不同文化观点的问题。</p>
- <p><ins></ins>  所以,当宇航员在地球轨道上时,将还不得不满足于通过欣赏外面的景色来振作精神,而不要指望沉溺于烈酒中。我们留在地球上的人,则可以准备好适量的香槟酒,以迎接他们的归来。</p>
- <p>  原标题:他晚于阿姆斯特朗登月 却是首个敢在月球喝酒的人</p>
- <p><strong>  出品︱网易科学人栏目组 胖胖</strong></p>
- <p><strong>  作者︱春春</strong>
- <a href="http://www.gmw.cn" target="_blank"><img src="https://img.gmw.cn/pic/content_logo.png" title="返回光明网首页"></img></a>
- </p>
-
- <p>[责任编辑:肖春芳]</p>
-
-
- </div> \ No newline at end of file
+<div id="readability-page-1" class="page">
+ <div id="contentMain">
+ <p>  翱翔于距地球数千公里的太空中,进入广袤漆黑的未知领域,是一项艰苦卓绝的工作。这让人感到巨大压力和极度恐慌。那么,为什么不能让宇航员来一杯“地球末日”鸡尾酒来放松一下?</p>
+ <p>  不幸的是,对于希望能喝上一杯的太空探险者,那些将他们送上太空的政府机构普遍禁止他们染指包括酒在内的含酒精饮料。</p>
+ <p>  但是,很快普通人都会有机会向人类“最终的边疆”出发——以平民化旅行的形式,去探索和殖民火星。确实,火星之旅将是一次令人感到痛苦的旅行,可能一去不复返并要几年时间才能完成,但是否应该允许参与者在旅程中痛饮一番?或至少携带能在火星上发酵自制酒精饮料的设备?</p>
+ <p><img id="45395168" alt="(Credit: Nasa)" src="http://imgtech.gmw.cn/attachement/jpg/site2/20170310/448a5bc1e2861a2c4e5929.jpg" title="宇航员在太空中喝酒会怎么样?后果很严重" /></p>
+ <p> <span face="楷体">  图注:巴兹?奥尔德林(Buzz Aldrin)可能是第二个在月球上行走的人,但他是第一个在月球上喝酒的人</span> </p>
+ <p>  事实是,历史上酒与太空探险有一种复杂的关系。让我们来看看喝了酒的航天员究竟会发生什么—— 如果我们开始给予进入太空的人类更大的自由度,又可能会发生什么。</p>
+ <p>  人们普遍认为,当一个人所处的海拔越高,喝醉后会越容易感到头昏。因此,人们自然地想到,当人身处地球轨道上时,饮酒会对人体有更强烈的致眩作用。但这种说法可能不是正确的。</p>
+ <p>  事实上,有证据表明,早在上世纪八十年代就澄清了这一传言。1985年,美国联邦航空管理局(UFAA)开展了一项研究,以验证人在不同的海拔高度饮酒,是否会影响执行复杂任务时的表现和酒精测定仪的读数。</p>
+ <p>  在这项研究中,17名男子被要求在地面和一间模拟海拔3.7公里的房间内喝下一些伏特加。然后,他们被要求完成各种任务,包括心算口算问题、用操纵杆在示波器上跟踪灯光以及各种其它测试。研究人员发现,“酒精和海拔高度对酒精测定仪读数或完成任务的表现情况没有交互作用”。</p>
+ <p>  所以,人乘坐飞机时醉得更快是个传说?纽约州立大学(State University of New York,SUNY)社会学荣誉教授戴夫·汉森(Dave Hanson)研究酒精和饮酒超过40年,他认为确实如此。他说:“我不认为它(在太空中饮酒)会有任何不同。”</p>
+ <p>  他认为高原反应可能类似于宿醉,但它也可能类似于中毒。他说:“如果人们没有感受到充分的大气压力,他们也会觉得喝醉了一样。”</p>
+ <p>  相反,那些声称在飞机上比在地面上醉得更快的人,可能只是经历了“自认喝醉(think-drink)”效应,这种效应多年来已被广泛研究。它表明,如果人们认为自己喝醉了,那他们的一举一动会真的像喝醉了一样—— 而不是实际上他们真的醉了。</p>
+ <p>  汉森指出:“如果人们脑子里一直认为在飞机上酒精会对他们产生与平常不同的作用,那么他们乘坐飞机时真的会觉得酒精对他们产生了不同的作用。”</p>
+ <p>  所以,如果酒精对人体的物理效应与海拔高度无关,那么在国际空间站上睡前小饮一杯不应该是一个大问题,对吧?错了。</p>
+ <p>  美国宇航局约翰逊航天中心发言人丹尼尔·霍特(Daniel Huot)表示:“国际空间站上的宇航员不允许喝酒。在国际空间站上,酒精和其它挥发性化合物的使用受到控制,因为它们的挥发物可能对该站的水回收系统产生影响。”</p>
+ <p>  为此,国际空间站上的宇航员甚至没有被提供含有酒精的产品,例如漱口水、香水或须后水。如果在国际空间站上饮酒狂欢,溢出的啤酒也可能存在损坏设备的风险。</p>
+ <p><img id="45395150" alt="(Credit: iStock)" src="http://imgtech.gmw.cn/attachement/jpg/site2/20170310/448a5bc1e2861a2c4e592a.jpg" title="宇航员在太空中喝酒会怎么样?后果很严重" /></p>
+ <p> <span face="楷体">  图注:测试表明,有关人在高空中喝酒更容易醉的传言是不正确的</span> </p>
+ <p>  然后是责任的问题。我们不允许汽车司机或飞机飞行员喝醉后驾驶,所以并不奇怪同样的规则适用于国际空间站上的宇航员。毕竟国际空间站的造价高达1500亿美元,而且在接近真空的太空中其运行速度达到了每小时27680公里。</p>
+ <p>  然而,2007年,美国宇航局(NASA)成立了一个负责调查宇航员健康状况的独立小组,称历史上该机构至少有两名宇航员在即将飞行前喝了大量的酒,但仍然被允许飞行。Nasa安全负责人随后的审查发现并没有证据支持这一指控。宇航员在飞行前12小时是严禁饮酒的,因为他们需要充分的思维能力和清醒的意识。</p>
+ <p>  出台这一规则的原因很清楚。在1985年UFAA开展的关于酒精在不同海拔高度影响的研究中,研究人员得出结论,酒精的影响与海拔高度无关。无论参与测试的人员在什么海拔高度喝酒,其酒精测量仪的读数都是一样的。他们的行为表现受到的影响也相同,但如果提供给测试人员的是安慰剂,则身处高空比身处海平面的行为表现要更差一些。这表明,无论是否摄入酒精,海拔高度可能对心理表现有轻微的影响。</p>
+ <p>  国际空间站禁止享用啤酒等有大量泡沫的饮料,可能有另一个原因:没有重力的帮助,液体和气体会在宇航员的胃里不停地翻滚,导致他们不断地打嗝。</p>
+ <p>  然而,尽管有严格的规则,这并不意味着太空中的人类不会接触发酵液体。在国际空间站上进行了大量有关酒精的实验—— 但没有发生让众人去饮酒的情况,所以没有人真正了解太空中人体对酒精具体有怎样的反应。</p>
+ <p>  NASA发言人斯蒂芬妮?席尔霍尔茨(Stephanie Schierhol)表示:“我们研究了太空中宇航员身体的各种变化,包括微生物层面的。我们有一个营养计划,以确保他们的身体获得保持健康所需要的营养。显然,在实施‘天空实验室(skylab)’项目时,他们曾将雪利酒与宇航员一起送到太空中,但宇航员在零重力飞行时使用雪利酒的测试结果不太好。”天空实验室是美国第一座空间站。</p>
+ <p>  席尔霍尔茨补充说,在测试中使用雪利酒“引发呕吐反射,公众也反对”。</p>
+ <p>  也许最令人惊讶的是,人类在月球表面上喝的第一种液体是葡萄酒。前NASA宇航员巴兹·奥尔德林(Buzz Aldrin)在采访和他撰写的书中表示,1969年,在和尼尔·阿姆斯特朗(Neil Armstrong)走出登月舱之前的圣餐仪式上,他喝了少量葡萄酒。举行这一仪式时与地面的通信出现了暂停,因此这一过程从来没有播出。</p>
+ <p>  虽然Nasa对太空中酒精的使用有严格的规定,但在这方面俄罗斯过去似乎更为宽松。在其“和平号”空间站上,宇航员允许喝点干邑和伏特加。当他们发现国际空间站将严格禁止饮酒时,显然有不少怨言。</p>
+ <p>  然而,奇怪的是,酒仍然能通过各种方式出现在国际空间站上。2015年,日本酿酒商三得利(Suntory)的全球创新中心将该公司一些获奖的威士忌运送到国际空间站,参与一项旨在验证“能否通过利用微重力环境增强酒精饮料醇厚性”的实验。换句话说,在微重力下酒的陈酿过程可能不同,导致它的陈酿进程更快、味道更好。对此,地球上的每家酿酒商都想进一步地了解。</p>
+ <p>  几年前,即2011年9月至2014年9月,Nasa赞助了一个试验,研究微重力环境对威士忌中未发酵麦芽与烧焦橡木颗粒的影响,这两种物质能对威士忌的陈酿起帮助作用。在太空中逗留将近1000天后,用于测试的威士忌的单宁成分保持不变——但是太空中橡木颗粒产生了更高浓度的木质素分解产物,这种物质能赋予威士忌特别的风味。</p>
+ <p>  Nasa表示:“这种试验不仅对麦芽威士忌行业有影响,而且对整个食品和饮料行业也有影响。送上太空的威士忌与对照样品之间的风味差异是如此显著,需要进一步分析以破解不同口味产生的原因。”</p>
+ <p>  因此,即使宇航员自己被禁止在地球轨道上饮酒,但他们正在做的工作可以提高在地上消费的酒的质量。</p>
+ <p>  相比之下,执行登陆火星任务的人将远离家乡几年,而不是几个月,因此可能会有人提出有关禁止饮酒的规定可以放松一些。</p>
+ <p>  然而,像戴夫?汉森这样的专家认为,继续禁止饮酒并没有什么害处。除了实际的安全问题,饮酒还可能有其它挑战。汉森认为,地球人存在许多社会文化方面的差异,而且人连续几年时间呆在一个狭小的空间里,很容易突然发怒,这些因素都使饮酒问题变得很棘手。</p>
+ <p><img id="45395153" alt="(Credit: David Frohman/Peachstate Historical Consulting Inc)" src="http://imgtech.gmw.cn/attachement/jpg/site2/20170310/448a5bc1e2861a2c4e592d.jpg" title="宇航员在太空中喝酒会怎么样?后果很严重" /> </p>
+ <p> <span face="楷体">  图注:奥尔德林的圣餐杯回到了地球上</span> </p>
+ <p>  他说:“这是一个政治问题,也是一个文化方面的问题,但不是一个科学上的问题。这将是未来一个可能产生冲突领域,因为人们具有不同的文化背景,他们对饮酒的态度不同。”他进一步指出,如果你与穆斯林、摩门教徒或禁酒主义者分配在同一间宿舍怎么办?面对未来人们可能在一个没有期限的时间内呆在一个有限的空间里,需要“尽早解决”如何协调不同文化观点的问题。</p>
+ <p><ins></ins>  所以,当宇航员在地球轨道上时,将还不得不满足于通过欣赏外面的景色来振作精神,而不要指望沉溺于烈酒中。我们留在地球上的人,则可以准备好适量的香槟酒,以迎接他们的归来。</p>
+ <p>  原标题:他晚于阿姆斯特朗登月 却是首个敢在月球喝酒的人</p>
+ <p><strong>  出品︱网易科学人栏目组 胖胖</strong></p>
+ <p><strong>  作者︱春春</strong> <a href="http://www.gmw.cn/" target="_blank"><img src="https://img.gmw.cn/pic/content_logo.png" title="返回光明网首页"/></a> </p>
+ <p>[责任编辑:肖春芳]</p>
+ </div>
+</div> \ No newline at end of file
diff --git a/test/test-pages/heise/expected.html b/test/test-pages/heise/expected.html
index 95ab304..8ba7bd2 100644
--- a/test/test-pages/heise/expected.html
+++ b/test/test-pages/heise/expected.html
@@ -1,11 +1,11 @@
<div>
-
-
+
+
<figure><img src="http://3.f.ix.de/scale/geometry/600/q75/imgs/18/1/4/6/2/3/5/1/Barcode-Scanner-With-Border-fc08c913da5cea5d.jpeg"></img><figcaption><p>1Password scannt auch QR-Codes.</p>
-
-
+
+
<p>(Bild: Hersteller)</p>
-
+
</figcaption></figure><p><strong>Das in der iOS-Version bereits enthaltene TOTP-Feature ist nun auch für OS X 10.10 verfügbar. Zudem gibt es neue Zusatzfelder in der Datenbank und weitere Verbesserungen.</strong></p>
<p><a href="https://itunes.apple.com/de/app/1password-password-manager/id443987910" rel="external" target="_blank">AgileBits hat Version 5.3 seines bekannten Passwortmanagers 1Password für OS X freigegeben.</a> Mit dem Update wird eine praktische Funktion nachgereicht, die <a href="http://fakehost/mac-and-i/meldung/Passwortmanager-1Password-mit-groesseren-Updates-fuer-OS-X-und-iOS-2529204.html">die iOS-Version der Anwendung bereits seit längerem beherrscht</a>: Das direkte Erstellen von Einmal-Passwörtern. Unterstützt wird dabei der <a href="https://blog.agilebits.com/2015/01/26/totp-for-1password-users/" rel="external" target="_blank">TOTP-Standard</a> (Time-Based One-Time Passwords), den unter anderem Firmen wie Evernote, Dropbox oder Google einsetzen, um ihre Zugänge besser abzusichern. Neben Account und regulärem Passwort wird dabei dann ein Zusatzcode verlangt, der nur kurze Zeit gilt.</p>
<p>Zur TOTP-Nutzung muss zunächst ein Startwert an 1Password übergeben werden. Das geht unter anderem per QR-Code, den die App über ein neues Scanfenster selbst einlesen kann – etwa aus dem Webbrowser. Eine Einführung in die Technik gibt <a href="http://1pw.ca/TOTPvideoMac" rel="external" target="_blank">ein kurzes Video</a>. Die TOTP-Unterstützung in 1Password erlaubt es, auf ein zusätzliches Gerät (z.B. ein iPhone) neben dem Mac zu verzichten, das den Code liefert – was allerdings auch die Sicherheit verringert, weil es keinen "echten" zweiten Faktor mehr gibt.</p>
diff --git a/test/test-pages/herald-sun-1/expected.html b/test/test-pages/herald-sun-1/expected.html
index 6b0cbe6..5489371 100644
--- a/test/test-pages/herald-sun-1/expected.html
+++ b/test/test-pages/herald-sun-1/expected.html
@@ -1,8 +1,7 @@
<div>
<div>
<div>
- <div>
- <img alt="A new Bill would require telecommunications service providers to store so-called ‘metadat" data-src="http://api.news.com.au/content/1.0/heraldsun/images/1227261885862?format=jpg&amp;group=iphone&amp;size=medium" src="http://api.news.com.au/content/1.0/heraldsun/images/1227261885862?format=jpg&amp;group=iphone&amp;size=medium"></img></div>
+ <p><img alt="A new Bill would require telecommunications service providers to store so-called ‘metadat" data-src="http://api.news.com.au/content/1.0/heraldsun/images/1227261885862?format=jpg&amp;group=iphone&amp;size=medium" src="http://api.news.com.au/content/1.0/heraldsun/images/1227261885862?format=jpg&amp;group=iphone&amp;size=medium"></img></p>
<p>
<span id="imgCaption">A new Bill would require telecommunications service providers to store so-called ‘metadata’ for two years.</span>
<span><em>Source:</em>
@@ -15,11 +14,11 @@
</strong></p>
<p>The roadshow featured the Prime Minister’s national security adviser, Andrew Shearer, Justin Bassi, who advises Attorney-General George Brandis on crime and security matters, and Australian Federal Police Commissioner Andrew Colvin. Staffers from the office of Communications Minister Malcolm Turnbull also took part.</p><p>They held meetings with executives from News Corporation and Fairfax, representatives of the TV networks, the ABC top brass and a group from the media union and the Walkley journalism foundation. I was involved as a member of the Walkley board.</p><p>The initiative, from Tony Abbott’s office, is evidence that the Government has been alarmed by the strength of criticism from media of the Data Retention Bill it wants passed before Parliament rises in a fortnight. Bosses, journalists, even the Press Council, are up in arms, not only over this measure, but also over aspects of two earlier pieces of national security legislation that interfere with the ability of the media to hold government to account.</p>
-
+
<div id="read-more">
-
-
+
+
<div id="read-more-content">
<p>The Bill would require telecommunications service providers to store so-called “metadata” — the who, where, when and how of a communication, but not its content — for two years so security and law enforcement agencies can access it without warrant. Few would argue against the use of such material to catch criminals or terrorists. But, as Parliament’s Joint Committee on Intelligence and Security has pointed out, it would also be used “for the purpose of determining the identity of a journalist’s sources”.</p><p>And that should ring warning bells for anyone genuinely concerned with the health of our democracy. Without the ability to protect the identity of sources, journalists would be greatly handicapped in exposing corruption, dishonesty, waste, incompetence and misbehaviour by public officials.</p><p>The Press Council is concerned the laws would crush investigative journalism.</p><p>“These legitimate concerns cannot be addressed effectively short of exempting journalists and media organisations,” says president David Weisbrot.</p><p>The media union is adamant journalists’ metadata must be exempted from the law. That’s what media bosses want, too, though they have a fallback position based on new safeguards being implemented in Britain.</p><p>That would prevent access to the metadata of journalists or media organisations without a judicial warrant. There would be a code including — according to the explanatory notes of the British Bill — “provision to protect the public interest in the confidentiality of journalistic sources”.</p><p>In their meetings this week, the government team boasted of concessions in the new Data Retention Bill. The number of agencies able to access metadata will be reduced by excluding such organisations as the RSPCA and local councils. And whenever an authorisation is issued for access to information about a journalist’s sources, the Ombudsman (or, where ASIO is involved, the Inspector-General of Intelligence and Security) will receive a copy.</p><p>That does nothing to solve the problem. The Government has effectively admitted as much by agreeing that the parliamentary committee should conduct a separate review of how to deal with the issue of journalists’ sources.</p><p>But another inquiry would be a waste of time — the committee has already received and considered dozens of submissions on the subject. The bottom line is that the Government does not deny that the legislation is flawed, but is demanding it be passed anyway with the possibility left open of a repair job down the track. That is a ridiculous approach.</p><p>Claims that immediate action is imperative do not stand up. These are measures that won’t come into full effect for two years. Anyway, amending the Bill to either exempt journalists or adopt the UK model could be done quickly, without any risk to national security.</p><p>AS Opposition Leader Bill Shorten said in a letter to Abbott last month: “Press freedom concerns about mandatory data retention would ideally be addressed in this Bill to avoid the need for future additional amendments or procedures to be put in place in the future.”</p><p>The Data Retention Bill will be debated in the House of Representatives this week. Then, on Friday, CEOs from leading media organisations will front the parliamentary committee to air their concerns before the legislation goes to the Senate.</p><p>Those CEOs should make it clear they are just as angry about this as they were about Stephen Conroy’s attempt to impinge on press freedom through media regulation under the previous Labor government.</p><p>Memories of the grief Conroy brought down on his head would undoubtedly make Abbott sit up and take notice.</p><p><b>LAURIE OAKES IS THE NINE NETWORK POLITICAL EDITOR </b></p>
</div>
diff --git a/test/test-pages/herald-sun-1/source.html b/test/test-pages/herald-sun-1/source.html
index f042468..050bed4 100644
--- a/test/test-pages/herald-sun-1/source.html
+++ b/test/test-pages/herald-sun-1/source.html
@@ -1,35 +1,35 @@
<!--?xml version="1.0" encoding="UTF-8" ?--><!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.2//EN" "http://www.openmobilealliance.org/tech/DTD/xhtml-mobile12.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en-au" xml:lang="en-au"><head>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
<!-- site: HeraldSun esi: true breachflag: true channel: mobile -->
-
-
-
-
+
+
+
+
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
<meta name="HandheldFriendly" content="true"/>
@@ -38,10 +38,10 @@
<meta name="format-detection" content="telephone=no"/>
<meta name="format-detection" content="address=no"/>
<!--thisPage::>1226616041343 thisMobilePage::>1226586877147 -->
-
+
<script>bruce_rtget={"sno": "1", "snol": "h,e,g", "tmstamp": "2015-03-21 11:30:02.973988"};</script>
-
-
+
+
<script type="text/javascript">
(function() {
var useSSL = 'https:' == document.location.protocol;
@@ -50,7 +50,7 @@
})();
</script><script src="http://tags.news.com.au/prod/utrack/utrack.js?cb=1426898115317"></script>
-
+
<title>Angry media won’t buckle over new surveillance laws
| Herald Sun</title>
<meta name="description" content="A HIGH-powered federal government team has been doing the rounds of media organisations in the past few days in an attempt to allay concerns about the impact of new surveillance legislation on press freedom. It failed."/>
@@ -88,12 +88,12 @@
ndm.account = {
urls: { login: "http://www.heraldsun.com.au/login", signup: "http://subscription.news.com.au/heraldsun/offers", account: "https://myaccount.news.com.au/heraldsun/viewAccount" }
};
-
-
-
-
-
-
+
+
+
+
+
+
window.ndm = window.ndm || {};window.ndm.cam = {'status': 'logged-out', 'memtype': 'anonymous'};ndm.config = {idp: {relayState: 'http://m.heraldsun.com.au/news/opinion/angry-media-wont-buckle-over-new-surveillance-laws/story-fni0fha6-1227261886014?nk=e65db50ff7e443a778cb38df8e9ad061',samlLoc: 'http://saml.cam.idmndm.com',channel: 'msite',site: 'HeraldSun'}, metered: {mode: 'free',state: {'max': 5, 'access': 'true', 'count': 1},endpoint: {registration: 'https://idp.news.com.au/idp/Authn/rest',products: 'http://digitalpass.heraldsun.com.au'},productInfo: {offerCode: '2_1_',sourceCode: 'HSWEB_MOB100_a'}}};
window.ndm.idp = window.ndm.idp || {};
window.ndm.idp.socialEnabled = !window.ndm.cam.paywalldisabled;
@@ -222,8 +222,8 @@ window.envoy_config.identity = {
//]]>
</script>
<!-- Resource Included []-->
-
-
+
+
<!-- new.adkit -->
<script type="text/javascript">
//<![CDATA[
@@ -260,7 +260,7 @@ window.envoy_config.identity = {
utag_data.net_article_updated_time="2015-03-13 21:30:09";
//]]>
</script>
-
+
<script src="http://tags.news.com.au/prod/trending/hs_m.js?id=1227261886014"></script>
<meta http-equiv="X-UA-Compatible" content="IE=8"/>
<meta name="robots" content="noarchive"/>
@@ -285,7 +285,7 @@ window.envoy_config.identity = {
<div id="mobile-nav" class="site-nav">
<!-- support 3 tiers/levels of m sites navigation -->
<!-- esi true once login 1226622207516-->
-
+
<div class="module navigation-module primaryholder-nav sectionref-header-nav id1226622207516 ">
<div class="module-content">
<ul class=" tier-1">
@@ -484,7 +484,7 @@ window.envoy_config.identity = {
</div><!-- // .module.navigation-module -->
<div class="nav-login">
-
+
<div class="module form-module form-module-cam-login">
<div class="module-header">
<ul class="more-links">
@@ -594,7 +594,7 @@ window.envoy_config.identity = {
</div>
</div>
</div>
-
+
</div>
</div>
<div id="headerAd">
@@ -609,7 +609,7 @@ window.envoy_config.identity = {
</div><!-- // #section-header-logo -->
</div><!-- // #section-header -->
<div id="story">
-
+
<div class="story-header">
<div class="story-section">
<h2 class="heading">
@@ -659,10 +659,10 @@ window.envoy_config.identity = {
</strong></p>
</div>
<p>The roadshow featured the Prime Minister’s national security adviser, Andrew Shearer, Justin Bassi, who advises Attorney-General George Brandis on crime and security matters, and Australian Federal Police Commissioner Andrew Colvin. Staffers from the office of Communications Minister Malcolm Turnbull also took part.</p><p>They held meetings with executives from News Corporation and Fairfax, representatives of the TV networks, the ABC top brass and a group from the media union and the Walkley journalism foundation. I was involved as a member of the Walkley board.</p><p>The initiative, from Tony Abbott’s office, is evidence that the Government has been alarmed by the strength of criticism from media of the Data Retention Bill it wants passed before Parliament rises in a fortnight. Bosses, journalists, even the Press Council, are up in arms, not only over this measure, but also over aspects of two earlier pieces of national security legislation that interfere with the ability of the media to hold government to account.</p>
-
+
<div class="story-promo story-promo-middle">
</div>
-
+
<div id="read-more">
<div id="read-more-link">
<a href="">Read more</a>
@@ -687,12 +687,12 @@ window.envoy_config.identity = {
utag_data = window.utag_data || {};
utag_data.net_content_type = (utag_data.net_content_type ? utag_data.net_content_type + "+" : "") + "comments";
</script>
-
+
<div class="story-promo story-promo-bottom">
</div>
-
-
-
+
+
+
<!-- [Group:1226671432961] on [fwprodcontent02.ni.news.com.au] @ [March 21, 2015 11:05AM] -->
<div class="group text-g-news-ms-group-adsense-medium item-count-1 group-id-1226671432961">
<div class="group-content">
@@ -704,7 +704,7 @@ window.envoy_config.identity = {
</div><!-- // .group-content.item-count-1 -->
</div><!-- // .group -->
-
+
<!-- [Group:1226721033461] on [fwprodcontent10.ni.news.com.au] @ [March 21, 2015 11:30AM] -->
<div class="group outbrain-group text-g-more-stories item-count-1 group-id-1226721033461">
<div class="group-header">
@@ -718,7 +718,7 @@ window.envoy_config.identity = {
</div><!-- // .group-content.item-count-1 -->
</div><!-- // .group -->
-
+
<!-- [Group:1226615951541] on [fwprodcontent08.ni.news.com.au] @ [March 21, 2015 11:26AM] -->
<div class="group text-g-other-opinion-columns item-count-1 group-id-1226615951541">
<div class="group-header">
@@ -884,7 +884,7 @@ window.envoy_config.identity = {
</div><!-- // .group-content.item-count-1 -->
</div><!-- // .group -->
-
+
<!-- [Group:1226586873038] on [fwprodcontent07.ni.news.com.au] @ [March 21, 2015 11:30AM] -->
<div class="group collection text-g-nn-mob-group-mostread item-count-1 group-id-1226586873038">
<div class="group-content">
@@ -906,9 +906,9 @@ window.envoy_config.identity = {
<div class="ad-block ad-m-banner" id="ad-m-banner-1"></div>
</div>
<div id="network-account">
-
+
<div class="network-login">
-
+
<div class="module form-module form-module-cam-login">
<div class="module-header">
<ul class="more-links">
@@ -1018,11 +1018,11 @@ window.envoy_config.identity = {
</div>
</div>
</div>
-
+
</div> <!-- .network-login -->
</div> <!-- .network-account -->
<div id="mobile-footer-nav" class="site-nav">
-
+
<div class="module navigation-module footer-nav follow-us sectionref-footer-top id1226899054033 ">
<div class="module-content">
<ul class=" tier-1">
@@ -1048,16 +1048,16 @@ window.envoy_config.identity = {
<!-- // .tier-2 -->
</li>
<li class="footertop-nav last">
-
+
<ul class=" tier-2">
<li class="backtotop-nav first">
<a href="#page">Back To Top</a>
</li>
-
+
<li class="login">
<a href="/login">Log In</a>
</li>
-
+
<li class="signup-nav">
<a href="http://m.heraldsun.com.au/subscribe/news/1/?sourceCode=HSWEB_MOB539">Subscribe</a>
</li>
diff --git a/test/test-pages/hidden-nodes/expected-metadata.json b/test/test-pages/hidden-nodes/expected-metadata.json
new file mode 100644
index 0000000..6b1e797
--- /dev/null
+++ b/test/test-pages/hidden-nodes/expected-metadata.json
@@ -0,0 +1,4 @@
+{
+ "Title": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt",
+ "Excerpt": "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.",
+}
diff --git a/test/test-pages/hidden-nodes/expected.html b/test/test-pages/hidden-nodes/expected.html
new file mode 100644
index 0000000..bb0e068
--- /dev/null
+++ b/test/test-pages/hidden-nodes/expected.html
@@ -0,0 +1,4 @@
+<div id="readability-page-1" class="page">
+ <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>
+ <h2> Secondary header </h2>
+</div> \ No newline at end of file
diff --git a/test/test-pages/hidden-nodes/source.html b/test/test-pages/hidden-nodes/source.html
new file mode 100644
index 0000000..e0699a0
--- /dev/null
+++ b/test/test-pages/hidden-nodes/source.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+ <head>
+ <meta charset="utf-8" />
+ <title>
+ Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt
+ </title>
+ </head>
+ <body>
+ <h1>
+ Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt
+ </h1>
+ <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>
+ <h2>
+ Secondary header
+ </h2>
+ <p style="display: none;">
+ 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>
+ <h2>
+ Third header
+ </h2>
+ <p hidden="hidden">
+ 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>
+ </body>
+</html>
diff --git a/test/test-pages/hukumusume/expected.html b/test/test-pages/hukumusume/expected.html
index 4814443..9871087 100644
--- a/test/test-pages/hukumusume/expected.html
+++ b/test/test-pages/hukumusume/expected.html
@@ -1,27 +1,46 @@
-<div>
- <p><a href="http://fakehost/test/../../../index.html">福娘童話集</a> &gt; <a href="http://fakehost/test/../index.html">きょうのイソップ童話</a> &gt; <a href="http://fakehost/test/../itiran/01gatu.htm">1月のイソップ童話</a> &gt; 欲張りなイヌ</p>
- <p>
- <span color="#FF0000" size="+2">元旦のイソップ童話</span><p><img alt="よくばりなイヌ" height="360" src="http://fakehost/test/../../../gazou/pc_gazou/aesop/aesop052.jpg" width="480"></img></p><p> 欲張りなイヌ</p><p><a href="http://hukumusume.com/douwa/English/aesop/01/01_j.html">ひらがな</a> ←→ <a href="http://hukumusume.com/douwa/English/aesop/01/01_j&amp;E.html">日本語・英語</a> ←→ <a href="http://hukumusume.com/douwa/English/aesop/01/01_E.html">English</a></p></p>
- <table><tbody><tr><td>
- <table><tbody><tr><td><img height="7" src="http://fakehost/test/../../../../366/logo_bana/corner_1.gif" width="7"></img></td>
- <td>
- <span color="#FF0000"><b>おりがみをつくろう</b></span>
- </td>
- <td>
- <span size="-1">(<a href="http://www.origami-club.com/index.html"> おりがみくらぶ</a> より)</span>
- </td>
- <td><img height="7" src="http://fakehost/test/../../../../366/logo_bana/corner_2.gif" width="7"></img></td>
- </tr><tr><td colspan="4">
- <table><tbody><tr><td>
- <span size="+2"><a href="http://www.origami-club.com/easy/dogfase/index.html"><img alt="犬の顔の折り紙" height="51" src="http://fakehost/test/../../../gazou/origami_gazou/kantan/dogface.gif" width="73"></img>いぬのかお</a></span>   <a href="http://www.origami-club.com/easy/dog/index.html"><img alt="犬の顔の紙" height="43" src="http://fakehost/test/../../../gazou/origami_gazou/kantan/dog.gif" width="62"></img><span size="+2">いぬ</span></a></td>
- </tr></tbody></table></td>
- </tr></tbody></table></td>
- </tr></tbody></table><table><tbody><tr><td>♪音声配信(html5)</td>
- </tr><tr><td><audio controls="" src="http://ohanashi2.up.seesaa.net/mp3/ae_0101.mp3"></audio></td>
- </tr><tr><td>
- <span size="-1"><a href="http://www.voiceblog.jp/onokuboaki/">亜姫の朗読☆ イソップ童話より</a></span>
- </td>
- </tr></tbody></table><p>  肉をくわえたイヌが、橋を渡っていました。  ふと下を見ると、川の中にも肉をくわえたイヌがいます。 イヌはそれを見て、思いました。(あいつの肉の方が、大きそうだ)  イヌは、くやしくてたまりません。 (そうだ、あいつをおどかして、あの肉を取ってやろう)  そこでイヌは、川の中のイヌに向かって思いっきり吠えました。 「ウゥー、ワン!!」  そのとたん、くわえていた肉はポチャンと川の中に落ちてしまいました。 「ああー、ぁぁー」  川の中には、がっかりしたイヌの顔がうつっています。  さっきの川の中のイヌは、水にうつった自分の顔だったのです。  同じ物を持っていても、人が持っている物の方が良く見え、また、欲張るとけっきょく損をするというお話しです。</p>
- <p>おしまい</p>
- <p> </p>
- </div> \ No newline at end of file
+<div id="readability-page-1" class="page">
+ <div width="619">
+ <p> <a href="http://fakehost/index.html">福娘童話集</a> &gt; <a href="http://fakehost/index.html">きょうのイソップ童話</a> &gt; <a href="http://fakehost/itiran/01gatu.htm">1月のイソップ童話</a> &gt; 欲張りなイヌ </p>
+ <div>
+ <p><span color="#FF0000" size="+2">元旦のイソップ童話</span></p>
+ <p> <img src="http://fakehost/gazou/pc_gazou/aesop/aesop052.jpg" alt="よくばりなイヌ" width="480" height="360" /></p>
+ <p> 欲張りなイヌ</p>
+ <p> <a href="http://hukumusume.com/douwa/English/aesop/01/01_j.html">ひらがな</a> ←→ <a href="http://hukumusume.com/douwa/English/aesop/01/01_j&amp;E.html">日本語・英語</a> ←→ <a href="http://hukumusume.com/douwa/English/aesop/01/01_E.html">English</a></p>
+ </div>
+ <div>
+ <table>
+ <tbody>
+ <tr>
+ <td> <img src="http://fakehost/366/logo_bana/corner_1.gif" width="7" height="7" /> </td>
+ <td> <span color="#FF0000"><b>おりがみをつくろう</b></span> </td>
+ <td> <span size="-1">( <a href="http://www.origami-club.com/index.html">おりがみくらぶ</a> より)</span> </td>
+ <td> <img src="http://fakehost/366/logo_bana/corner_2.gif" width="7" height="7" /> </td>
+ </tr>
+ <tr>
+ <td colspan="4">
+ <p> <a href="http://www.origami-club.com/easy/dogfase/index.html"><span size="+2"><img src="http://fakehost/gazou/origami_gazou/kantan/dogface.gif" alt="犬の顔の折り紙" width="73" height="51"/>いぬのかお</span></a>   <a href="http://www.origami-club.com/easy/dog/index.html"><img src="http://fakehost/gazou/origami_gazou/kantan/dog.gif" alt="犬の顔の紙" width="62" height="43"/><span size="+2">いぬ</span></a> </p>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <table>
+ <tbody>
+ <tr>
+ <td> ♪音声配信(html5) </td>
+ </tr>
+ <tr>
+ <td> <audio src="http://ohanashi2.up.seesaa.net/mp3/ae_0101.mp3" controls=""></audio> </td>
+ </tr>
+ <tr>
+ <td> <a href="http://www.voiceblog.jp/onokuboaki/"><span size="-1">亜姫の朗読☆ イソップ童話より</span></a> </td>
+ </tr>
+ </tbody>
+ </table>
+ <p>  肉をくわえたイヌが、橋を渡っていました。  ふと下を見ると、川の中にも肉をくわえたイヌがいます。 イヌはそれを見て、思いました。(あいつの肉の方が、大きそうだ)  イヌは、くやしくてたまりません。 (そうだ、あいつをおどかして、あの肉を取ってやろう)  そこでイヌは、川の中のイヌに向かって思いっきり吠えました。 「ウゥー、ワン!!」  そのとたん、くわえていた肉はポチャンと川の中に落ちてしまいました。 「ああー、ぁぁー」  川の中には、がっかりしたイヌの顔がうつっています。  さっきの川の中のイヌは、水にうつった自分の顔だったのです。  同じ物を持っていても、人が持っている物の方が良く見え、また、欲張るとけっきょく損をするというお話しです。 </p>
+ <p> おしまい </p>
+ <div>
+ <p></p>
+ </div>
+ </div>
+</div> \ No newline at end of file
diff --git a/test/test-pages/hukumusume/source.html b/test/test-pages/hukumusume/source.html
index e39fedf..7cbaacd 100644
--- a/test/test-pages/hukumusume/source.html
+++ b/test/test-pages/hukumusume/source.html
@@ -1,44 +1,56 @@
-<html>
-
-<head>
- <title>欲張りなイヌ <福娘童話集 きょうのイソップ童話></title>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8"></meta>
-</head>
-
-<body bgcolor="#FFFFFF" text="#000000">
- <table width="969" border="0" align="center" cellpadding="0" cellspacing="0">
- <tbody>
- <tr>
- <td colspan="5" height="12">
- <div align="center">
- <table width="100%" border="0">
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <title>
+ 欲張りなイヌ <福娘童話集 きょうのイソップ童話>
+ </title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ </head>
+ <body bgcolor="#FFFFFF" text="#000000">
+ <table width="969" border="0" align="center" cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td colspan="5" height="12">
+ <div align="center">
+ <table width="100%" border="0">
+ <tbody>
+ <tr>
+ <td width="27%" align="center">
+ <a href="../../../index.html">福娘童話集</a> &gt; <a href="../index.html">きょうのイソップ童話</a>
+ </td>
+ <td width="46%" align="center">
+ <a href="http://hukumusume.com/douwa/pc/aesop/index.html"><img src="../../../gazou/pc_gazou/all/aesop_logo_llll.gif" alt="福娘童話集 きょうのイソップ童話" width="320" height="100" border="0" /></a>
+ </td>
+ <td width="27%" align="center" valign="bottom">
+ <a href="http://hukumusume.com/douwa/index.html"><img src="../../../gazou/pc_gazou/all/douwa_logo_top_.gif" alt="童話・昔話・おとぎ話の福娘童話集" width="170" height="50" border="0" /></a>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td width="166" height="830" valign="top">
+ <table width="166" border="0" cellpadding="0" cellspacing="0" bgcolor="#C8FFC8">
<tbody>
<tr>
- <td width="27%" align="center"><a href="../../../index.html">福娘童話集</a> &gt; <a href="../index.html">きょうのイソップ童話</a></td>
- <td width="46%" align="center"><a href="http://hukumusume.com/douwa/pc/aesop/index.html"><img src="../../../gazou/pc_gazou/all/aesop_logo_llll.gif" alt="福娘童話集 きょうのイソップ童話" width="320" height="100" border="0"></img></a></td>
- <td width="27%" align="center" valign="bottom"><a href="http://hukumusume.com/douwa/index.html"><img src="../../../gazou/pc_gazou/all/douwa_logo_top_.gif" alt="童話・昔話・おとぎ話の福娘童話集" width="170" height="50" border="0"></img></a></td>
+ <td height="7" valign="top">
+ <img src="../../../../366/logo_bana/corner_1.gif" width="7" height="7" />
+ </td>
+ <td></td>
+ <td align="right" valign="top">
+ <img src="../../../../366/logo_bana/corner_2.gif" width="7" height="7" />
+ </td>
</tr>
</tbody>
</table>
- </div>
- </td>
- </tr>
- <tr>
- <td width="166" height="830" valign="top">
- <table width="166" border="0" cellpadding="0" cellspacing="0" bgcolor="#C8FFC8">
- <tbody>
- <tr>
- <td height="7" valign="top"><img src="../../../../366/logo_bana/corner_1.gif" width="7" height="7"></img></td>
- <td></td>
- <td align="right" valign="top"><img src="../../../../366/logo_bana/corner_2.gif" width="7" height="7"></img></td>
- </tr>
- </tbody>
- </table>
- <table width="166" border="0" cellpadding="0" cellspacing="0">
- <tbody>
- <tr>
- <td width="310" height="610" align="center" bgcolor="#C8FFC8">
- <script type="text/javascript">
+ <table width="166" border="0" cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td width="310" height="610" align="center" bgcolor="#C8FFC8">
+ <script type="text/javascript">
+ //<![CDATA[
<!--
google_ad_client = "ca-pub-2746615155806331";
/* 1a月160x600 */
@@ -46,74 +58,110 @@
google_ad_width = 160;
google_ad_height = 600;
//-->
- </script>
- <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
- </script>
- </td>
- </tr>
- <tr>
- <td align="center">&nbsp;</td>
- </tr>
- </tbody>
- </table>
- </td>
- <td width="619" valign="top">
- <p align="center"><a href="../../../index.html">福娘童話集</a> &gt; <a href="../index.html">きょうのイソップ童話</a> &gt; <a href="../itiran/01gatu.htm">1月のイソップ童話</a> &gt; 欲張りなイヌ</p>
- <p align="center">
- <font color="#FF0000" size="+2">元旦のイソップ童話</font><br></br> <br></br> <img src="../../../gazou/pc_gazou/aesop/aesop052.jpg" alt="よくばりなイヌ" width="480" height="360" border="1"></img><br></br> <br></br> 欲張りなイヌ<br></br> <br></br> <a href="http://hukumusume.com/douwa/English/aesop/01/01_j.html">ひらがな</a> ←→ <a href="http://hukumusume.com/douwa/English/aesop/01/01_j&amp;E.html">日本語・英語</a> ←→ <a href="http://hukumusume.com/douwa/English/aesop/01/01_E.html">English</a></p>
- <table width="100%" border="0" cellspacing="0" cellpadding="0">
- <tbody>
- <tr>
- <td height="90" align="center">
- <table width="80%" border="0" cellpadding="0" cellspacing="0" bgcolor="#C8FFC8">
- <tbody>
- <tr>
- <td width="35%" height="25" valign="top"><img src="../../../../366/logo_bana/corner_1.gif" width="7" height="7"></img></td>
- <td width="29%" align="center">
- <font color="#FF0000"><b>おりがみをつくろう</b></font>
- </td>
- <td width="35%" valign="bottom">
- <font size="-1">(<a href="http://www.origami-club.com/index.html"> おりがみくらぶ</a> より)</font>
- </td>
- <td width="1%" align="right" valign="top"><img src="../../../../366/logo_bana/corner_2.gif" width="7" height="7"></img></td>
- </tr>
- <tr>
- <td height="80" colspan="4" align="center" valign="top">
- <table width="98%" border="0" cellspacing="0" cellpadding="0">
- <tbody>
- <tr>
- <td height="75" align="center" valign="middle" bgcolor="#ECFFEC">
- <font size="+2"><a href="http://www.origami-club.com/easy/dogfase/index.html"><img src="../../../gazou/origami_gazou/kantan/dogface.gif" alt="犬の顔の折り紙" width="73" height="51" border="0"></img>いぬのかお</a></font>   <a href="http://www.origami-club.com/easy/dog/index.html"><img src="../../../gazou/origami_gazou/kantan/dog.gif" alt="犬の顔の紙" width="62" height="43" border="0"></img><font size="+2">いぬ</font></a></td>
- </tr>
- </tbody>
- </table>
- </td>
- </tr>
- </tbody>
- </table>
- </td>
- </tr>
- </tbody>
- </table>
- <table width="100%" border="0">
- <tbody>
- <tr>
- <td align="center">♪音声配信(html5)</td>
- </tr>
- <tr>
- <td align="center"><audio src="http://ohanashi2.up.seesaa.net/mp3/ae_0101.mp3" controls=""></audio></td>
- </tr>
- <tr>
- <td align="center">
- <font size="-1"><a href="http://www.voiceblog.jp/onokuboaki/">亜姫の朗読☆ イソップ童話より</a></font>
- </td>
- </tr>
- </tbody>
- </table>
- <p>  肉をくわえたイヌが、橋を渡っていました。  ふと下を見ると、川の中にも肉をくわえたイヌがいます。 イヌはそれを見て、思いました。(あいつの肉の方が、大きそうだ)  イヌは、くやしくてたまりません。 (そうだ、あいつをおどかして、あの肉を取ってやろう)  そこでイヌは、川の中のイヌに向かって思いっきり吠えました。 「ウゥー、ワン!!」  そのとたん、くわえていた肉はポチャンと川の中に落ちてしまいました。 「ああー、ぁぁー」  川の中には、がっかりしたイヌの顔がうつっています。  さっきの川の中のイヌは、水にうつった自分の顔だったのです。  同じ物を持っていても、人が持っている物の方が良く見え、また、欲張るとけっきょく損をするというお話しです。</p>
- <p align="center">おしまい</p>
- <p align="center"><a href="javascript:history.back();" onmouseout="MM_swapImgRestore()" onmouseover="MM_swapImage('Image10','','../../../gazou/pc_gazou/all/top_bana/back_logo_b.gif',1)"><img src="../../../gazou/pc_gazou/all/top_bana/back_logo_r.gif" alt="前のページへ戻る" name="Image10" width="175" height="32" border="0"></img></a> <br></br> <br></br>
- <script type="text/javascript">
+ //]]>
+ </script>
+ <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
+ </td>
+ </tr>
+ <tr>
+ <td align="center">
+ &#160;
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ <td width="619" valign="top">
+ <p align="center">
+ <a href="../../../index.html">福娘童話集</a> &gt; <a href="../index.html">きょうのイソップ童話</a> &gt; <a href="../itiran/01gatu.htm">1月のイソップ童話</a> &gt; 欲張りなイヌ
+ </p>
+ <p align="center">
+ <font color="#FF0000" size="+2">元旦のイソップ童話</font><br />
+ <br />
+ <br />
+ <br />
+ <img src="../../../gazou/pc_gazou/aesop/aesop052.jpg" alt="よくばりなイヌ" width="480" height="360" border="1" /><br />
+ <br />
+ <br />
+ <br />
+ 欲張りなイヌ<br />
+ <br />
+ <br />
+ <br />
+ <a href="http://hukumusume.com/douwa/English/aesop/01/01_j.html">ひらがな</a> ←→ <a href="http://hukumusume.com/douwa/English/aesop/01/01_j&amp;E.html">日本語・英語</a> ←→ <a href="http://hukumusume.com/douwa/English/aesop/01/01_E.html">English</a>
+ </p>
+ <table width="100%" border="0" cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr>
+ <td height="90" align="center">
+ <table width="80%" border="0" cellpadding="0" cellspacing="0" bgcolor="#C8FFC8">
+ <tbody>
+ <tr>
+ <td width="35%" height="25" valign="top">
+ <img src="../../../../366/logo_bana/corner_1.gif" width="7" height="7" />
+ </td>
+ <td width="29%" align="center">
+ <font color="#FF0000"><b>おりがみをつくろう</b></font>
+ </td>
+ <td width="35%" valign="bottom">
+ <font size="-1">( <a href="http://www.origami-club.com/index.html">おりがみくらぶ</a> より)</font>
+ </td>
+ <td width="1%" align="right" valign="top">
+ <img src="../../../../366/logo_bana/corner_2.gif" width="7" height="7" />
+ </td>
+ </tr>
+ <tr>
+ <td height="80" colspan="4" align="center" valign="top">
+ <table width="98%" border="0" cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr>
+ <td height="75" align="center" valign="middle" bgcolor="#ECFFEC">
+ <a href="http://www.origami-club.com/easy/dogfase/index.html"><font size="+2"><img src="../../../gazou/origami_gazou/kantan/dogface.gif" alt="犬の顔の折り紙" width="73" height="51" border="0" />いぬのかお</font></a>   <a href="http://www.origami-club.com/easy/dog/index.html"><img src="../../../gazou/origami_gazou/kantan/dog.gif" alt="犬の顔の紙" width="62" height="43" border="0" /><font size="+2">いぬ</font></a>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ <table width="100%" border="0">
+ <tbody>
+ <tr>
+ <td align="center">
+ ♪音声配信(html5)
+ </td>
+ </tr>
+ <tr>
+ <td align="center">
+ <audio src="http://ohanashi2.up.seesaa.net/mp3/ae_0101.mp3" controls=""></audio>
+ </td>
+ </tr>
+ <tr>
+ <td align="center">
+ <a href="http://www.voiceblog.jp/onokuboaki/"><font size="-1">亜姫の朗読☆ イソップ童話より</font></a>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ <p>
+  肉をくわえたイヌが、橋を渡っていました。  ふと下を見ると、川の中にも肉をくわえたイヌがいます。 イヌはそれを見て、思いました。(あいつの肉の方が、大きそうだ)  イヌは、くやしくてたまりません。 (そうだ、あいつをおどかして、あの肉を取ってやろう)  そこでイヌは、川の中のイヌに向かって思いっきり吠えました。 「ウゥー、ワン!!」  そのとたん、くわえていた肉はポチャンと川の中に落ちてしまいました。 「ああー、ぁぁー」  川の中には、がっかりしたイヌの顔がうつっています。  さっきの川の中のイヌは、水にうつった自分の顔だったのです。  同じ物を持っていても、人が持っている物の方が良く見え、また、欲張るとけっきょく損をするというお話しです。
+ </p>
+ <p align="center">
+ おしまい
+ </p>
+ <p align="center">
+ <a href="javascript:history.back();" onmouseout="MM_swapImgRestore()" onmouseover="MM_swapImage('Image10','','../../../gazou/pc_gazou/all/top_bana/back_logo_b.gif',1)"><img src="../../../gazou/pc_gazou/all/top_bana/back_logo_r.gif" alt="前のページへ戻る" name="Image10" width="175" height="32" border="0" id="Image10" /></a><br />
+ <br />
+ <br />
+ <br />
+ <script type="text/javascript">
+ //<![CDATA[
+
<!--
google_ad_client = "ca-pub-2746615155806331";
/* 1月336x280 */
@@ -121,153 +169,188 @@
google_ad_width = 336;
google_ad_height = 280;
//-->
- </script>
- <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
- </script>
- </p>
- </td>
- <td width="10"><img src="file:///C|/Documents and Settings/福娘note/デスクトップ/company_website15/image/spacer.gif" width="1" height="1"></img></td>
- <td width="166" valign="top">
- <table width="100%" border="0" cellpadding="0" cellspacing="0" bgcolor="#C8FFC8">
- <tbody>
- <tr>
- <td height="7" valign="top"><img src="../../../../366/logo_bana/corner_1.gif" width="7" height="7"></img></td>
- <td></td>
- <td align="right" valign="top"><img src="../../../../366/logo_bana/corner_2.gif" width="7" height="7"></img></td>
- </tr>
- </tbody>
- </table>
- <table width="166" border="0" bgcolor="#C8FFC8">
- <tbody>
- <tr>
- <td width="156" height="50">&nbsp;&nbsp;&nbsp;&nbsp;
- <font size="-1"><b>1月 1日の豆知識</b></font><br></br>
- <font size="-2"><u><br></br>
- 366日への旅</u></font>
- </td>
- </tr>
- <tr>
- <td height="50" bgcolor="#ECFFEC"><img src="file:///C|/Documents and Settings/福娘note/デスクトップ" width="1" height="1"></img><b><font size="-1">きょうの記念日</font></b><br></br>
- <font size="-1"><a href="../../../../366/kinenbi/pc/01gatu/1_01.htm">元旦</a></font>
- </td>
- </tr>
- <tr>
- <td height="50" bgcolor="#ECFFEC"><img src="file:///C|/Documents and Settings/福娘note/デスクトップ/company_website15/image/spacer.gif" width="1" height="1"></img><b><font size="-1">きょうの誕生花</font></b><br></br>
- <a href="../../../../366/hana/pc/01gatu/1_01.htm">
- <font size="-1">松(まつ)</font>
- </a>
- </td>
- </tr>
- <tr>
- <td height="50" bgcolor="#ECFFEC"><b><font size="-1">きょうの誕生日・出来事</font></b><br></br>
- <font size="-1"><a href="../../../../366/birthday/pc/01gatu/1_01.htm">1949年 Mr.マリック(マジシャン)</a></font>
- </td>
- </tr>
- <tr>
- <td height="50" bgcolor="#ECFFEC"><b><font size="-1">恋の誕生日占い</font></b><br></br>
- <font size="-1"><a href="../../../../sakura/uranai/birthday/01/01.html">自分の考えをしっかりと持った女の子。</a></font>
- </td>
- </tr>
- <tr>
- <td height="50" bgcolor="#ECFFEC"><b><font size="-1">なぞなぞ小学校</font></b><br></br>
- <font size="-1"><a href="../../../../nazonazo/new/2012/04/02.html">○(丸)を取ったらお母さんになってしまう男の人は?</a></font>
- </td>
- </tr>
- <tr>
- <td height="50" bgcolor="#ECFFEC"><b><font size="-1">あこがれの職業紹介</font></b><br></br>
- <font size="-1"><a href="../../../../sakura/navi/work/2017/041.html">歌手</a></font>
- </td>
- </tr>
- <tr>
- <td height="50" bgcolor="#ECFFEC"><b><font size="-1">恋の魔法とおまじない</font></b> 001 <br></br>
- <font size="-1"><a href="../../../../omajinai/new/2012/00/re01.html">両思いになれる おまじない</a></font>
- </td>
- </tr>
- <tr>
- <td height="50" bgcolor="#C8FFC8">
- <font size="-1">  <b>1月 1日の童話・昔話</b><br></br> <u><font size="-2"><br></br>
- 福娘童話集</font></u></font>
- </td>
- </tr>
- <tr>
- <td height="50" bgcolor="#ECFFEC"><b><font size="-1">きょうの日本昔話</font></b><br></br>
- <a href="../../../../douwa/pc/jap/01/01.htm">
- <font size="-1">ネコがネズミを追いかける訳</font>
- </a>
- </td>
- </tr>
- <tr>
- <td height="50" bgcolor="#ECFFEC"><b><font size="-1">きょうの世界昔話<img src="file:///C|/Documents and Settings/福娘note/デスクトップ/company_website15/image/spacer.gif" width="1" height="1"></img></font></b><br></br>
- <a href="../../../../douwa/pc/world/01/01a.htm">
- <font size="-1">モンゴルの十二支話</font>
- </a>
- </td>
- </tr>
- <tr>
- <td height="50" bgcolor="#ECFFEC"><img src="file:///C|/Documents and Settings/福娘note/デスクトップ/company_website15/image/spacer.gif" width="1" height="1"></img><b><font size="-1">きょうの日本民話</font></b><br></br>
- <a href="../../../../douwa/pc/minwa/01/01c.html">
- <font size="-1">仕事の取替えっこ</font>
- </a>
- </td>
- </tr>
- <tr>
- <td height="50" bgcolor="#ECFFEC"><b><font size="-1">きょうのイソップ童話</font></b><br></br>
- <a href="../../../../douwa/pc/aesop/01/01.htm">
- <font size="-1">欲張りなイヌ</font>
- </a>
- </td>
- </tr>
- <tr>
- <td height="50" bgcolor="#ECFFEC"><b><font size="-1">きょうの江戸小話</font></b><br></br>
- <a href="../../../../douwa/pc/kobanashi/01/01.htm">
- <font size="-1">ぞうきんとお年玉</font>
- </a>
- </td>
- </tr>
- <tr>
- <td height="50" bgcolor="#ECFFEC"><b><font size="-1">きょうの百物語</font></b><br></br>
- <a href="../../../../douwa/pc/kaidan/01/01.htm">
- <font size="-1">百物語の幽霊</font>
- </a>
- </td>
- </tr>
- </tbody>
- </table>
- <table width="100%" border="0" bgcolor="#C8FFC8">
- <tbody>
- <tr>
- <td height="30" align="center" bgcolor="#C8FFC8"><b><font size="-1">福娘のサイト</font></b></td>
- </tr>
- <tr>
- <td height="60" bgcolor="#ECFFEC">
- <font size="-1"><b>366日への旅</b><br></br> <a href="http://hukumusume.com/366/">毎日の記念日・誕生花 ・有名人の誕生日と性格判断</a></font>
- </td>
- </tr>
- <tr>
- <td height="60" bgcolor="#ECFFEC">
- <font size="-1"><b>福娘童話集</b><br></br> <a href="http://hukumusume.com/douwa/">世界と日本の童話と昔話</a></font>
- </td>
- </tr>
- <tr>
- <td height="60" bgcolor="#ECFFEC">
- <font size="-1"><b>女の子応援サイト -さくら-</b><br></br> <a href="http://hukumusume.com/sakura/index.html">誕生日占い、お仕事紹介、おまじない、など</a></font>
- </td>
- </tr>
- <tr>
- <td height="60" bgcolor="#ECFFEC">
- <font size="-1"><b>子どもの病気相談所</b><br></br> <a href="http://hukumusume.com/my_baby/sick/">病気検索と対応方法、症状から検索するWEB問診</a></font>
- </td>
- </tr>
- <tr>
- <td height="60" bgcolor="#ECFFEC">
- <font size="-1"><b>世界60秒巡り</b><br></br> <a href="http://hukumusume.com/366/world/">国旗国歌や世界遺産など、世界の国々の豆知識</a></font>
- </td>
- </tr>
- </tbody>
- </table>
- </td>
- </tr>
- </tbody>
- </table>
-</body>
+ //]]>
+ </script>
+ <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
+ </p>
+ </td>
+ <td width="10">
+ <img src="file:///C|/Documents%20and%20Settings/%E7%A6%8F%E5%A8%98note/%E3%83%87%E3%82%B9%E3%82%AF%E3%83%88%E3%83%83%E3%83%97/company_website15/image/spacer.gif" width="1" height="1" />
+ </td>
+ <td width="166" valign="top">
+ <table width="100%" border="0" cellpadding="0" cellspacing="0" bgcolor="#C8FFC8">
+ <tbody>
+ <tr>
+ <td height="7" valign="top">
+ <img src="../../../../366/logo_bana/corner_1.gif" width="7" height="7" />
+ </td>
+ <td></td>
+ <td align="right" valign="top">
+ <img src="../../../../366/logo_bana/corner_2.gif" width="7" height="7" />
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ <table width="166" border="0" bgcolor="#C8FFC8">
+ <tbody>
+ <tr>
+ <td width="156" height="50">
+ &#160;&#160;&#160;&#160; <font size="-1"><b>1月 1日の豆知識</b></font><br />
+ <br />
+ <font size="-2"><u><br />
+ <br />
+ 366日への旅</u></font>
+ </td>
+ </tr>
+ <tr>
+ <td height="50" bgcolor="#ECFFEC">
+ <img src="file:///C|/Documents%20and%20Settings/%E7%A6%8F%E5%A8%98note/%E3%83%87%E3%82%B9%E3%82%AF%E3%83%88%E3%83%83%E3%83%97" width="1" height="1" /><b><font size="-1">きょうの記念日</font></b><br />
+ <br />
+ <a href="../../../../366/kinenbi/pc/01gatu/1_01.htm"><font size="-1">元旦</font></a>
+ </td>
+ </tr>
+ <tr>
+ <td height="50" bgcolor="#ECFFEC">
+ <img src="file:///C|/Documents%20and%20Settings/%E7%A6%8F%E5%A8%98note/%E3%83%87%E3%82%B9%E3%82%AF%E3%83%88%E3%83%83%E3%83%97/company_website15/image/spacer.gif" width="1" height="1" /><b><font size="-1">きょうの誕生花</font></b><br />
+ <br />
+ <a href="../../../../366/hana/pc/01gatu/1_01.htm"><font size="-1">松(まつ)</font></a>
+ </td>
+ </tr>
+ <tr>
+ <td height="50" bgcolor="#ECFFEC">
+ <b><font size="-1">きょうの誕生日・出来事</font></b><br />
+ <br />
+ <a href="../../../../366/birthday/pc/01gatu/1_01.htm"><font size="-1">1949年 Mr.マリック(マジシャン)</font></a>
+ </td>
+ </tr>
+ <tr>
+ <td height="50" bgcolor="#ECFFEC">
+ <b><font size="-1">恋の誕生日占い</font></b><br />
+ <br />
+ <a href="../../../../sakura/uranai/birthday/01/01.html"><font size="-1">自分の考えをしっかりと持った女の子。</font></a>
+ </td>
+ </tr>
+ <tr>
+ <td height="50" bgcolor="#ECFFEC">
+ <b><font size="-1">なぞなぞ小学校</font></b><br />
+ <br />
+ <a href="../../../../nazonazo/new/2012/04/02.html"><font size="-1">○(丸)を取ったらお母さんになってしまう男の人は?</font></a>
+ </td>
+ </tr>
+ <tr>
+ <td height="50" bgcolor="#ECFFEC">
+ <b><font size="-1">あこがれの職業紹介</font></b><br />
+ <br />
+ <a href="../../../../sakura/navi/work/2017/041.html"><font size="-1">歌手</font></a>
+ </td>
+ </tr>
+ <tr>
+ <td height="50" bgcolor="#ECFFEC">
+ <b><font size="-1">恋の魔法とおまじない</font></b> 001<br />
+ <br />
+ <a href="../../../../omajinai/new/2012/00/re01.html"><font size="-1">両思いになれる おまじない</font></a>
+ </td>
+ </tr>
+ <tr>
+ <td height="50" bgcolor="#C8FFC8">
+ <font size="-1">  <b>1月 1日の童話・昔話</b><br />
+ <br />
+ <u><font size="-2"><br />
+ <br />
+ 福娘童話集</font></u></font>
+ </td>
+ </tr>
+ <tr>
+ <td height="50" bgcolor="#ECFFEC">
+ <b><font size="-1">きょうの日本昔話</font></b><br />
+ <br />
+ <a href="../../../../douwa/pc/jap/01/01.htm"><font size="-1">ネコがネズミを追いかける訳</font></a>
+ </td>
+ </tr>
+ <tr>
+ <td height="50" bgcolor="#ECFFEC">
+ <b><font size="-1">きょうの世界昔話<img src="file:///C|/Documents%20and%20Settings/%E7%A6%8F%E5%A8%98note/%E3%83%87%E3%82%B9%E3%82%AF%E3%83%88%E3%83%83%E3%83%97/company_website15/image/spacer.gif" width="1" height="1" /></font></b><br />
+ <br />
+ <a href="../../../../douwa/pc/world/01/01a.htm"><font size="-1">モンゴルの十二支話</font></a>
+ </td>
+ </tr>
+ <tr>
+ <td height="50" bgcolor="#ECFFEC">
+ <img src="file:///C|/Documents%20and%20Settings/%E7%A6%8F%E5%A8%98note/%E3%83%87%E3%82%B9%E3%82%AF%E3%83%88%E3%83%83%E3%83%97/company_website15/image/spacer.gif" width="1" height="1" /><b><font size="-1">きょうの日本民話</font></b><br />
+ <br />
+ <a href="../../../../douwa/pc/minwa/01/01c.html"><font size="-1">仕事の取替えっこ</font></a>
+ </td>
+ </tr>
+ <tr>
+ <td height="50" bgcolor="#ECFFEC">
+ <b><font size="-1">きょうのイソップ童話</font></b><br />
+ <br />
+ <a href="../../../../douwa/pc/aesop/01/01.htm"><font size="-1">欲張りなイヌ</font></a>
+ </td>
+ </tr>
+ <tr>
+ <td height="50" bgcolor="#ECFFEC">
+ <b><font size="-1">きょうの江戸小話</font></b><br />
+ <br />
+ <a href="../../../../douwa/pc/kobanashi/01/01.htm"><font size="-1">ぞうきんとお年玉</font></a>
+ </td>
+ </tr>
+ <tr>
+ <td height="50" bgcolor="#ECFFEC">
+ <b><font size="-1">きょうの百物語</font></b><br />
+ <br />
+ <a href="../../../../douwa/pc/kaidan/01/01.htm"><font size="-1">百物語の幽霊</font></a>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ <table width="100%" border="0" bgcolor="#C8FFC8">
+ <tbody>
+ <tr>
+ <td height="30" align="center" bgcolor="#C8FFC8">
+ <b><font size="-1">福娘のサイト</font></b>
+ </td>
+ </tr>
+ <tr>
+ <td height="60" bgcolor="#ECFFEC">
+ <font size="-1"><b>366日への旅</b><br />
+ <br />
+ <a href="http://hukumusume.com/366/">毎日の記念日・誕生花 ・有名人の誕生日と性格判断</a></font>
+ </td>
+ </tr>
+ <tr>
+ <td height="60" bgcolor="#ECFFEC">
+ <font size="-1"><b>福娘童話集</b><br />
+ <br />
+ <a href="http://hukumusume.com/douwa/">世界と日本の童話と昔話</a></font>
+ </td>
+ </tr>
+ <tr>
+ <td height="60" bgcolor="#ECFFEC">
+ <font size="-1"><b>女の子応援サイト -さくら-</b><br />
+ <br />
+ <a href="http://hukumusume.com/sakura/index.html">誕生日占い、お仕事紹介、おまじない、など</a></font>
+ </td>
+ </tr>
+ <tr>
+ <td height="60" bgcolor="#ECFFEC">
+ <font size="-1"><b>子どもの病気相談所</b><br />
+ <br />
+ <a href="http://hukumusume.com/my_baby/sick/">病気検索と対応方法、症状から検索するWEB問診</a></font>
+ </td>
+ </tr>
+ <tr>
+ <td height="60" bgcolor="#ECFFEC">
+ <font size="-1"><b>世界60秒巡り</b><br />
+ <br />
+ <a href="http://hukumusume.com/366/world/">国旗国歌や世界遺産など、世界の国々の豆知識</a></font>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </body>
</html>
diff --git a/test/test-pages/iab-1/expected-metadata.json b/test/test-pages/iab-1/expected-metadata.json
index 8f651b4..b1f885e 100644
--- a/test/test-pages/iab-1/expected-metadata.json
+++ b/test/test-pages/iab-1/expected-metadata.json
@@ -1,5 +1,5 @@
{
- "Title": "Getting LEAN with Digital Ad UX",
+ "Title": "Getting LEAN with Digital Ad UX | IAB",
"Author": "By\n\t\t\tScott Cunningham",
"Excerpt": "We messed up. As technologists, tasked with delivering content and services to users, we lost track of the user experience. Twenty years ago we saw an explosion of websites, built by developers around the world, providing all forms of content. This was the beginning of an age of enlightenment, the intersection of content and technology. … Continued"
}
diff --git a/test/test-pages/iab-1/expected.html b/test/test-pages/iab-1/expected.html
index 8aaa4c8..96e0f24 100644
--- a/test/test-pages/iab-1/expected.html
+++ b/test/test-pages/iab-1/expected.html
@@ -18,8 +18,7 @@
<p>Finally, we must do this in an increasingly fragmented market, across screens. We must do this in environments where entire sites are blocked, purposefully or not. Yes, it is disappointing that our development efforts will have to manage with multiple frameworks while we work to supply the economic engine to sustain an open internet. However, our goal is still to provide diverse content and voices to as many connected users as possible around the world.</p>
<p>That is user experience.</p>
-<table><tbody><tr><td>IAB Tech Lab Members can join the IAB Tech Lab Ad Blocking Working Group, please email <a href="mailto:[email protected]">[email protected]</a> for more information.</td>
-</tr></tbody></table><p>Read <a href="http://www.iab.com/insights/ad-blocking/" target="_blank">more about ad blocking here</a>.</p>
+<p>IAB Tech Lab Members can join the IAB Tech Lab Ad Blocking Working Group, please email <a href="mailto:[email protected]">[email protected]</a> for more information.</p><p>Read <a href="http://www.iab.com/insights/ad-blocking/" target="_blank">more about ad blocking here</a>.</p>
</div>
</div><div><div>
<figure><img alt="Auto Draft 14" src="http://www.iab.com/wp-content/uploads/2015/05/auto-draft-16-150x150.jpg"></img></figure><div>
diff --git a/test/test-pages/ietf-1/expected.html b/test/test-pages/ietf-1/expected.html
index aa5b470..0202963 100644
--- a/test/test-pages/ietf-1/expected.html
+++ b/test/test-pages/ietf-1/expected.html
@@ -1,6 +1,5 @@
-<div>
-
-<span>[<a href="http://fakehost/test/../html/" title="Document search and retrieval page">Docs</a>] [<a href="https://tools.ietf.org/id/draft-dejong-remotestorage-04.txt" title="Plaintext version of this document">txt</a>|<a href="http://fakehost/pdf/draft-dejong-remotestorage-04.txt" title="PDF version of this document">pdf</a>] [<a href="https://datatracker.ietf.org/doc/draft-dejong-remotestorage" title="IESG Datatracker information for this document">Tracker</a>] [<a href="mailto:[email protected]?subject=draft-dejong-remotestorage%20" title="Send email to the document authors">Email</a>] [<a href="http://fakehost/rfcdiff?difftype=--hwdiff&amp;url2=draft-dejong-remotestorage-04.txt" title="Inline diff (wdiff)">Diff1</a>] [<a href="http://fakehost/rfcdiff?url2=draft-dejong-remotestorage-04.txt" title="Side-by-side diff">Diff2</a>] [<a href="http://fakehost/idnits?url=https://tools.ietf.org/id/draft-dejong-remotestorage-04.txt" title="Run an idnits check of this document">Nits</a>] </span><br></br><span> </span><p><span>Versions: <a href="http://fakehost/test/draft-dejong-remotestorage-00">00</a> <a href="http://fakehost/test/draft-dejong-remotestorage-01">01</a> <a href="http://fakehost/test/draft-dejong-remotestorage-02">02</a> <a href="http://fakehost/test/draft-dejong-remotestorage-03">03</a> <a href="http://fakehost/test/draft-dejong-remotestorage-04">04</a> </span><span> </span></p><p><pre>INTERNET DRAFT Michiel B. de Jong
+<div id="readability-page-1" class="page"> <span>[<a href="http://fakehost/html/" title="Document search and retrieval page">Docs</a>] [<a href="https://tools.ietf.org/id/draft-dejong-remotestorage-04.txt" title="Plaintext version of this document">txt</a>|<a href="http://fakehost/pdf/draft-dejong-remotestorage-04.txt" title="PDF version of this document">pdf</a>] [<a href="https://datatracker.ietf.org/doc/draft-dejong-remotestorage" title="IESG Datatracker information for this document">Tracker</a>] [<a href="mailto:[email protected]?subject=draft-dejong-remotestorage%20" title="Send email to the document authors">Email</a>] [<a href="http://fakehost/rfcdiff?difftype=--hwdiff&amp;url2=draft-dejong-remotestorage-04.txt" title="Inline diff (wdiff)">Diff1</a>] [<a href="http://fakehost/rfcdiff?url2=draft-dejong-remotestorage-04.txt" title="Side-by-side diff">Diff2</a>] [<a href="http://fakehost/idnits?url=https://tools.ietf.org/id/draft-dejong-remotestorage-04.txt" title="Run an idnits check of this document">Nits</a>] </span><br/> <span> </span><br/> <span>Versions: <a href="http://fakehost/test/draft-dejong-remotestorage-00">00</a> <a href="http://fakehost/test/draft-dejong-remotestorage-01">01</a> <a href="http://fakehost/test/draft-dejong-remotestorage-02">02</a> <a href="http://fakehost/test/draft-dejong-remotestorage-03">03</a> <a href="http://fakehost/test/draft-dejong-remotestorage-04">04</a> </span><br/> <span> </span><br/>
+ <pre>INTERNET DRAFT Michiel B. de Jong
Document: <a href="http://fakehost/test/draft-dejong-remotestorage-04">draft-dejong-remotestorage-04</a> IndieHosters
F. Kooman
Intended Status: Proposed Standard (independent)
@@ -53,7 +52,8 @@ Copyright Notice
<span>de Jong [Page 1]</span>
-</pre><pre><a href="#page-2" id="page-2" name="page-2"> </a>
+</pre>
+ <pre><a name="page-2" id="page-2" href="#page-2"> </a>
<span>Internet-Draft remoteStorage December 2014</span>
@@ -89,7 +89,7 @@ Table of Contents
<a href="#section-18">18</a>. Authors' addresses............................................<a href="#page-22">22</a>
-<span><a href="#section-1" name="section-1">1</a>. Introduction</span>
+<span><a name="section-1" href="#section-1">1</a>. Introduction</span>
Many services for data storage are available over the internet. This
specification describes a vendor-independent interface for such
@@ -103,7 +103,8 @@ Table of Contents
<span>de Jong [Page 2]</span>
-</pre><pre><a href="#page-3" id="page-3" name="page-3"> </a>
+</pre>
+ <pre><a name="page-3" id="page-3" href="#page-3"> </a>
<span>Internet-Draft remoteStorage December 2014</span>
@@ -122,7 +123,7 @@ Table of Contents
The exact details of these four actions are described in this
specification.
-<span><a href="#section-2" name="section-2">2</a>. Terminology</span>
+<span><a name="section-2" href="#section-2">2</a>. Terminology</span>
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
@@ -135,7 +136,7 @@ Table of Contents
implement the general requirement when such failure would result in
interoperability failure.
-<span><a href="#section-3" name="section-3">3</a>. Storage model</span>
+<span><a name="section-3" href="#section-3">3</a>. Storage model</span>
The server stores data in nodes that form a tree structure.
Internal nodes are called 'folders' and leaf nodes are called
@@ -153,7 +154,8 @@ Table of Contents
<span>de Jong [Page 3]</span>
-</pre><pre><a href="#page-4" id="page-4" name="page-4"> </a>
+</pre>
+ <pre><a name="page-4" id="page-4" href="#page-4"> </a>
<span>Internet-Draft remoteStorage December 2014</span>
@@ -163,7 +165,7 @@ Table of Contents
* content length
* content
-<span><a href="#section-4" name="section-4">4</a>. Requests</span>
+<span><a name="section-4" href="#section-4">4</a>. Requests</span>
Client-to-server requests SHOULD be made over https [<a href="#ref-HTTPS">HTTPS</a>], and
servers MUST comply with HTTP/1.1 [<a href="#ref-HTTP">HTTP</a>]. Specifically, they
@@ -203,7 +205,8 @@ Table of Contents
<span>de Jong [Page 4]</span>
-</pre><pre><a href="#page-5" id="page-5" name="page-5"> </a>
+</pre>
+ <pre><a name="page-5" id="page-5" href="#page-5"> </a>
<span>Internet-Draft remoteStorage December 2014</span>
@@ -253,7 +256,8 @@ Table of Contents
<span>de Jong [Page 5]</span>
-</pre><pre><a href="#page-6" id="page-6" name="page-6"> </a>
+</pre>
+ <pre><a name="page-6" id="page-6" href="#page-6"> </a>
<span>Internet-Draft remoteStorage December 2014</span>
@@ -303,11 +307,12 @@ Table of Contents
<span>de Jong [Page 6]</span>
-</pre><pre><a href="#page-7" id="page-7" name="page-7"> </a>
+</pre>
+ <pre><a name="page-7" id="page-7" href="#page-7"> </a>
<span>Internet-Draft remoteStorage December 2014</span>
-<span><a href="#section-5" name="section-5">5</a>. Response codes</span>
+<span><a name="section-5" href="#section-5">5</a>. Response codes</span>
Response codes SHOULD be given as defined by [HTTP, <a href="#section-6">section 6</a>] and
[BEARER, <a href="#section-3.1">section 3.1</a>]. The following is a non-normative checklist
@@ -340,7 +345,7 @@ Table of Contents
Clients SHOULD also handle the case where a response takes too long
to arrive, or where no response is received at all.
-<span><a href="#section-6" name="section-6">6</a>. Versioning</span>
+<span><a name="section-6" href="#section-6">6</a>. Versioning</span>
All successful requests MUST return an 'ETag' header [<a href="#ref-HTTP">HTTP</a>] with, in
the case of GET, the current version, in the case of PUT, the new
@@ -353,7 +358,8 @@ Table of Contents
<span>de Jong [Page 7]</span>
-</pre><pre><a href="#page-8" id="page-8" name="page-8"> </a>
+</pre>
+ <pre><a name="page-8" id="page-8" href="#page-8"> </a>
<span>Internet-Draft remoteStorage December 2014</span>
@@ -370,14 +376,14 @@ Table of Contents
A provider MAY offer version rollback functionality to its users,
but this specification does not define the user interface for that.
-<span><a href="#section-7" name="section-7">7</a>. CORS headers</span>
+<span><a name="section-7" href="#section-7">7</a>. CORS headers</span>
All responses MUST carry CORS headers [<a href="#ref-CORS">CORS</a>]. The server MUST also
reply to OPTIONS requests as per CORS. For GET requests, a wildcard
origin MAY be returned, but for PUT and DELETE requests, the
response MUST echo back the Origin header sent by the client.
-<span><a href="#section-8" name="section-8">8</a>. Session description</span>
+<span><a name="section-8" href="#section-8">8</a>. Session description</span>
The information that a client needs to receive in order to be able
to connect to a server SHOULD reach the client as described in the
@@ -403,7 +409,8 @@ Table of Contents
<span>de Jong [Page 8]</span>
-</pre><pre><a href="#page-9" id="page-9" name="page-9"> </a>
+</pre>
+ <pre><a name="page-9" id="page-9" href="#page-9"> </a>
<span>Internet-Draft remoteStorage December 2014</span>
@@ -418,7 +425,7 @@ Table of Contents
* https://storage.example.com/bob/public/documents/
* https://storage.example.com/bob/public/documents/draft.txt
-<span><a href="#section-9" name="section-9">9</a>. Bearer tokens and access control</span>
+<span><a name="section-9" href="#section-9">9</a>. Bearer tokens and access control</span>
A bearer token represents one or more access scopes. These access
scopes are represented as strings of the form &lt;module&gt; &lt;level&gt;,
@@ -453,12 +460,13 @@ Table of Contents
<span>de Jong [Page 9]</span>
-</pre><pre><a href="#page-10" id="page-10" name="page-10"> </a>
+</pre>
+ <pre><a name="page-10" id="page-10" href="#page-10"> </a>
<span>Internet-Draft remoteStorage December 2014</span>
-<span><a href="#section-10" name="section-10">10</a>. Application-first bearer token issuance</span>
+<span><a name="section-10" href="#section-10">10</a>. Application-first bearer token issuance</span>
To make a remoteStorage server available as 'the remoteStorage of
&lt;account&gt; at &lt;host&gt;', exactly one link of the following format
@@ -503,7 +511,8 @@ Table of Contents
<span>de Jong [Page 10]</span>
-</pre><pre><a href="#page-11" id="page-11" name="page-11"> </a>
+</pre>
+ <pre><a name="page-11" id="page-11" href="#page-11"> </a>
<span>Internet-Draft remoteStorage December 2014</span>
@@ -533,7 +542,7 @@ Table of Contents
client_id parameter in favor of relying on the redirect_uri
parameter for client identification.
-<span><a href="#section-11" name="section-11">11</a>. Storage-first bearer token issuance</span>
+<span><a name="section-11" href="#section-11">11</a>. Storage-first bearer token issuance</span>
The provider MAY also present a dashboard to the user, where they
have some way to add open web app manifests [<a href="#ref-MANIFEST">MANIFEST</a>]. Adding a
@@ -553,7 +562,8 @@ Table of Contents
<span>de Jong [Page 11]</span>
-</pre><pre><a href="#page-12" id="page-12" name="page-12"> </a>
+</pre>
+ <pre><a name="page-12" id="page-12" href="#page-12"> </a>
<span>Internet-Draft remoteStorage December 2014</span>
@@ -591,19 +601,20 @@ Table of Contents
debug tool, thus bypassing the need for an OAuth dance. Clients
SHOULD NOT rely on this in production.
-<span><a href="#section-12" name="section-12">12</a>. Example wire transcripts</span>
+<span><a name="section-12" href="#section-12">12</a>. Example wire transcripts</span>
The following examples are not normative ("\" indicates a line was
wrapped).
-<span><a href="#section-12.1" name="section-12.1">12.1</a>. WebFinger</span>
+<span><a name="section-12.1" href="#section-12.1">12.1</a>. WebFinger</span>
In application-first, an in-browser application might issue the
following request, using XMLHttpRequest and CORS:
<span>de Jong [Page 12]</span>
-</pre><pre><a href="#page-13" id="page-13" name="page-13"> </a>
+</pre>
+ <pre><a name="page-13" id="page-13" href="#page-13"> </a>
<span>Internet-Draft remoteStorage December 2014</span>
@@ -643,7 +654,7 @@ motestorage-04",
}]
}
-<span><a href="#section-12.2" name="section-12.2">12.2</a>. OAuth dialog form</span>
+<span><a name="section-12.2" href="#section-12.2">12.2</a>. OAuth dialog form</span>
Once the in-browser application has discovered the server's OAuth
end-point, it will typically redirect the user to this URL, in
@@ -653,7 +664,8 @@ motestorage-04",
<span>de Jong [Page 13]</span>
-</pre><pre><a href="#page-14" id="page-14" name="page-14"> </a>
+</pre>
+ <pre><a name="page-14" id="page-14" href="#page-14"> </a>
<span>Internet-Draft remoteStorage December 2014</span>
@@ -673,16 +685,16 @@ unhosted.5apps.com&amp;response_type=token HTTP/1.1
&lt;title&gt;Allow access?&lt;/title&gt;
...
-<span><a href="#section-12.3" name="section-12.3">12.3</a>. OAuth dialog form submission</span>
+<span><a name="section-12.3" href="#section-12.3">12.3</a>. OAuth dialog form submission</span>
When the user submits the form, the request would look something
like this:
POST /oauth HTTP/1.1
Host: 3pp.io:4439
- Origin: <a href="https://3pp.io:4439">https://3pp.io:4439</a>
+ Origin: <a href="https://3pp.io:4439/">https://3pp.io:4439</a>
Content-Type: application/x-www-form-urlencoded
- Referer: <a href="https://3pp">https://3pp</a>.io:4439/oauth/michiel?redirect_uri=https%3\
+ Referer: <a href="https://3pp/">https://3pp</a>.io:4439/oauth/michiel?redirect_uri=https%3\
A%2F%2Fdrinks-unhosted.5apps.com%2F&amp;scope=myfavoritedrinks%3Arw&amp;client_\
id=https%3A%2F%2Fdrinks-unhosted.5apps.com&amp;response_type=token
@@ -698,12 +710,13 @@ low
Location:https://drinks-unhosted.5apps.com/#access_token=j2YnGt\
XjzzzHNjkd1CJxoQubA1o%3D&amp;token_type=bearer&amp;state=
-<span><a href="#section-12.4" name="section-12.4">12.4</a>. OPTIONS preflight</span>
+<span><a name="section-12.4" href="#section-12.4">12.4</a>. OPTIONS preflight</span>
<span>de Jong [Page 14]</span>
-</pre><pre><a href="#page-15" id="page-15" name="page-15"> </a>
+</pre>
+ <pre><a name="page-15" id="page-15" href="#page-15"> </a>
<span>Internet-Draft remoteStorage December 2014</span>
@@ -714,46 +727,47 @@ XjzzzHNjkd1CJxoQubA1o%3D&amp;token_type=bearer&amp;state=
OPTIONS /storage/michiel/myfavoritedrinks/ HTTP/1.1
Host: 3pp.io:4439
Access-Control-Request-Method: GET
- Origin: <a href="https://drinks-unhosted.5apps.com">https://drinks-unhosted.5apps.com</a>
+ Origin: <a href="https://drinks-unhosted.5apps.com/">https://drinks-unhosted.5apps.com</a>
Access-Control-Request-Headers: Authorization
Referer: <a href="https://drinks-unhosted.5apps.com/">https://drinks-unhosted.5apps.com/</a>
To which the server can for instance respond:
HTTP/1.1 200 OK
- Access-Control-Allow-Origin: <a href="https://drinks-unhosted.5apps.com">https://drinks-unhosted.5apps.com</a>
+ Access-Control-Allow-Origin: <a href="https://drinks-unhosted.5apps.com/">https://drinks-unhosted.5apps.com</a>
Access-Control-Allow-Methods: GET, PUT, DELETE
Access-Control-Allow-Headers: Authorization, Content-Length, Co\
ntent-Type, Origin, X-Requested-With, If-Match, If-None-Match
-<span><a href="#section-12.5" name="section-12.5">12.5</a>. Initial PUT</span>
+<span><a name="section-12.5" href="#section-12.5">12.5</a>. Initial PUT</span>
An initial PUT may contain an 'If-None-Match: *' header, like this:
PUT /storage/michiel/myfavoritedrinks/test HTTP/1.1
Host: 3pp.io:4439
Content-Length: 91
- Origin: <a href="https://drinks-unhosted.5apps.com">https://drinks-unhosted.5apps.com</a>
+ Origin: <a href="https://drinks-unhosted.5apps.com/">https://drinks-unhosted.5apps.com</a>
Authorization: Bearer j2YnGtXjzzzHNjkd1CJxoQubA1o=
Content-Type: application/json; charset=UTF-8
Referer: <a href="https://drinks-unhosted.5apps.com/?">https://drinks-unhosted.5apps.com/?</a>
If-None-Match: *
- {"name":"test","@context":"<a href="http://remotestorage">http://remotestorage</a>.io/spec/modules\
+ {"name":"test","@context":"<a href="http://remotestorage/">http://remotestorage</a>.io/spec/modules\
/myfavoritedrinks/drink"}
And the server may respond with either a 201 Created or a 200 OK
status:
HTTP/1.1 201 Created
- Access-Control-Allow-Origin: <a href="https://drinks-unhosted.5apps.com">https://drinks-unhosted.5apps.com</a>
+ Access-Control-Allow-Origin: <a href="https://drinks-unhosted.5apps.com/">https://drinks-unhosted.5apps.com</a>
ETag: "1382694045000"
-<span><a href="#section-12.6" name="section-12.6">12.6</a>. Subsequent PUT</span>
+<span><a name="section-12.6" href="#section-12.6">12.6</a>. Subsequent PUT</span>
<span>de Jong [Page 15]</span>
-</pre><pre><a href="#page-16" id="page-16" name="page-16"> </a>
+</pre>
+ <pre><a name="page-16" id="page-16" href="#page-16"> </a>
<span>Internet-Draft remoteStorage December 2014</span>
@@ -764,7 +778,7 @@ ntent-Type, Origin, X-Requested-With, If-Match, If-None-Match
PUT /storage/michiel/myfavoritedrinks/test HTTP/1.1
Host: 3pp.io:4439
Content-Length: 91
- Origin: <a href="https://drinks-unhosted.5apps.com">https://drinks-unhosted.5apps.com</a>
+ Origin: <a href="https://drinks-unhosted.5apps.com/">https://drinks-unhosted.5apps.com</a>
Authorization: Bearer j2YnGtXjzzzHNjkd1CJxoQubA1o=
Content-Type: application/json; charset=UTF-8
Referer: <a href="https://drinks-unhosted.5apps.com/?">https://drinks-unhosted.5apps.com/?</a>
@@ -776,17 +790,17 @@ e.io/spec/modules/myfavoritedrinks/drink"}
And the server may respond with a 412 Conflict or a 200 OK status:
HTTP/1.1 200 OK
- Access-Control-Allow-Origin: <a href="https://drinks-unhosted.5apps.com">https://drinks-unhosted.5apps.com</a>
+ Access-Control-Allow-Origin: <a href="https://drinks-unhosted.5apps.com/">https://drinks-unhosted.5apps.com</a>
ETag: "1382694048000"
-<span><a href="#section-12.7" name="section-12.7">12.7</a>. GET</span>
+<span><a name="section-12.7" href="#section-12.7">12.7</a>. GET</span>
A GET request would also include the bearer token, and optionally
an If-None-Match header:
GET /storage/michiel/myfavoritedrinks/test HTTP/1.1
Host: 3pp.io:4439
- Origin: <a href="https://drinks-unhosted.5apps.com">https://drinks-unhosted.5apps.com</a>
+ Origin: <a href="https://drinks-unhosted.5apps.com/">https://drinks-unhosted.5apps.com</a>
Authorization: Bearer j2YnGtXjzzzHNjkd1CJxoQubA1o=
Referer: <a href="https://drinks-unhosted.5apps.com/?">https://drinks-unhosted.5apps.com/?</a>
If-None-Match: "1382694045000", "1382694048000"
@@ -794,7 +808,7 @@ e.io/spec/modules/myfavoritedrinks/drink"}
And the server may respond with a 304 Not Modified status:
HTTP/1.1 304 Not Modified
- Access-Control-Allow-Origin: <a href="https://drinks-unhosted.5apps.com">https://drinks-unhosted.5apps.com</a>
+ Access-Control-Allow-Origin: <a href="https://drinks-unhosted.5apps.com/">https://drinks-unhosted.5apps.com</a>
ETag: "1382694048000"
Or a 200 OK status, plus a response body:
@@ -803,11 +817,12 @@ e.io/spec/modules/myfavoritedrinks/drink"}
<span>de Jong [Page 16]</span>
-</pre><pre><a href="#page-17" id="page-17" name="page-17"> </a>
+</pre>
+ <pre><a name="page-17" id="page-17" href="#page-17"> </a>
<span>Internet-Draft remoteStorage December 2014</span>
- Access-Control-Allow-Origin: <a href="https://drinks-unhosted.5apps.com">https://drinks-unhosted.5apps.com</a>
+ Access-Control-Allow-Origin: <a href="https://drinks-unhosted.5apps.com/">https://drinks-unhosted.5apps.com</a>
Content-Type: application/json; charset=UTF-8
Content-Length: 106
ETag: "1382694048000"
@@ -821,7 +836,7 @@ ge.io/spec/modules/myfavoritedrinks/drink"}
body:
HTTP/1.1 200 OK
- Access-Control-Allow-Origin: <a href="https://drinks-unhosted.5apps.com">https://drinks-unhosted.5apps.com</a>
+ Access-Control-Allow-Origin: <a href="https://drinks-unhosted.5apps.com/">https://drinks-unhosted.5apps.com</a>
Content-Type: application/ld+json
Content-Length: 171
ETag: "1382694048000"
@@ -836,15 +851,15 @@ charset=UTF-8","Content-Length":106}}}
Not Found status, and no ETag header:
HTTP/1.1 404 Not Found
- Access-Control-Allow-Origin: <a href="https://drinks-unhosted.5apps.com">https://drinks-unhosted.5apps.com</a>
+ Access-Control-Allow-Origin: <a href="https://drinks-unhosted.5apps.com/">https://drinks-unhosted.5apps.com</a>
-<span><a href="#section-12.8" name="section-12.8">12.8</a>. DELETE</span>
+<span><a name="section-12.8" href="#section-12.8">12.8</a>. DELETE</span>
A DELETE request may look like this:
DELETE /storage/michiel/myfavoritedrinks/test HTTP/1.1
Host: 3pp.io:4439
- Origin: <a href="https://drinks-unhosted.5apps.com">https://drinks-unhosted.5apps.com</a>
+ Origin: <a href="https://drinks-unhosted.5apps.com/">https://drinks-unhosted.5apps.com</a>
Authorization: Bearer j2YnGtXjzzzHNjkd1CJxoQubA1o=
Content-Type: application/json; charset=UTF-8
Referer: <a href="https://drinks-unhosted.5apps.com/?">https://drinks-unhosted.5apps.com/?</a>
@@ -853,17 +868,18 @@ charset=UTF-8","Content-Length":106}}}
<span>de Jong [Page 17]</span>
-</pre><pre><a href="#page-18" id="page-18" name="page-18"> </a>
+</pre>
+ <pre><a name="page-18" id="page-18" href="#page-18"> </a>
<span>Internet-Draft remoteStorage December 2014</span>
And the server may respond with a 412 Conflict or a 200 OK status:
HTTP/1.1 412 Conflict
- Access-Control-Allow-Origin: <a href="https://drinks-unhosted.5apps.com">https://drinks-unhosted.5apps.com</a>
+ Access-Control-Allow-Origin: <a href="https://drinks-unhosted.5apps.com/">https://drinks-unhosted.5apps.com</a>
ETag: "1382694048000"
-<span><a href="#section-13" name="section-13">13</a>. Distributed versioning</span>
+<span><a name="section-13" href="#section-13">13</a>. Distributed versioning</span>
This section is non-normative, and is intended to explain some of
the design choices concerning ETags and folder listings. At the
@@ -903,7 +919,8 @@ charset=UTF-8","Content-Length":106}}}
<span>de Jong [Page 18]</span>
-</pre><pre><a href="#page-19" id="page-19" name="page-19"> </a>
+</pre>
+ <pre><a name="page-19" id="page-19" href="#page-19"> </a>
<span>Internet-Draft remoteStorage December 2014</span>
@@ -925,7 +942,7 @@ charset=UTF-8","Content-Length":106}}}
but it is up to whichever client discovers a given version
conflict, to resolve it.
-<span><a href="#section-14" name="section-14">14</a>. Security Considerations</span>
+<span><a name="section-14" href="#section-14">14</a>. Security Considerations</span>
To prevent man-in-the-middle attacks, the use of https instead of
http is important for both the interface itself and all end-points
@@ -953,7 +970,8 @@ charset=UTF-8","Content-Length":106}}}
<span>de Jong [Page 19]</span>
-</pre><pre><a href="#page-20" id="page-20" name="page-20"> </a>
+</pre>
+ <pre><a name="page-20" id="page-20" href="#page-20"> </a>
<span>Internet-Draft remoteStorage December 2014</span>
@@ -970,7 +988,7 @@ charset=UTF-8","Content-Length":106}}}
The server SHOULD also detect and stop denial-of-service attacks
that aim to overwhelm its interface with too much traffic.
-<span><a href="#section-15" name="section-15">15</a>. IANA Considerations</span>
+<span><a name="section-15" href="#section-15">15</a>. IANA Considerations</span>
This document registers the 'remotestorage' link relation, as well
as the following WebFinger properties:
@@ -980,7 +998,7 @@ charset=UTF-8","Content-Length":106}}}
* "<a href="http://tools.ietf.org/html/rfc7233">http://tools.ietf.org/html/rfc7233</a>"
* "<a href="http://remotestorage.io/spec/web-authoring">http://remotestorage.io/spec/web-authoring</a>"
-<span><a href="#section-16" name="section-16">16</a>. Acknowledgements</span>
+<span><a name="section-16" href="#section-16">16</a>. Acknowledgements</span>
The authors would like to thank everybody who contributed to the
development of this protocol, including Kenny Bentley, Javier Diaz,
@@ -993,86 +1011,88 @@ charset=UTF-8","Content-Length":106}}}
Rick van Rein, Mark Nottingham, Julian Reschke, and Markus
Lanthaler, among many others.
-<span><a href="#section-17" name="section-17">17</a>. References</span>
+<span><a name="section-17" href="#section-17">17</a>. References</span>
-<span><a href="#section-17.1" name="section-17.1">17.1</a>. Normative References</span>
+<span><a name="section-17.1" href="#section-17.1">17.1</a>. Normative References</span>
- [<a id="ref-WORDS" name="ref-WORDS">WORDS</a>]
+ [<a name="ref-WORDS" id="ref-WORDS">WORDS</a>]
Bradner, S., "Key words for use in RFCs to Indicate Requirement
Levels", <a href="http://fakehost/test/bcp14">BCP 14</a>, <a href="http://fakehost/test/rfc2119">RFC 2119</a>, March 1997.
<span>de Jong [Page 20]</span>
-</pre><pre><a href="#page-21" id="page-21" name="page-21"> </a>
+</pre>
+ <pre><a name="page-21" id="page-21" href="#page-21"> </a>
<span>Internet-Draft remoteStorage December 2014</span>
- [<a id="ref-IRI" name="ref-IRI">IRI</a>]
+ [<a name="ref-IRI" id="ref-IRI">IRI</a>]
Duerst, M., "Internationalized Resource Identifiers (IRIs)",
<a href="http://fakehost/test/rfc3987">RFC 3987</a>, January 2005.
- [<a id="ref-WEBFINGER" name="ref-WEBFINGER">WEBFINGER</a>]
+ [<a name="ref-WEBFINGER" id="ref-WEBFINGER">WEBFINGER</a>]
Jones, P., Salguerio, G., Jones, M, and Smarr, J.,
"WebFinger", <a href="http://fakehost/test/rfc7033">RFC7033</a>, September 2013.
- [<a id="ref-OAUTH" name="ref-OAUTH">OAUTH</a>]
+ [<a name="ref-OAUTH" id="ref-OAUTH">OAUTH</a>]
"<a href="#section-4.2">Section 4.2</a>: Implicit Grant", in: Hardt, D. (ed), "The OAuth
2.0 Authorization Framework", <a href="http://fakehost/test/rfc6749">RFC6749</a>, October 2012.
-<span><a href="#section-17.2" name="section-17.2">17.2</a>. Informative References</span>
+<span><a name="section-17.2" href="#section-17.2">17.2</a>. Informative References</span>
- [<a id="ref-HTTPS" name="ref-HTTPS">HTTPS</a>]
+ [<a name="ref-HTTPS" id="ref-HTTPS">HTTPS</a>]
Rescorla, E., "HTTP Over TLS", <a href="http://fakehost/test/rfc2818">RFC2818</a>, May 2000.
- [<a id="ref-HTTP" name="ref-HTTP">HTTP</a>]
+ [<a name="ref-HTTP" id="ref-HTTP">HTTP</a>]
Fielding et al., "Hypertext Transfer Protocol (HTTP/1.1):
Semantics and Content", <a href="http://fakehost/test/rfc7231">RFC7231</a>, June 2014.
- [<a id="ref-COND" name="ref-COND">COND</a>]
+ [<a name="ref-COND" id="ref-COND">COND</a>]
Fielding et al., "Hypertext Transfer Protocol (HTTP/1.1):
Conditional Requests", <a href="http://fakehost/test/rfc7232">RFC7232</a>, June 2014.
- [<a id="ref-RANGE" name="ref-RANGE">RANGE</a>]
+ [<a name="ref-RANGE" id="ref-RANGE">RANGE</a>]
Fielding et al., "Hypertext Transfer Protocol (HTTP/1.1):
Conditional Requests", <a href="http://fakehost/test/rfc7233">RFC7233</a>, June 2014.
- [<a id="ref-SPDY" name="ref-SPDY">SPDY</a>]
+ [<a name="ref-SPDY" id="ref-SPDY">SPDY</a>]
Mark Belshe, Roberto Peon, "SPDY Protocol - Draft 3.1", <a href="http://www.chromium.org/spdy/spdy-protocol/spdy-protocol-draft3-1">http://</a>
<a href="http://www.chromium.org/spdy/spdy-protocol/spdy-protocol-draft3-1">www.chromium.org/spdy/spdy-protocol/spdy-protocol-draft3-1</a>,
September 2013.
- [<a id="ref-JSON-LD" name="ref-JSON-LD">JSON-LD</a>]
+ [<a name="ref-JSON-LD" id="ref-JSON-LD">JSON-LD</a>]
M. Sporny, G. Kellogg, M. Lanthaler, "JSON-LD 1.0", W3C
Proposed Recommendation,
<a href="http://www.w3.org/TR/2014/REC-json-ld-20140116/">http://www.w3.org/TR/2014/REC-json-ld-20140116/</a>, January 2014.
- [<a id="ref-CORS" name="ref-CORS">CORS</a>]
+ [<a name="ref-CORS" id="ref-CORS">CORS</a>]
van Kesteren, Anne (ed), "Cross-Origin Resource Sharing --
W3C Candidate Recommendation 29 January 2013",
<span>de Jong [Page 21]</span>
-</pre><pre><a href="#page-22" id="page-22" name="page-22"> </a>
+</pre>
+ <pre><a name="page-22" id="page-22" href="#page-22"> </a>
<span>Internet-Draft remoteStorage December 2014</span>
<a href="http://www.w3.org/TR/cors/">http://www.w3.org/TR/cors/</a>, January 2013.
- [<a id="ref-MANIFEST" name="ref-MANIFEST">MANIFEST</a>]
+ [<a name="ref-MANIFEST" id="ref-MANIFEST">MANIFEST</a>]
Mozilla Developer Network (ed), "App manifest -- Revision
330541", <a href="https://developer.mozilla.org/en-">https://developer.mozilla.org/en-</a>
US/Apps/Build/Manifest$revision/566677, April 2014.
- [<a id="ref-DATASTORE" name="ref-DATASTORE">DATASTORE</a>]
+ [<a name="ref-DATASTORE" id="ref-DATASTORE">DATASTORE</a>]
"WebAPI/DataStore", MozillaWiki, retrieved May 2014.
<a href="https://wiki.mozilla.org/WebAPI/DataStore#Manifest">https://wiki.mozilla.org/WebAPI/DataStore#Manifest</a>
- [<a id="ref-KERBEROS" name="ref-KERBEROS">KERBEROS</a>]
+ [<a name="ref-KERBEROS" id="ref-KERBEROS">KERBEROS</a>]
C. Neuman et al., "The Kerberos Network Authentication Service
(V5)", <a href="http://fakehost/test/rfc4120">RFC4120</a>, July 2005.
- [<a id="ref-BEARER" name="ref-BEARER">BEARER</a>]
+ [<a name="ref-BEARER" id="ref-BEARER">BEARER</a>]
M. Jones, D. Hardt, "The OAuth 2.0 Authorization Framework:
Bearer Token Usage", <a href="http://fakehost/test/rfc6750">RFC6750</a>, October 2012.
@@ -1081,7 +1101,7 @@ charset=UTF-8","Content-Length":106}}}
September 2014. <a href="https://github.com/michielbdejong/resite/wiki">https://github.com/michielbdejong/resite/wiki</a>
/Using-remoteStorage-for-web-authoring
-<span><a href="#section-18" name="section-18">18</a>. Authors' addresses</span>
+<span><a name="section-18" href="#section-18">18</a>. Authors' addresses</span>
Michiel B. de Jong
IndieHosters
@@ -1104,7 +1124,6 @@ charset=UTF-8","Content-Length":106}}}
de Jong [Page 22]
-</pre><span><small><small>Html markup produced by rfcmarkup 1.111, available from
+</pre><br/> <span><small><small>Html markup produced by rfcmarkup 1.111, available from
<a href="https://tools.ietf.org/tools/rfcmarkup/">https://tools.ietf.org/tools/rfcmarkup/</a>
-</small></small></span>
-</p></div> \ No newline at end of file
+</small></small></span> </div>
diff --git a/test/test-pages/keep-images/expected.html b/test/test-pages/keep-images/expected.html
index 5a5a176..db2d56b 100644
--- a/test/test-pages/keep-images/expected.html
+++ b/test/test-pages/keep-images/expected.html
@@ -1,381 +1,194 @@
-<div>
- <div>
- <section name="ef8c">
- <div>
- <div>
- <figure id="b9ad" name="b9ad"><div>
-
- <img data-height="1402" data-image-id="1*sLDnS1UWEFIS33uLMxq3cw.jpeg" data-width="2100" src="https://d262ilb51hltx0.cloudfront.net/max/2000/1*sLDnS1UWEFIS33uLMxq3cw.jpeg"></img></div>
- </figure></div>
- <div>
-
-
- <h4 data-align="center" id="9736" name="9736">Welcome to DoctorX’s Barcelona lab, where the drugs you bought online are tested for safety and purity. No questions asked.</h4>
-
- <figure id="7417" name="7417"><div>
-
- <img data-action="zoom" data-action-value="1*3vIhkoHIzcxvUdijoCVx6w.png" data-height="24" data-image-id="1*3vIhkoHIzcxvUdijoCVx6w.png" data-width="1200" src="https://d262ilb51hltx0.cloudfront.net/max/800/1*3vIhkoHIzcxvUdijoCVx6w.png"></img></div>
- </figure><p id="8a83" name="8a83">Standing at a table in a chemistry lab in Barcelona, Cristina Gil Lladanosa
- tears open a silver, smell-proof protective envelope. She slides out a
- transparent bag full of crystals. Around her, machines whir and hum, and
- other researchers mill around in long, white coats.</p>
- <p id="b675" name="b675">She is holding the lab’s latest delivery of a drug bought from the “deep
- web,” the clandestine corner of the internet that isn’t reachable by normal
- search engines, and is home to some sites that require special software
- to access. Labeled as <a data-href="http://en.wikipedia.org/wiki/MDMA" href="http://en.wikipedia.org/wiki/MDMA" rel="nofollow">MDMA</a> (the street
- term is ecstasy), this sample has been shipped from Canada. Lladanosa and
- her colleague Iván Fornís Espinosa have also received drugs, anonymously,
- from people in China, Australia, Europe and the United States.</p>
- <p id="3c0b" name="3c0b">“Here we have speed, MDMA, cocaine, pills,” Lladanosa says, pointing to
- vials full of red, green, blue and clear solutions sitting in labeled boxes.</p>
- </div>
- <div>
- <figure id="c4e6" name="c4e6"><div>
-
- <img data-height="1402" data-image-id="1*4gN1-fzOwCniw-DbqQjDeQ.jpeg" data-width="2100" src="https://d262ilb51hltx0.cloudfront.net/max/2000/1*4gN1-fzOwCniw-DbqQjDeQ.jpeg"></img></div>
- <figcaption>Cristina Gil Lladanosa, at the Barcelona testing lab | photo by Joan Bardeletti</figcaption></figure></div>
- <div>
- <p id="7a54" name="7a54">Since 2011, with the launch of <a data-href="http://en.wikipedia.org/wiki/Silk_Road_%28marketplace%29" href="http://en.wikipedia.org/wiki/Silk_Road_%28marketplace%29" rel="nofollow">Silk Road</a>, anybody has been able to safely buy illegal
- drugs from the deep web and have them delivered to their door. Though the
- FBI shut down that black market in October 2013, other outlets have emerged
- to fill its role. For the last 10 months the lab at which Lladanosa and
- Espinosa work has offered a paid testing service of those drugs. By sending
- in samples for analysis, users can know exactly what it is they are buying,
- and make a more informed decision about whether to ingest the substance.
- The group, called <a data-href="http://energycontrol.org/" href="http://energycontrol.org/" rel="nofollow">Energy Control</a>,
- which has being running “harm reduction” programs since 1999, is the first
- to run a testing service explicitly geared towards verifying those purchases
- from the deep web.</p>
- <p id="4395" name="4395">Before joining Energy Control, Lladanosa briefly worked at a pharmacy,
- whereas Espinosa spent 14 years doing drug analysis. Working at Energy
- Control is “more gratifying,” and “rewarding” than her previous jobs, Lladanosa
- told me. They also receive help from a group of volunteers, made up of
- a mixture of “squatters,” as Espinosa put it, and medical students, who
- prepare the samples for testing.</p>
- <p id="0c18" name="0c18">After weighing out the crystals, aggressively mixing it with methanol
- until dissolved, and delicately pouring the liquid into a tiny brown bottle,
- Lladanosa, a petite woman who is nearly engulfed by her lab coat, is now
- ready to test the sample. She loads a series of three trays on top of a
- large white appliance sitting on a table, called a gas chromatograph (GC).
- A jungle of thick pipes hang from the lab’s ceiling behind it.</p>
- </div>
- <div>
- <figure id="559c" name="559c"><div>
-
- <img data-height="1402" data-image-id="1*2KPmZkIBUrhps-2uwDvYFQ.jpeg" data-width="2100" src="https://d262ilb51hltx0.cloudfront.net/max/2000/1*2KPmZkIBUrhps-2uwDvYFQ.jpeg"></img></div>
- <figcaption>Photo by Joan Bardeletti</figcaption></figure></div>
- <div>
- <p id="1549" name="1549">“Chromatography separates all the substances,” Lladanosa says as she loads
- the machine with an array of drugs sent from the deep web and local Spanish
- users. It can tell whether a sample is pure or contaminated, and if the
- latter, with what.</p>
- <p id="5d0f" name="5d0f">Rushes of hot air blow across the desk as the gas chromatograph blasts
- the sample at 280 degrees Celsius. Thirty minutes later the machine’s robotic
- arm automatically moves over to grip another bottle. The machine will continue
- cranking through the 150 samples in the trays for most of the work week.</p>
- </div>
- <div>
- <figure id="d6aa" name="d6aa"><div>
-
- <img data-height="1241" data-image-id="1*PU40bbbox2Ompc5I3RE99A.jpeg" data-width="2013" src="https://d262ilb51hltx0.cloudfront.net/max/2000/1*PU40bbbox2Ompc5I3RE99A.jpeg"></img></div>
- <figcaption>Photo by Joan Bardeletti</figcaption></figure></div>
- <div>
- <p id="15e0" name="15e0">To get the drugs to Barcelona, a user mails at least 10 milligrams of
- a substance to the offices of the Asociación Bienestar y Desarrollo, the
- non-government organization that oversees Energy Control. The sample then
- gets delivered to the testing service’s laboratory, at the Barcelona Biomedical
- Research Park, a futuristic, seven story building sitting metres away from
- the beach. Energy Control borrows its lab space from a biomedical research
- group for free.</p>
- <p id="2574" name="2574">The tests cost 50 Euro per sample. Users pay, not surprisingly, with Bitcoin.
- In the post announcing Energy Control’s service on the deep web, the group
- promised that “All profits of this service are set aside of maintenance
- of this project.”</p>
- <p id="2644" name="2644">About a week after testing, those results are sent in a PDF to an email
- address provided by the anonymous client.</p>
- <p id="9f91" name="9f91">“The process is quite boring, because you are in a routine,” Lladanosa
- says. But one part of the process is consistently surprising: that moment
- when the results pop up on the screen. “Every time it’s something different.”
- For instance, one cocaine sample she had tested also contained phenacetin,
- a painkiller added to increase the product’s weight; lidocaine, an anesthetic
- that numbs the gums, giving the impression that the user is taking higher
- quality cocaine; and common caffeine.</p>
- <figure id="b821" name="b821"><div>
-
- <img data-action="zoom" data-action-value="1*ohyycinH18fz98TCyUzVgQ.png" data-height="24" data-image-id="1*ohyycinH18fz98TCyUzVgQ.png" data-width="1200" src="https://d262ilb51hltx0.cloudfront.net/max/800/1*ohyycinH18fz98TCyUzVgQ.png"></img></div>
- </figure><p id="39a6" name="39a6">The deep web drug lab is the brainchild of Fernando Caudevilla, a Spanish
- physician who is better known as “DoctorX” on the deep web, a nickname
- given to him by his Energy Control co-workers because of his earlier writing
- about the history, risks and recreational culture of MDMA. In the physical
- world, Caudevilla has worked for over a decade with Energy Control on various
- harm reduction focused projects, most of which have involved giving Spanish
- illegal drug users medical guidance, and often writing leaflets about the
- harms of certain substances.</p>
- </div>
- <div>
- <figure id="eebc" name="eebc"><div>
-
- <img data-height="1241" data-image-id="1*mKvUNOAVQxl6atCbxbCZsg.jpeg" data-width="2100" src="https://d262ilb51hltx0.cloudfront.net/max/2000/1*mKvUNOAVQxl6atCbxbCZsg.jpeg"></img></div>
- <figcaption>Fernando Caudevilla, AKA DoctorX. Photo: Joseph Cox</figcaption></figure></div>
- <div>
- <p id="c099" name="c099">Caudevilla first ventured into Silk Road forums in April 2013. “I would
- like to contribute to this forum offering professional advice in topics
- related to drug use and health,” he wrote in an <a data-href="http://web.archive.org/web/20131015051405/https://dkn255hz262ypmii.onion.to/index.php?topic=147607.0" href="http://web.archive.org/web/20131015051405/https://dkn255hz262ypmii.onion.to/index.php?topic=147607.0" rel="nofollow">introductory post</a>,
- using his DoctorX alias. Caudevilla offered to provide answers to questions
- that a typical doctor is not prepared, or willing, to respond to, at least
- not without a lecture or a judgment. “This advice cannot replace a complete
- face-to-face medical evaluation,” he wrote, “but I know how difficult it
- can be to talk frankly about these things.”</p>
- <p id="ff1d" name="ff1d">The requests flooded in. A diabetic asked what effect MDMA has on blood
- sugar; another what the risks of frequent psychedelic use were for a young
- person. Someone wanted to know whether amphetamine use should be avoided
- during lactation. In all, Fernando’s thread received over 50,000 visits
- and 300 questions before the FBI shut down Silk Road.</p>
- <p id="1f35" name="1f35">“He’s amazing. A gift to this community,” one user wrote on the Silk Road
- 2.0 forum, a site that sprang up after the original. “His knowledge is
- invaluable, and never comes with any judgment.” Up until recently, Caudevilla
- answered questions on the marketplace “Evolution.” Last week, however,
- the administrators of that site <a data-href="http://motherboard.vice.com/read/one-of-the-darknets-biggest-markets-may-have-just-stole-all-its-users-bitcoin" href="http://motherboard.vice.com/read/one-of-the-darknets-biggest-markets-may-have-just-stole-all-its-users-bitcoin" rel="nofollow">pulled a scam</a>,
- shutting the market down and escaping with an estimated $12 million worth
- of Bitcoin.</p>
- <p id="b20f" name="b20f">Caudevilla’s transition from dispensing advice to starting up a no-questions-asked
- drug testing service came as a consequence of his experience on the deep
- web. He’d wondered whether he could help bring more harm reduction services
- to a marketplace without controls. The Energy Control project, as part
- of its mandate of educating drug users and preventing harm, had already
- been carrying out drug testing for local Spanish users since 2001, at music
- festivals, night clubs, or through a drop-in service at a lab in Madrid.</p>
- <p id="f739" name="f739">“I thought, we are doing this in Spain, why don’t we do an international
- drug testing service?” Caudevilla told me when I visited the other Energy
- Control lab, in Madrid. Caudevilla, a stocky character with ear piercings
- and short, shaved hair, has eyes that light up whenever he discusses the
- world of the deep web. Later, via email, he elaborated that it was not
- a hard sell. “It was not too hard to convince them,” he wrote me. Clearly,
- Energy Control believed that the reputation he had earned as an unbiased
- medical professional on the deep web might carry over to the drug analysis
- service, where one needs to establish “credibility, trustworthiness, [and]
- transparency,” Caudevilla said. “We could not make mistakes,” he added.</p>
- </div>
- <div>
- <figure id="4058" name="4058"><div>
-
- <img data-height="3141" data-image-id="1*knT10_FNVUmqQIBLnutmzQ.jpeg" data-width="4400" src="https://d262ilb51hltx0.cloudfront.net/max/2000/1*knT10_FNVUmqQIBLnutmzQ.jpeg"></img></div>
- <figcaption>Photo: Joseph Cox</figcaption></figure></div>
- <div>
- <figure id="818c" name="818c"><div>
-
- <img data-action="zoom" data-action-value="1*ohyycinH18fz98TCyUzVgQ.png" data-height="24" data-image-id="1*ohyycinH18fz98TCyUzVgQ.png" data-width="1200" src="https://d262ilb51hltx0.cloudfront.net/max/800/1*ohyycinH18fz98TCyUzVgQ.png"></img></div>
- </figure><p id="7b5e" name="7b5e">While the Energy Control lab in Madrid lab only tests Spanish drugs from
- various sources, it is the Barcelona location which vets the substances
- bought in the shadowy recesses of of the deep web. Caudevilla no longer
- runs it, having handed it over to his colleague Ana Muñoz. She maintains
- a presence on the deep web forums, answers questions from potential users,
- and sends back reports when they are ready.</p>
- <p id="0f0e" name="0f0e">The testing program exists in a legal grey area. The people who own the
- Barcelona lab are accredited to experiment with and handle drugs, but Energy
- Control doesn’t have this permission itself, at least not in writing.</p>
- <p id="e002" name="e002">“We have a verbal agreement with the police and other authorities. They
- already know what we are doing,” Lladanosa tells me. It is a pact of mutual
- benefit. Energy Control provides the police with information on batches
- of drugs in Spain, whether they’re from the deep web or not, Espinosa says.
- They also contribute to the European Monitoring Centre for Drugs and Drug
- Addiction’s early warning system, a collaboration that attempts to spread
- information about dangerous drugs as quickly as possible.</p>
- <p id="db1b" name="db1b">By the time of my visit in February, Energy Control had received over
- 150 samples from the deep web and have been receiving more at a rate of
- between 4 and 8 a week. Traditional drugs, such as cocaine and MDMA, make
- up about 70 percent of the samples tested, but the Barcelona lab has also
- received samples of the prescription pill codeine, research chemicals and
- synthetic cannabinoids, and even pills of Viagra.</p>
- </div>
- <div>
- <figure id="b885" name="b885"><div>
-
- <img data-height="1402" data-image-id="1*Vr61dyCTRwk6CemmVF8YAQ.jpeg" data-width="2100" src="https://d262ilb51hltx0.cloudfront.net/max/2000/1*Vr61dyCTRwk6CemmVF8YAQ.jpeg"></img></div>
- <figcaption>Photo by Joan Bardeletti</figcaption></figure></div>
- <div>
- <p id="e76f" name="e76f">So it’s fair to make a tentative judgement on what people are paying for
- on the deep web. The verdict thus far? Overall, drugs on the deep web appear
- to be of much higher quality than those found on the street.</p>
- <p id="5352" name="5352">“In general, the cocaine is amazing,” says Caudevilla, saying that the
- samples they’ve seen have purities climbing towards 80 or 90 percent, and
- some even higher. To get an idea of how unusual this is, take a look at
- the <a data-href="http://www.unodc.org/documents/wdr2014/Cocaine_2014_web.pdf" href="http://www.unodc.org/documents/wdr2014/Cocaine_2014_web.pdf" rel="nofollow">United Nations Office on Drugs and Crime World Drug Report 2014</a>,
- which reports that the average quality of street cocaine in Spain is just
- over 40 percent, while in the United Kingdom it is closer to 30 percent.“We
- have found 100 percent [pure] cocaine,” he adds. “That’s really, really
- strange. That means that, technically, this cocaine has been purified,
- with clandestine methods.”</p>
- <p id="a71c" name="a71c">Naturally, identifying vendors who sell this top-of-the-range stuff is
- one of the reasons that people have sent samples to Energy Control. Caudevilla
- was keen to stress that, officially, Energy Control’s service “is not intended
- to be a control of drug quality,” meaning a vetting process for identifying
- the best sellers, but that is exactly how some people have been using it.</p>
- <p id="cb5b" name="cb5b">As one buyer on the Evolution market, elmo666, wrote to me over the site’s
- messaging system, “My initial motivations were selfish. My primary motivation
- was to ensure that I was receiving and continue to receive a high quality
- product, essentially to keep the vendor honest as far as my interactions
- with them went.”</p>
- <p id="d80d" name="d80d">Vendors on deep web markets advertise their product just like any other
- outlet does, using flash sales, gimmicky giveaways and promises of drugs
- that are superior to those of their competitors. The claims, however, can
- turn out to be empty: despite the test results that show that deep web
- cocaine vendors typically sell product that is of a better quality than
- that found on the street, in plenty of cases, the drugs are nowhere near
- as pure as advertised.</p>
- <p id="36de" name="36de">“You won’t be getting anything CLOSE to what you paid for,” one user complained
- about the cocaine from ‘Mirkov’, a vendor on Evolution. “He sells 65% not
- 95%.”</p>
- </div>
- <div>
- <figure id="8544" name="8544"><div>
-
- <img data-height="1402" data-image-id="1*a-1_13xE6_ErQ-QSlz6myw.jpeg" data-width="2100" src="https://d262ilb51hltx0.cloudfront.net/max/2000/1*a-1_13xE6_ErQ-QSlz6myw.jpeg"></img></div>
- <figcaption>Photo by Joan Bardeletti</figcaption></figure></div>
- <div>
- <figure id="d521" name="d521"><div>
-
- <img data-action="zoom" data-action-value="1*ohyycinH18fz98TCyUzVgQ.png" data-height="24" data-image-id="1*ohyycinH18fz98TCyUzVgQ.png" data-width="1200" src="https://d262ilb51hltx0.cloudfront.net/max/800/1*ohyycinH18fz98TCyUzVgQ.png"></img></div>
- </figure><p id="126b" name="126b">Despite the prevalence of people using the service to gauge the quality
- of what goes up their nose, many users send samples to Energy Control in
- the spirit of its original mission: keeping themselves alive and healthy.
- The worst case scenario from drugs purchased on the deep web is, well the
- worst case. That was the outcome when <a data-href="http://www.independent.co.uk/news/uk/crime/teenager-patrick-mcmullen-who-died-while-on-skype-had-bought-drugs-from-silk-road-8942329.html" href="http://www.independent.co.uk/news/uk/crime/teenager-patrick-mcmullen-who-died-while-on-skype-had-bought-drugs-from-silk-road-8942329.html" rel="nofollow">Patrick McMullen,</a> a
- 17-year-old Scottish student, ingested half a gram of MDMA and three tabs
- of LSD, reportedly purchased from the Silk Road. While talking to his friends
- on Skype, his words became slurred and he passed out. Paramedics could
- not revive him. The coroner for that case, Sherrif Payne, who deemed the
- cause of death ecstasy toxicity, told <em>The Independent</em> “You
- never know the purity of what you are taking and you can easily come unstuck.”</p>
- <p id="5e9e" name="5e9e">ScreamMyName, a deep web user who has been active since the original Silk
- Road, wants to alert users to the dangerous chemicals that are often mixed
- with drugs, and is using Energy Control as a means to do so.</p>
- <p id="19a6" name="19a6">“We’re at a time where some vendors are outright sending people poison.
- Some do it unknowingly,” ScreamMyName told me in an encrypted message.
- “Cocaine production in South America is often tainted with either levamisole
- or phenacetine. Both poison to humans and both with severe side effects.”</p>
- <p id="9fef" name="9fef">In the case of Levamisole, those prescribing it are often not doctors
- but veterinarians, as Levamisole is commonly used on animals, primarily
- for the treatment of worms. If ingested by humans it can lead to cases
- of extreme eruptions of the skin, as <a data-href="http://www.ncbi.nlm.nih.gov/pubmed/22127712" href="http://www.ncbi.nlm.nih.gov/pubmed/22127712" rel="nofollow">documented in a study</a> from researchers at the University
- of California, San Francisco. But Lladanosa has found Levamisole in cocaine
- samples; dealers use it to increase the product weight, allowing them to
- stretch their batch further for greater profit — and also, she says, because
- Levamisole has a strong stimulant effect.</p>
- <p id="7886" name="7886">“It got me sick as fuck,” Dr. Feel, an Evolution user, wrote on the site’s
- forums after consuming cocaine that had been cut with 23 percent Levamisole,
- and later tested by Energy Control. “I was laid up in bed for several days
- because of that shit. The first night I did it, I thought I was going to
- die. I nearly drove myself to the ER.”</p>
- <p id="18d3" name="18d3">“More people die because of tainted drugs than the drugs themselves,”
- Dr. Feel added. “It’s the cuts and adulterants that are making people sick
- and killing them.”</p>
- </div>
- <div>
- <figure id="552a" name="552a"><div>
-
- <img data-height="1192" data-image-id="1*IWXhtSsVv0gNnCwnDEXk-Q.jpeg" data-width="2100" src="https://d262ilb51hltx0.cloudfront.net/max/2000/1*IWXhtSsVv0gNnCwnDEXk-Q.jpeg"></img></div>
- <figcaption>Photo by Joan Bardeletti</figcaption></figure></div>
- <div>
- <p id="839a" name="839a">The particular case of cocaine cut with Levamisole is one of the reasons
- that ScreamMyName has been pushing for more drug testing on the deep web
- markets. “I recognize that drug use isn’t exactly healthy, but why exacerbate
- the problem?” he told me when I contacted him after his post. “[Energy
- Control] provides a way for users to test the drugs they’ll use and for
- these very users to know what it is they’re putting in their bodies. Such
- services are in very short supply.”</p>
- <p id="18dc" name="18dc">After sending a number of Energy Control tests himself, ScreamMyName started
- a de facto crowd-sourcing campaign to get more drugs sent to the lab, and
- then shared the results, after throwing in some cash to get the ball rolling.
- <a data-href="https://blockchain.info/address/1Mi6VjMFqjcD48FPV7cnPB24MAtQQenRy3" href="https://blockchain.info/address/1Mi6VjMFqjcD48FPV7cnPB24MAtQQenRy3" rel="nofollow">He set up a Bitcoin wallet</a>, with the hope that users might chip in
- to fund further tests. At the time of writing, the wallet has received
- a total of 1.81 bitcoins; around $430 at today’s exchange rates.</p>
- <p id="dcbd" name="dcbd">In posts to the Evolution community, ScreamMyName pitched this project
- as something that will benefit users and keep drug dealer honest. “When
- the funds build up to a point where we can purchase an [Energy Control]
- test fee, we’ll do a US thread poll for a few days and try to cohesively
- decide on what vendor to test,” he continued.</p>
- </div>
- <div>
- <figure id="9d32" name="9d32"><div>
-
- <img data-height="913" data-image-id="1*NGcrjfkV0l37iQH2uyYjEw.jpeg" data-width="1368" src="https://d262ilb51hltx0.cloudfront.net/max/2000/1*NGcrjfkV0l37iQH2uyYjEw.jpeg"></img></div>
- <figcaption>Photo by Joan Bardeletti</figcaption></figure></div>
- <div>
- <p id="bff6" name="bff6">Other members of the community have been helping out, too. PlutoPete,
- a vendor from the original Silk Road who sold cannabis seeds and other
- legal items, has provided ScreamMyName with packaging to safely send the
- samples to Barcelona. “A box of baggies, and a load of different moisture
- barrier bags,” PlutoPete told me over the phone. “That’s what all the vendors
- use.”</p>
- <p id="bb78" name="bb78">It’s a modest program so far. ScreamMyName told me that so far he had
- gotten enough public funding to purchase five different Energy Control
- tests, in addition to the ten or so he’s sent himself so far. “The program
- created is still in its infancy and it is growing and changing as we go
- along but I have a lot of faith in what we’re doing,” he says.</p>
- <p id="5638" name="5638">But the spirit is contagious: elmo666, the other deep web user testing
- cocaine, originally kept the results of the drug tests to himself, but
- he, too, saw a benefit to distributing the data. “It is clear that it is
- a useful service to other users, keeping vendors honest and drugs (and
- their users) safe,” he told me. He started to report his findings to others
- on the forums, and then created a thread with summaries of the test results,
- as well as comments from the vendors if they provided it. Other users were
- soon basing their decisions on what to buy on elmo666‘s tests.</p>
- <p id="de75" name="de75">“I’m defo trying the cola based on the incredibly helpful elmo and his
- energy control results and recommendations,” wrote user jayk1984. On top
- of this, elmo666 plans to launch an independent site on the deep web that
- will collate all of these results, which should act as a resource for users
- of all the marketplaces.</p>
- <p id="6b72" name="6b72">As word of elmo666's efforts spread, he began getting requests from drug
- dealers who wanted him to use their wares for testing. Clearly, they figured
- that a positive result from Energy Control would be a fantastic marketing
- tool to draw more customers. They even offered elmo666 free samples. (He
- passed.)</p>
- <p id="b008" name="b008">Meanwhile, some in the purchasing community are arguing that those running
- markets on the deep web should be providing quality control themselves.
- PlutoPete told me over the phone that he had been in discussions about
- this with Dread Pirate Roberts, the pseudonymous owner of the original
- Silk Road site. “We [had been] talking about that on a more organized basis
- on Silk Road 1, doing lots of anonymous buys to police each category. But
- of course they took the thing [Silk Road] down before we got it properly
- off the ground,” he lamented.</p>
- <p id="49c8" name="49c8">But perhaps it is best that the users, those who are actually consuming
- the drugs, remain in charge of shaming dealers and warning each other.
- “It’s our responsibility to police the market based on reviews and feedback,”
- elmo666 wrote in an Evolution forum post. It seems that in the lawless
- space of the deep web, where everything from child porn to weapons are
- sold openly, users have cooperated in an organic display of self-regulation
- to stamp out those particular batches of drugs that are more likely to
- harm users.</p>
- <p id="386d" name="386d">“That’s always been the case with the deep web,” PlutoPete told me. Indeed,
- ever since Silk Road, a stable of the drug markets has been the review
- system, where buyers can leave a rating and feedback for vendors, letting
- others know about the reliability of the seller. But DoctorX’s lab, rigorously
- testing the products with scientific instruments, takes it a step further.</p>
- </div>
- <div>
- <figure id="890b" name="890b"><div>
-
- <img data-height="1373" data-image-id="1*WRlKt3q3mt7utmwxcbl3sQ.jpeg" data-width="2100" src="https://d262ilb51hltx0.cloudfront.net/max/2000/1*WRlKt3q3mt7utmwxcbl3sQ.jpeg"></img></div>
- <figcaption>Photo by Joan Bardeletti</figcaption></figure></div>
- <div>
- <p id="b109" name="b109">“In the white market, they have quality control. In the dark market, it
- should be the same,” Cristina Gil Lladanosa says to me before I leave the
- Barcelona lab.</p>
- <p id="e3a4" name="e3a4">A week after I visit the lab, the results of the MDMA arrive in my inbox:
- it is 85 percent pure, with no indications of other active ingredients.
- Whoever ordered that sample from the digital shelves of the deep web, and
- had it shipped to their doorstep in Canada, got hold of some seriously
- good, and relatively safe drugs. And now they know it.</p>
- <figure id="31cf" name="31cf"><div>
-
- <img data-action="zoom" data-action-value="1*320_4I0lxbn5x3bx4XPI5Q.png" data-height="24" data-image-id="1*320_4I0lxbn5x3bx4XPI5Q.png" data-width="1200" src="https://d262ilb51hltx0.cloudfront.net/max/800/1*320_4I0lxbn5x3bx4XPI5Q.png"></img></div>
- </figure><p data-align="center" id="9b87" name="9b87"><em>Top photo by Joan Bardeletti</em>
- </p>
- <p data-align="center" id="c30a" name="c30a">Follow Backchannel: <a data-href="https://twitter.com/backchnnl" href="https://twitter.com/backchnnl" rel="nofollow"><em>Twitter</em></a>
- <em>|</em><a data-href="https://www.facebook.com/pages/Backchannel/1488568504730671" href="https://www.facebook.com/pages/Backchannel/1488568504730671" rel="nofollow"><em>Facebook</em></a>
- </p>
- </div>
- </div>
- </section></div>
- </div> \ No newline at end of file
+<div id="readability-page-1" class="page">
+ <div>
+ <div>
+ <section name="ef8c">
+ <div>
+ <div>
+ <figure name="b9ad" id="b9ad">
+ <div>
+ <p><img data-image-id="1*sLDnS1UWEFIS33uLMxq3cw.jpeg" data-width="2100" data-height="1402" src="https://d262ilb51hltx0.cloudfront.net/max/2000/1*sLDnS1UWEFIS33uLMxq3cw.jpeg" /> </p>
+ </div>
+ </figure>
+ </div>
+ <div>
+ <h4 name="9736" id="9736" data-align="center">Welcome to DoctorX’s Barcelona lab, where the drugs you bought online are tested for safety and purity. No questions asked.</h4>
+ <figure name="7417" id="7417">
+ <div>
+ <p><img data-image-id="1*3vIhkoHIzcxvUdijoCVx6w.png" data-width="1200" data-height="24" data-action="zoom" data-action-value="1*3vIhkoHIzcxvUdijoCVx6w.png" src="https://d262ilb51hltx0.cloudfront.net/max/800/1*3vIhkoHIzcxvUdijoCVx6w.png" /> </p>
+ </div>
+ </figure>
+ <p name="8a83" id="8a83">Standing at a table in a chemistry lab in Barcelona, Cristina Gil Lladanosa tears open a silver, smell-proof protective envelope. She slides out a transparent bag full of crystals. Around her, machines whir and hum, and other researchers mill around in long, white coats.</p>
+ <p name="b675" id="b675">She is holding the lab’s latest delivery of a drug bought from the “deep web,” the clandestine corner of the internet that isn’t reachable by normal search engines, and is home to some sites that require special software to access. Labeled as <a href="http://en.wikipedia.org/wiki/MDMA" data-href="http://en.wikipedia.org/wiki/MDMA" rel="nofollow">MDMA</a> (the street term is ecstasy), this sample has been shipped from Canada. Lladanosa and her colleague Iván Fornís Espinosa have also received drugs, anonymously, from people in China, Australia, Europe and the United States.</p>
+ <p name="3c0b" id="3c0b">“Here we have speed, MDMA, cocaine, pills,” Lladanosa says, pointing to vials full of red, green, blue and clear solutions sitting in labeled boxes.</p>
+ </div>
+ <div>
+ <figure name="c4e6" id="c4e6">
+ <div>
+ <p><img data-image-id="1*4gN1-fzOwCniw-DbqQjDeQ.jpeg" data-width="2100" data-height="1402" src="https://d262ilb51hltx0.cloudfront.net/max/2000/1*4gN1-fzOwCniw-DbqQjDeQ.jpeg" /> </p>
+ </div>
+ <figcaption>Cristina Gil Lladanosa, at the Barcelona testing lab | photo by Joan Bardeletti</figcaption>
+ </figure>
+ </div>
+ <div>
+ <p name="7a54" id="7a54">Since 2011, with the launch of <a href="http://en.wikipedia.org/wiki/Silk_Road_%28marketplace%29" data-href="http://en.wikipedia.org/wiki/Silk_Road_%28marketplace%29" rel="nofollow">Silk Road</a>, anybody has been able to safely buy illegal drugs from the deep web and have them delivered to their door. Though the FBI shut down that black market in October 2013, other outlets have emerged to fill its role. For the last 10 months the lab at which Lladanosa and Espinosa work has offered a paid testing service of those drugs. By sending in samples for analysis, users can know exactly what it is they are buying, and make a more informed decision about whether to ingest the substance. The group, called <a href="http://energycontrol.org/" data-href="http://energycontrol.org/" rel="nofollow">Energy Control</a>, which has being running “harm reduction” programs since 1999, is the first to run a testing service explicitly geared towards verifying those purchases from the deep web.</p>
+ <p name="4395" id="4395">Before joining Energy Control, Lladanosa briefly worked at a pharmacy, whereas Espinosa spent 14 years doing drug analysis. Working at Energy Control is “more gratifying,” and “rewarding” than her previous jobs, Lladanosa told me. They also receive help from a group of volunteers, made up of a mixture of “squatters,” as Espinosa put it, and medical students, who prepare the samples for testing.</p>
+ <p name="0c18" id="0c18">After weighing out the crystals, aggressively mixing it with methanol until dissolved, and delicately pouring the liquid into a tiny brown bottle, Lladanosa, a petite woman who is nearly engulfed by her lab coat, is now ready to test the sample. She loads a series of three trays on top of a large white appliance sitting on a table, called a gas chromatograph (GC). A jungle of thick pipes hang from the lab’s ceiling behind it.</p>
+ </div>
+ <div>
+ <figure name="559c" id="559c">
+ <div>
+ <p><img data-image-id="1*2KPmZkIBUrhps-2uwDvYFQ.jpeg" data-width="2100" data-height="1402" src="https://d262ilb51hltx0.cloudfront.net/max/2000/1*2KPmZkIBUrhps-2uwDvYFQ.jpeg" /> </p>
+ </div>
+ <figcaption>Photo by Joan Bardeletti</figcaption>
+ </figure>
+ </div>
+ <div>
+ <p name="1549" id="1549">“Chromatography separates all the substances,” Lladanosa says as she loads the machine with an array of drugs sent from the deep web and local Spanish users. It can tell whether a sample is pure or contaminated, and if the latter, with what.</p>
+ <p name="5d0f" id="5d0f">Rushes of hot air blow across the desk as the gas chromatograph blasts the sample at 280 degrees Celsius. Thirty minutes later the machine’s robotic arm automatically moves over to grip another bottle. The machine will continue cranking through the 150 samples in the trays for most of the work week.</p>
+ </div>
+ <div>
+ <figure name="d6aa" id="d6aa">
+ <div>
+ <p><img data-image-id="1*PU40bbbox2Ompc5I3RE99A.jpeg" data-width="2013" data-height="1241" src="https://d262ilb51hltx0.cloudfront.net/max/2000/1*PU40bbbox2Ompc5I3RE99A.jpeg" /> </p>
+ </div>
+ <figcaption>Photo by Joan Bardeletti</figcaption>
+ </figure>
+ </div>
+ <div>
+ <p name="15e0" id="15e0">To get the drugs to Barcelona, a user mails at least 10 milligrams of a substance to the offices of the Asociación Bienestar y Desarrollo, the non-government organization that oversees Energy Control. The sample then gets delivered to the testing service’s laboratory, at the Barcelona Biomedical Research Park, a futuristic, seven story building sitting metres away from the beach. Energy Control borrows its lab space from a biomedical research group for free.</p>
+ <p name="2574" id="2574">The tests cost 50 Euro per sample. Users pay, not surprisingly, with Bitcoin. In the post announcing Energy Control’s service on the deep web, the group promised that “All profits of this service are set aside of maintenance of this project.”</p>
+ <p name="2644" id="2644">About a week after testing, those results are sent in a PDF to an email address provided by the anonymous client.</p>
+ <p name="9f91" id="9f91">“The process is quite boring, because you are in a routine,” Lladanosa says. But one part of the process is consistently surprising: that moment when the results pop up on the screen. “Every time it’s something different.” For instance, one cocaine sample she had tested also contained phenacetin, a painkiller added to increase the product’s weight; lidocaine, an anesthetic that numbs the gums, giving the impression that the user is taking higher quality cocaine; and common caffeine.</p>
+ <figure name="b821" id="b821">
+ <div>
+ <p><img data-image-id="1*ohyycinH18fz98TCyUzVgQ.png" data-width="1200" data-height="24" data-action="zoom" data-action-value="1*ohyycinH18fz98TCyUzVgQ.png" src="https://d262ilb51hltx0.cloudfront.net/max/800/1*ohyycinH18fz98TCyUzVgQ.png" /> </p>
+ </div>
+ </figure>
+ <p name="39a6" id="39a6">The deep web drug lab is the brainchild of Fernando Caudevilla, a Spanish physician who is better known as “DoctorX” on the deep web, a nickname given to him by his Energy Control co-workers because of his earlier writing about the history, risks and recreational culture of MDMA. In the physical world, Caudevilla has worked for over a decade with Energy Control on various harm reduction focused projects, most of which have involved giving Spanish illegal drug users medical guidance, and often writing leaflets about the harms of certain substances.</p>
+ </div>
+ <div>
+ <figure name="eebc" id="eebc">
+ <div>
+ <p><img data-image-id="1*mKvUNOAVQxl6atCbxbCZsg.jpeg" data-width="2100" data-height="1241" src="https://d262ilb51hltx0.cloudfront.net/max/2000/1*mKvUNOAVQxl6atCbxbCZsg.jpeg" /> </p>
+ </div>
+ <figcaption>Fernando Caudevilla, AKA DoctorX. Photo: Joseph Cox</figcaption>
+ </figure>
+ </div>
+ <div>
+ <p name="c099" id="c099">Caudevilla first ventured into Silk Road forums in April 2013. “I would like to contribute to this forum offering professional advice in topics related to drug use and health,” he wrote in an <a href="http://web.archive.org/web/20131015051405/https://dkn255hz262ypmii.onion.to/index.php?topic=147607.0" data-href="http://web.archive.org/web/20131015051405/https://dkn255hz262ypmii.onion.to/index.php?topic=147607.0" rel="nofollow">introductory post</a>, using his DoctorX alias. Caudevilla offered to provide answers to questions that a typical doctor is not prepared, or willing, to respond to, at least not without a lecture or a judgment. “This advice cannot replace a complete face-to-face medical evaluation,” he wrote, “but I know how difficult it can be to talk frankly about these things.”</p>
+ <p name="ff1d" id="ff1d">The requests flooded in. A diabetic asked what effect MDMA has on blood sugar; another what the risks of frequent psychedelic use were for a young person. Someone wanted to know whether amphetamine use should be avoided during lactation. In all, Fernando’s thread received over 50,000 visits and 300 questions before the FBI shut down Silk Road.</p>
+ <p name="1f35" id="1f35">“He’s amazing. A gift to this community,” one user wrote on the Silk Road 2.0 forum, a site that sprang up after the original. “His knowledge is invaluable, and never comes with any judgment.” Up until recently, Caudevilla answered questions on the marketplace “Evolution.” Last week, however, the administrators of that site <a href="http://motherboard.vice.com/read/one-of-the-darknets-biggest-markets-may-have-just-stole-all-its-users-bitcoin" data-href="http://motherboard.vice.com/read/one-of-the-darknets-biggest-markets-may-have-just-stole-all-its-users-bitcoin" rel="nofollow">pulled a scam</a>, shutting the market down and escaping with an estimated $12 million worth of Bitcoin.</p>
+ <p name="b20f" id="b20f">Caudevilla’s transition from dispensing advice to starting up a no-questions-asked drug testing service came as a consequence of his experience on the deep web. He’d wondered whether he could help bring more harm reduction services to a marketplace without controls. The Energy Control project, as part of its mandate of educating drug users and preventing harm, had already been carrying out drug testing for local Spanish users since 2001, at music festivals, night clubs, or through a drop-in service at a lab in Madrid.</p>
+ <p name="f739" id="f739">“I thought, we are doing this in Spain, why don’t we do an international drug testing service?” Caudevilla told me when I visited the other Energy Control lab, in Madrid. Caudevilla, a stocky character with ear piercings and short, shaved hair, has eyes that light up whenever he discusses the world of the deep web. Later, via email, he elaborated that it was not a hard sell. “It was not too hard to convince them,” he wrote me. Clearly, Energy Control believed that the reputation he had earned as an unbiased medical professional on the deep web might carry over to the drug analysis service, where one needs to establish “credibility, trustworthiness, [and] transparency,” Caudevilla said. “We could not make mistakes,” he added.</p>
+ </div>
+ <div>
+ <figure name="4058" id="4058">
+ <div>
+ <p><img data-image-id="1*knT10_FNVUmqQIBLnutmzQ.jpeg" data-width="4400" data-height="3141" src="https://d262ilb51hltx0.cloudfront.net/max/2000/1*knT10_FNVUmqQIBLnutmzQ.jpeg" /> </p>
+ </div>
+ <figcaption>Photo: Joseph Cox</figcaption>
+ </figure>
+ </div>
+ <div>
+ <figure name="818c" id="818c">
+ <div>
+ <p><img data-image-id="1*ohyycinH18fz98TCyUzVgQ.png" data-width="1200" data-height="24" data-action="zoom" data-action-value="1*ohyycinH18fz98TCyUzVgQ.png" src="https://d262ilb51hltx0.cloudfront.net/max/800/1*ohyycinH18fz98TCyUzVgQ.png" /> </p>
+ </div>
+ </figure>
+ <p name="7b5e" id="7b5e">While the Energy Control lab in Madrid lab only tests Spanish drugs from various sources, it is the Barcelona location which vets the substances bought in the shadowy recesses of of the deep web. Caudevilla no longer runs it, having handed it over to his colleague Ana Muñoz. She maintains a presence on the deep web forums, answers questions from potential users, and sends back reports when they are ready.</p>
+ <p name="0f0e" id="0f0e">The testing program exists in a legal grey area. The people who own the Barcelona lab are accredited to experiment with and handle drugs, but Energy Control doesn’t have this permission itself, at least not in writing.</p>
+ <p name="e002" id="e002">“We have a verbal agreement with the police and other authorities. They already know what we are doing,” Lladanosa tells me. It is a pact of mutual benefit. Energy Control provides the police with information on batches of drugs in Spain, whether they’re from the deep web or not, Espinosa says. They also contribute to the European Monitoring Centre for Drugs and Drug Addiction’s early warning system, a collaboration that attempts to spread information about dangerous drugs as quickly as possible.</p>
+ <p name="db1b" id="db1b">By the time of my visit in February, Energy Control had received over 150 samples from the deep web and have been receiving more at a rate of between 4 and 8 a week. Traditional drugs, such as cocaine and MDMA, make up about 70 percent of the samples tested, but the Barcelona lab has also received samples of the prescription pill codeine, research chemicals and synthetic cannabinoids, and even pills of Viagra.</p>
+ </div>
+ <div>
+ <figure name="b885" id="b885">
+ <div>
+ <p><img data-image-id="1*Vr61dyCTRwk6CemmVF8YAQ.jpeg" data-width="2100" data-height="1402" src="https://d262ilb51hltx0.cloudfront.net/max/2000/1*Vr61dyCTRwk6CemmVF8YAQ.jpeg" /> </p>
+ </div>
+ <figcaption>Photo by Joan Bardeletti</figcaption>
+ </figure>
+ </div>
+ <div>
+ <p name="e76f" id="e76f">So it’s fair to make a tentative judgement on what people are paying for on the deep web. The verdict thus far? Overall, drugs on the deep web appear to be of much higher quality than those found on the street.</p>
+ <p name="5352" id="5352">“In general, the cocaine is amazing,” says Caudevilla, saying that the samples they’ve seen have purities climbing towards 80 or 90 percent, and some even higher. To get an idea of how unusual this is, take a look at the <a href="http://www.unodc.org/documents/wdr2014/Cocaine_2014_web.pdf" data-href="http://www.unodc.org/documents/wdr2014/Cocaine_2014_web.pdf" rel="nofollow">United Nations Office on Drugs and Crime World Drug Report 2014</a>, which reports that the average quality of street cocaine in Spain is just over 40 percent, while in the United Kingdom it is closer to 30 percent.“We have found 100 percent [pure] cocaine,” he adds. “That’s really, really strange. That means that, technically, this cocaine has been purified, with clandestine methods.”</p>
+ <p name="a71c" id="a71c">Naturally, identifying vendors who sell this top-of-the-range stuff is one of the reasons that people have sent samples to Energy Control. Caudevilla was keen to stress that, officially, Energy Control’s service “is not intended to be a control of drug quality,” meaning a vetting process for identifying the best sellers, but that is exactly how some people have been using it.</p>
+ <p name="cb5b" id="cb5b">As one buyer on the Evolution market, elmo666, wrote to me over the site’s messaging system, “My initial motivations were selfish. My primary motivation was to ensure that I was receiving and continue to receive a high quality product, essentially to keep the vendor honest as far as my interactions with them went.”</p>
+ <p name="d80d" id="d80d">Vendors on deep web markets advertise their product just like any other outlet does, using flash sales, gimmicky giveaways and promises of drugs that are superior to those of their competitors. The claims, however, can turn out to be empty: despite the test results that show that deep web cocaine vendors typically sell product that is of a better quality than that found on the street, in plenty of cases, the drugs are nowhere near as pure as advertised.</p>
+ <p name="36de" id="36de">“You won’t be getting anything CLOSE to what you paid for,” one user complained about the cocaine from ‘Mirkov’, a vendor on Evolution. “He sells 65% not 95%.”</p>
+ </div>
+ <div>
+ <figure name="8544" id="8544">
+ <div>
+ <p><img data-image-id="1*a-1_13xE6_ErQ-QSlz6myw.jpeg" data-width="2100" data-height="1402" src="https://d262ilb51hltx0.cloudfront.net/max/2000/1*a-1_13xE6_ErQ-QSlz6myw.jpeg" /> </p>
+ </div>
+ <figcaption>Photo by Joan Bardeletti</figcaption>
+ </figure>
+ </div>
+ <div>
+ <figure name="d521" id="d521">
+ <div>
+ <p><img data-image-id="1*ohyycinH18fz98TCyUzVgQ.png" data-width="1200" data-height="24" data-action="zoom" data-action-value="1*ohyycinH18fz98TCyUzVgQ.png" src="https://d262ilb51hltx0.cloudfront.net/max/800/1*ohyycinH18fz98TCyUzVgQ.png" /> </p>
+ </div>
+ </figure>
+ <p name="126b" id="126b">Despite the prevalence of people using the service to gauge the quality of what goes up their nose, many users send samples to Energy Control in the spirit of its original mission: keeping themselves alive and healthy. The worst case scenario from drugs purchased on the deep web is, well the worst case. That was the outcome when <a href="http://www.independent.co.uk/news/uk/crime/teenager-patrick-mcmullen-who-died-while-on-skype-had-bought-drugs-from-silk-road-8942329.html" data-href="http://www.independent.co.uk/news/uk/crime/teenager-patrick-mcmullen-who-died-while-on-skype-had-bought-drugs-from-silk-road-8942329.html" rel="nofollow">Patrick McMullen,</a> a 17-year-old Scottish student, ingested half a gram of MDMA and three tabs of LSD, reportedly purchased from the Silk Road. While talking to his friends on Skype, his words became slurred and he passed out. Paramedics could not revive him. The coroner for that case, Sherrif Payne, who deemed the cause of death ecstasy toxicity, told <em>The Independent</em> “You never know the purity of what you are taking and you can easily come unstuck.”</p>
+ <p name="5e9e" id="5e9e">ScreamMyName, a deep web user who has been active since the original Silk Road, wants to alert users to the dangerous chemicals that are often mixed with drugs, and is using Energy Control as a means to do so.</p>
+ <p name="19a6" id="19a6">“We’re at a time where some vendors are outright sending people poison. Some do it unknowingly,” ScreamMyName told me in an encrypted message. “Cocaine production in South America is often tainted with either levamisole or phenacetine. Both poison to humans and both with severe side effects.”</p>
+ <p name="9fef" id="9fef">In the case of Levamisole, those prescribing it are often not doctors but veterinarians, as Levamisole is commonly used on animals, primarily for the treatment of worms. If ingested by humans it can lead to cases of extreme eruptions of the skin, as <a href="http://www.ncbi.nlm.nih.gov/pubmed/22127712" data-href="http://www.ncbi.nlm.nih.gov/pubmed/22127712" rel="nofollow">documented in a study</a> from researchers at the University of California, San Francisco. But Lladanosa has found Levamisole in cocaine samples; dealers use it to increase the product weight, allowing them to stretch their batch further for greater profit — and also, she says, because Levamisole has a strong stimulant effect.</p>
+ <p name="7886" id="7886">“It got me sick as fuck,” Dr. Feel, an Evolution user, wrote on the site’s forums after consuming cocaine that had been cut with 23 percent Levamisole, and later tested by Energy Control. “I was laid up in bed for several days because of that shit. The first night I did it, I thought I was going to die. I nearly drove myself to the ER.”</p>
+ <p name="18d3" id="18d3">“More people die because of tainted drugs than the drugs themselves,” Dr. Feel added. “It’s the cuts and adulterants that are making people sick and killing them.”</p>
+ </div>
+ <div>
+ <figure name="552a" id="552a">
+ <div>
+ <p><img data-image-id="1*IWXhtSsVv0gNnCwnDEXk-Q.jpeg" data-width="2100" data-height="1192" src="https://d262ilb51hltx0.cloudfront.net/max/2000/1*IWXhtSsVv0gNnCwnDEXk-Q.jpeg" /> </p>
+ </div>
+ <figcaption>Photo by Joan Bardeletti</figcaption>
+ </figure>
+ </div>
+ <div>
+ <p name="839a" id="839a">The particular case of cocaine cut with Levamisole is one of the reasons that ScreamMyName has been pushing for more drug testing on the deep web markets. “I recognize that drug use isn’t exactly healthy, but why exacerbate the problem?” he told me when I contacted him after his post. “[Energy Control] provides a way for users to test the drugs they’ll use and for these very users to know what it is they’re putting in their bodies. Such services are in very short supply.”</p>
+ <p name="18dc" id="18dc">After sending a number of Energy Control tests himself, ScreamMyName started a de facto crowd-sourcing campaign to get more drugs sent to the lab, and then shared the results, after throwing in some cash to get the ball rolling. <a href="https://blockchain.info/address/1Mi6VjMFqjcD48FPV7cnPB24MAtQQenRy3" data-href="https://blockchain.info/address/1Mi6VjMFqjcD48FPV7cnPB24MAtQQenRy3" rel="nofollow">He set up a Bitcoin wallet</a>, with the hope that users might chip in to fund further tests. At the time of writing, the wallet has received a total of 1.81 bitcoins; around $430 at today’s exchange rates.</p>
+ <p name="dcbd" id="dcbd">In posts to the Evolution community, ScreamMyName pitched this project as something that will benefit users and keep drug dealer honest. “When the funds build up to a point where we can purchase an [Energy Control] test fee, we’ll do a US thread poll for a few days and try to cohesively decide on what vendor to test,” he continued.</p>
+ </div>
+ <div>
+ <figure name="9d32" id="9d32">
+ <div>
+ <p><img data-image-id="1*NGcrjfkV0l37iQH2uyYjEw.jpeg" data-width="1368" data-height="913" src="https://d262ilb51hltx0.cloudfront.net/max/2000/1*NGcrjfkV0l37iQH2uyYjEw.jpeg" /> </p>
+ </div>
+ <figcaption>Photo by Joan Bardeletti</figcaption>
+ </figure>
+ </div>
+ <div>
+ <p name="bff6" id="bff6">Other members of the community have been helping out, too. PlutoPete, a vendor from the original Silk Road who sold cannabis seeds and other legal items, has provided ScreamMyName with packaging to safely send the samples to Barcelona. “A box of baggies, and a load of different moisture barrier bags,” PlutoPete told me over the phone. “That’s what all the vendors use.”</p>
+ <p name="bb78" id="bb78">It’s a modest program so far. ScreamMyName told me that so far he had gotten enough public funding to purchase five different Energy Control tests, in addition to the ten or so he’s sent himself so far. “The program created is still in its infancy and it is growing and changing as we go along but I have a lot of faith in what we’re doing,” he says.</p>
+ <p name="5638" id="5638">But the spirit is contagious: elmo666, the other deep web user testing cocaine, originally kept the results of the drug tests to himself, but he, too, saw a benefit to distributing the data. “It is clear that it is a useful service to other users, keeping vendors honest and drugs (and their users) safe,” he told me. He started to report his findings to others on the forums, and then created a thread with summaries of the test results, as well as comments from the vendors if they provided it. Other users were soon basing their decisions on what to buy on elmo666‘s tests.</p>
+ <p name="de75" id="de75">“I’m defo trying the cola based on the incredibly helpful elmo and his energy control results and recommendations,” wrote user jayk1984. On top of this, elmo666 plans to launch an independent site on the deep web that will collate all of these results, which should act as a resource for users of all the marketplaces.</p>
+ <p name="6b72" id="6b72">As word of elmo666's efforts spread, he began getting requests from drug dealers who wanted him to use their wares for testing. Clearly, they figured that a positive result from Energy Control would be a fantastic marketing tool to draw more customers. They even offered elmo666 free samples. (He passed.)</p>
+ <p name="b008" id="b008">Meanwhile, some in the purchasing community are arguing that those running markets on the deep web should be providing quality control themselves. PlutoPete told me over the phone that he had been in discussions about this with Dread Pirate Roberts, the pseudonymous owner of the original Silk Road site. “We [had been] talking about that on a more organized basis on Silk Road 1, doing lots of anonymous buys to police each category. But of course they took the thing [Silk Road] down before we got it properly off the ground,” he lamented.</p>
+ <p name="49c8" id="49c8">But perhaps it is best that the users, those who are actually consuming the drugs, remain in charge of shaming dealers and warning each other. “It’s our responsibility to police the market based on reviews and feedback,” elmo666 wrote in an Evolution forum post. It seems that in the lawless space of the deep web, where everything from child porn to weapons are sold openly, users have cooperated in an organic display of self-regulation to stamp out those particular batches of drugs that are more likely to harm users.</p>
+ <p name="386d" id="386d">“That’s always been the case with the deep web,” PlutoPete told me. Indeed, ever since Silk Road, a stable of the drug markets has been the review system, where buyers can leave a rating and feedback for vendors, letting others know about the reliability of the seller. But DoctorX’s lab, rigorously testing the products with scientific instruments, takes it a step further.</p>
+ </div>
+ <div>
+ <figure name="890b" id="890b">
+ <div>
+ <p><img data-image-id="1*WRlKt3q3mt7utmwxcbl3sQ.jpeg" data-width="2100" data-height="1373" src="https://d262ilb51hltx0.cloudfront.net/max/2000/1*WRlKt3q3mt7utmwxcbl3sQ.jpeg" /> </p>
+ </div>
+ <figcaption>Photo by Joan Bardeletti</figcaption>
+ </figure>
+ </div>
+ <div>
+ <p name="b109" id="b109">“In the white market, they have quality control. In the dark market, it should be the same,” Cristina Gil Lladanosa says to me before I leave the Barcelona lab.</p>
+ <p name="e3a4" id="e3a4">A week after I visit the lab, the results of the MDMA arrive in my inbox: it is 85 percent pure, with no indications of other active ingredients. Whoever ordered that sample from the digital shelves of the deep web, and had it shipped to their doorstep in Canada, got hold of some seriously good, and relatively safe drugs. And now they know it.</p>
+ <figure name="31cf" id="31cf">
+ <div>
+ <p><img data-image-id="1*320_4I0lxbn5x3bx4XPI5Q.png" data-width="1200" data-height="24" data-action="zoom" data-action-value="1*320_4I0lxbn5x3bx4XPI5Q.png" src="https://d262ilb51hltx0.cloudfront.net/max/800/1*320_4I0lxbn5x3bx4XPI5Q.png" /> </p>
+ </div>
+ </figure>
+ <p name="9b87" id="9b87" data-align="center"><em>Top photo by Joan Bardeletti</em> </p>
+ <p name="c30a" id="c30a" data-align="center">Follow Backchannel: <a href="https://twitter.com/backchnnl" data-href="https://twitter.com/backchnnl" rel="nofollow"><em>Twitter</em></a> <em>|</em><a href="https://www.facebook.com/pages/Backchannel/1488568504730671" data-href="https://www.facebook.com/pages/Backchannel/1488568504730671" rel="nofollow"><em>Facebook</em></a> </p>
+ </div>
+ </div>
+ </section>
+ </div>
+ </div>
+</div> \ No newline at end of file
diff --git a/test/test-pages/la-nacion/expected.html b/test/test-pages/la-nacion/expected.html
index 4fd1379..1b4271a 100644
--- a/test/test-pages/la-nacion/expected.html
+++ b/test/test-pages/la-nacion/expected.html
@@ -3,7 +3,7 @@
incumplidos, por eso es más eficiente canalizar la protesta que reprimirla</p>
</div>
<section id="cuerpo" itemprop="articleBody">
-
+
<p>Abdullah Ocalan, el líder independentista kurdo, desembarcó en Italia en noviembre de
1998 y pidió asilo político. Arrastraba un pedido de captura de Turquía, donde era acusado por
terrorismo. El ex comunista Massimo D'Alema, recién asumido, dudaba. Acoger a Ocalan implicaba comprarse
@@ -21,7 +21,7 @@
supuestos contactos internacionales de organizaciones mapuches. Entre ellos aparecía Ocalan, a quien el
informe ubicó "con domicilios en Palermo y en el centro porteño", y aseguraba incluso que había sido
visto "en Neuquén, Río Negro y Chubut durante el juicio a Jones Huala".</p>
- <figure><div><span title="Ampliar imagen"></span><img src="http://bucket2.glanacion.com/anexos/fotos/77/conflicto-mapuche-2585177w280.jpg"></img></div>
+ <figure><p><span title="Ampliar imagen"></span><img src="http://bucket2.glanacion.com/anexos/fotos/77/conflicto-mapuche-2585177w280.jpg"></img></p>
<figcaption id="epigrafe2585177">Foto: LA NACION</figcaption></figure><p>Esta falsa noticia fue la más rocambolesca de una larga cadena. Dos hechos quedaron en evidencia:
primero, que hay periodistas que no chequean la información; segundo, que los servicios de inteligencia
los utilizan para manipular la agenda pública. Y sobre los servicios hay dos posibilidades: o son burros
diff --git a/test/test-pages/lemonde-2/expected.html b/test/test-pages/lemonde-2/expected.html
index 8be4848..af69efe 100644
--- a/test/test-pages/lemonde-2/expected.html
+++ b/test/test-pages/lemonde-2/expected.html
@@ -10,4 +10,4 @@
<p>En tant qu'industriels allemands et français, nous voulons <a href="http://conjugaison.lemonde.fr/conjugaison/premier-groupe/souligner/" onclick="return false;" target="_blank" title="Conjugaison du verbe souligner">souligner</a> les immenses avantages que l'espace monétaire commun a apportés. Nous envoyons un message de soutien aux responsables politiques, afin qu'ils mettent en place des conditions nécessaires à un euro durablement stable et compétitif. C'est la base de la future prospérité en Europe. L'union monétaire a durablement besoin de <a href="http://www.lemonde.fr/finance/" title="Toute l’actualité finances">finances</a> publiques solides, de règles de responsabilité claires, de structures transparentes et de conditions de concurrence équitables.</p>
<p>Ce n'est qu'à ces conditions que l'euro sortira renforcé de la crise de la dette. Il n'y a pas d'alternative sérieuse à l'euro commun. L'euro symbolise l'Europe d'aujourd'hui. Un échec de l'euro serait un revers fatal pour l'Europe.</p>
<hr></hr><p>
-Appel Frank (Deutsche Post) ; Aschenbroich Jacques (Valeo) ; Berger Roland (Roland Berger Strategy Consultants) ; Bock Kurt (BASF) ; Bories Christel (Constellium) ; Borsig Clemens (Deutsche Bank) ; Brunck Robert (CGG Veritas) ; Buffet Patrick (Eramet) ; Burda Hubert (Hubert Burda Media Holding) ; Caparros Alain (Rewe group) ; Clamadieu Jean-Pierre (Rhodia) ; Cromme Gerhard (ThyssenKrupp) ; Crouzet Philippe (Vallourec) ; de Chalendar Pierre-André (Saint-Gobain) ; de Margerie Christophe (Total) ; de Romanet Augustin (Caisse des dépôts et consignations) ; Degenhart Elmar (Continental) ; Diekmann Michael (Allianz) ; Engel Klaus (Evonik Industries) ; Fehrenbach Franz (Robert Bosch) ; Frérot Antoine (Veolia </p><a href="http://www.lemonde.fr/environnement/" title="Toute l’actualité Environnement">Environnement</a><p>) ; Hagemann Snabe Jim (SAP) ; Henrot François (Groupe Rothschild Cie Banque) ; Hermelin Paul (Cap Gemini) ; Kormann Hermut (Lazard) ; Kron Patrick (Alstom) ; Lachmann Henri (Schneider Electric) ; Lafont Bruno (Lafarge) ; Lauvergeon Anne (Areva) ; Lévy Maurice (Publicis Groupe SA) ; Lévy Jean-Bernard (Vivendi) ; Löscher Peter (Siemens) ; Mestrallet Gérard (GDF Suez) ; Obermann René (Deutsche Telekom) ;Oetker Arend (Dr Arend Oetker Holding) ; Oudéa Frédéric (Société Générale) ; Potier Benoit (Air Liquide) ; Ranque Denis (Cercle de l'</p><a href="http://www.lemonde.fr/industrie/" title="Toute l’actualité industrie">industrie</a><p>/Technicolor) ; Reithofer Norbert (BMW) ; Reitzle Wolfgang (Linde) ; Richard Stéphane (France Telecom) ; Rollier Michel (Michelin) ; Rose Frédéric (Technicolor) ; Schnepp Gilles (Legrand) ; Spinetta Jean-Cyril (Air-</p><a href="http://www.lemonde.fr/europeennes-france/" title="Toute l’actualité France">France</a><p> KLM)  ; Teyssen Johannes (E.ON)  ; Thumann Jürgen (BusinessEurope) ; Verwaayen Ben (Alcatel-Lucent) ; Viehbacher Chris (Sanofi) ; Zetsche Dieter (Daimler).</p><br></br></div> \ No newline at end of file
+Appel Frank (Deutsche Post) ; Aschenbroich Jacques (Valeo) ; Berger Roland (Roland Berger Strategy Consultants) ; Bock Kurt (BASF) ; Bories Christel (Constellium) ; Borsig Clemens (Deutsche Bank) ; Brunck Robert (CGG Veritas) ; Buffet Patrick (Eramet) ; Burda Hubert (Hubert Burda Media Holding) ; Caparros Alain (Rewe group) ; Clamadieu Jean-Pierre (Rhodia) ; Cromme Gerhard (ThyssenKrupp) ; Crouzet Philippe (Vallourec) ; de Chalendar Pierre-André (Saint-Gobain) ; de Margerie Christophe (Total) ; de Romanet Augustin (Caisse des dépôts et consignations) ; Degenhart Elmar (Continental) ; Diekmann Michael (Allianz) ; Engel Klaus (Evonik Industries) ; Fehrenbach Franz (Robert Bosch) ; Frérot Antoine (Veolia <a href="http://www.lemonde.fr/environnement/" title="Toute l’actualité Environnement">Environnement</a>) ; Hagemann Snabe Jim (SAP) ; Henrot François (Groupe Rothschild Cie Banque) ; Hermelin Paul (Cap Gemini) ; Kormann Hermut (Lazard) ; Kron Patrick (Alstom) ; Lachmann Henri (Schneider Electric) ; Lafont Bruno (Lafarge) ; Lauvergeon Anne (Areva) ; Lévy Maurice (Publicis Groupe SA) ; Lévy Jean-Bernard (Vivendi) ; Löscher Peter (Siemens) ; Mestrallet Gérard (GDF Suez) ; Obermann René (Deutsche Telekom) ;Oetker Arend (Dr Arend Oetker Holding) ; Oudéa Frédéric (Société Générale) ; Potier Benoit (Air Liquide) ; Ranque Denis (Cercle de l'<a href="http://www.lemonde.fr/industrie/" title="Toute l’actualité industrie">industrie</a>/Technicolor) ; Reithofer Norbert (BMW) ; Reitzle Wolfgang (Linde) ; Richard Stéphane (France Telecom) ; Rollier Michel (Michelin) ; Rose Frédéric (Technicolor) ; Schnepp Gilles (Legrand) ; Spinetta Jean-Cyril (Air-<a href="http://www.lemonde.fr/europeennes-france/" title="Toute l’actualité France">France</a> KLM)  ; Teyssen Johannes (E.ON)  ; Thumann Jürgen (BusinessEurope) ; Verwaayen Ben (Alcatel-Lucent) ; Viehbacher Chris (Sanofi) ; Zetsche Dieter (Daimler).<br></br></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 889c2b9..45cbccd 100644
--- a/test/test-pages/liberation-1/expected.html
+++ b/test/test-pages/liberation-1/expected.html
@@ -8,6 +8,6 @@
<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>
</article></section> \ No newline at end of file
diff --git a/test/test-pages/links-in-tables/expected.html b/test/test-pages/links-in-tables/expected.html
index 73b554d..4fe422a 100644
--- a/test/test-pages/links-in-tables/expected.html
+++ b/test/test-pages/links-in-tables/expected.html
@@ -1,194 +1,164 @@
-<div id="post-body-2701400044422363572" itemprop="articlesBody">
-<p>
-<em>Posted by Andrew Hayden, Software Engineer on Google Play</em>
-</p>
-<p>
-Android users are downloading tens of billions of apps and games on Google Play.
- We're also seeing developers update their apps frequently in order to provide
-users with great content, improve security, and enhance the overall user
-experience. It takes a lot of data to download these updates and we know users
-care about how much data their devices are using. Earlier this year, we
-announced that we started using <a href="https://android-developers.blogspot.com/2016/07/improvements-for-smaller-app-downloads.html">the
+<div id="readability-page-1" class="page">
+ <div id="post-body-2701400044422363572" itemprop="articlesBody">
+ <p> <em>Posted by Andrew Hayden, Software Engineer on Google Play</em> </p>
+ <p> Android users are downloading tens of billions of apps and games on Google Play. We're also seeing developers update their apps frequently in order to provide users with great content, improve security, and enhance the overall user experience. It takes a lot of data to download these updates and we know users care about how much data their devices are using. Earlier this year, we announced that we started using <a href="https://android-developers.blogspot.com/2016/07/improvements-for-smaller-app-downloads.html">the
bsdiff algorithm</a> <a href="https://android-developers.blogspot.com/2016/07/improvements-for-smaller-app-downloads.html">(by
-Colin Percival)</a>. Using bsdiff, we were able to reduce the size of app
-updates on average by 47% compared to the full APK size.
-</p>
-<p>
-Today, we're excited to share a new approach that goes further — <strong><a href="https://github.com/andrewhayden/archive-patcher/blob/master/README.md">File-by-File
-patching</a></strong>. App Updates using File-by-File patching are, <strong>on average,</strong>
-<strong>65% smaller than the full app</strong>, and in some cases more than 90%
-smaller.
-</p>
-<p>
-The savings, compared to our previous approach, add up to 6 petabytes of user
-data saved per day!
-</p>
-<p>
-In order to get the new version of the app, Google Play sends your device a
-patch that describes the <em>differences</em> between the old and new versions
-of the app.
-</p>
-<p>
-Imagine you are an author of a book about to be published, and wish to change a
-single sentence - it's much easier to tell the editor which sentence to change
-and what to change, rather than send an entirely new book. In the same way,
-patches are much smaller and much faster to download than the entire APK.
-</p>
-<p>
-<strong><span>Techniques used in File-by-File
-patching </span></strong>
-</p>
-<p>
-Android apps are packaged as APKs, which are ZIP files with special conventions.
-Most of the content within the ZIP files (and APKs) is compressed using a
-technology called <a href="https://en.wikipedia.org/w/index.php?title=DEFLATE&amp;oldid=735386036">Deflate</a>.
-Deflate is really good at compressing data but it has a drawback: it makes
-identifying changes in the original (uncompressed) content really hard. Even a
-tiny change to the original content (like changing one word in a book) can make
-the compressed output of deflate look <em>completely different</em>. Describing
-the differences between the <em>original</em> content is easy, but describing
-the differences between the <em>compressed</em> content is so hard that it leads
-to inefficient patches.
-</p>
-<p>
-Watch how much the compressed text on the right side changes from a one-letter
-change in the uncompressed text on the left:
-</p>
-<div><a href="https://2.bp.blogspot.com/-chCZZinlUTg/WEcxvJo9gdI/AAAAAAAADnk/3ND_BspqN6Y2j5xxkLFW3RyS2Ig0NHZpQCLcB/s1600/ipsum-opsum.gif" imageanchor="1"><img height="105" src="https://2.bp.blogspot.com/-chCZZinlUTg/WEcxvJo9gdI/AAAAAAAADnk/3ND_BspqN6Y2j5xxkLFW3RyS2Ig0NHZpQCLcB/s640/ipsum-opsum.gif" width="640"></img></a></div>
-<p>
-File-by-File therefore is based on detecting changes in the uncompressed data.
-To generate a patch, we first decompress both old and new files before computing
-the delta (we still use bsdiff here). Then to apply the patch, we decompress the
-old file, apply the delta to the uncompressed content and then recompress the
-new file. In doing so, we need to make sure that the APK on your device is a
-perfect match, byte for byte, to the one on the Play Store (see <a href="https://source.android.com/security/apksigning/v2.html">APK Signature
-Schema v2 </a>for why).
-</p>
-<p>
-When recompressing the new file, we hit two complications. First, Deflate has a
-number of settings that affect output; and we don't know which settings were
-used in the first place. Second, many versions of deflate exist and we need to
-know whether the version on your device is suitable.
-</p>
-<p>
-Fortunately, after analysis of the apps on the Play Store, we've discovered that
-recent and compatible versions of deflate based on zlib (the most popular
-deflate library) account for almost all deflated content in the Play Store. In
-addition, the default settings (level=6) and maximum compression settings
-(level=9) are the only settings we encountered in practice.
-</p>
-<p>
-Knowing this, we can detect and reproduce the original deflate settings. This
-makes it possible to uncompress the data, apply a patch, and then recompress the
-data back to <em>exactly the same bytes</em> as originally uploaded.
-</p>
-<p>
-However, there is one trade off; extra processing power is needed on the device.
-On modern devices (e.g. from 2015), recompression can take a little over a
-second per megabyte and on older or less powerful devices it can be longer.
-Analysis so far shows that, on average, if the patch size is halved then the
-time spent applying the patch (which for File-by-File includes recompression) is
-doubled.
-</p>
-<p>
-For now, we are limiting the use of this new patching technology to auto-updates
-only, i.e. the updates that take place in the background, usually at night when
-your phone is plugged into power and you're not likely to be using it. This
-ensures that users won't have to wait any longer than usual for an update to
-finish when manually updating an app.
-</p>
-<p>
-<strong><span>How effective is File-by-File
-Patching?</span></strong>
-</p>
-<p>
-Here are examples of app updates already using File-by-File Patching:
-</p>
-<div dir="ltr" trbidi="on">
-
-<div dir="ltr">
-<table><colgroup><col width="142"></col><col width="102"></col><col width="176"></col><col width="176"></col></colgroup><tbody><tr><td><p>
-<span>Application</span></p>
-</td><td><p>
-<span>Original Size</span></p>
-</td><td><p>
-<span>Previous (BSDiff) Patch Size</span></p>
-<p>
-<span>(% vs original)</span></p>
-</td><td><p>
-<span>File-by-File Patch Size (% vs original)</span></p>
-</td></tr><tr><td>
-</td><td><p>
-<span>71.1 MB</span></p>
-</td><td><p>
-<span>13.4 MB (-81%)</span></p>
-</td><td><p>
-<span>8.0 MB (-89%)</span></p>
-</td></tr><tr><td>
-</td><td><p>
-<span>32.7 MB</span></p>
-</td><td><p>
-<span>17.5 MB (-46%)</span></p>
-</td><td><p>
-<span>9.6 MB (-71%)</span></p>
-</td></tr><tr><td>
-</td><td><p>
-<span>17.8 MB</span></p>
-</td><td><p>
-<span>7.6 MB (-57%)</span></p>
-</td><td><p>
-<span>7.3 MB (-59%)</span></p>
-</td></tr><tr><td>
-</td><td><p>
-<span>18.9 MB</span></p>
-</td><td><p>
-<span>17.2 MB (-9%)</span></p>
-</td><td><p>
-<span>13.1 MB (-31%)</span></p>
-</td></tr><tr><td>
-</td><td><p>
-<span>52.4 MB</span></p>
-</td><td><p>
-<span>19.1 MB (-64%)</span></p>
-</td><td><p>
-<span>8.4 MB (-84%)</span></p>
-</td></tr><tr><td>
-</td><td><p>
-<span>16.2 MB</span></p>
-</td><td><p>
-<span>7.7 MB (-52%)</span></p>
-</td><td><p>
-<span>1.2 MB (-92%)</span></p>
-</td></tr></tbody></table></div>
-<span id="docs-internal-guid-de7f0210-d587-05da-d332-146959aa303f"></span><br></br>
-</div>
-<em>Disclaimer: if you see different patch sizes when you press "update"
+Colin Percival)</a>. Using bsdiff, we were able to reduce the size of app updates on average by 47% compared to the full APK size. </p>
+ <p> Today, we're excited to share a new approach that goes further — <strong><a href="https://github.com/andrewhayden/archive-patcher/blob/master/README.md">File-by-File
+patching</a></strong>. App Updates using File-by-File patching are, <strong>on average,</strong> <strong>65% smaller than the full app</strong>, and in some cases more than 90% smaller. </p>
+ <p> The savings, compared to our previous approach, add up to 6 petabytes of user data saved per day! </p>
+ <p> In order to get the new version of the app, Google Play sends your device a patch that describes the <em>differences</em> between the old and new versions of the app. </p>
+ <p> Imagine you are an author of a book about to be published, and wish to change a single sentence - it's much easier to tell the editor which sentence to change and what to change, rather than send an entirely new book. In the same way, patches are much smaller and much faster to download than the entire APK. </p>
+ <p> <strong><span>Techniques used in File-by-File
+patching </span></strong> </p>
+ <p> Android apps are packaged as APKs, which are ZIP files with special conventions. Most of the content within the ZIP files (and APKs) is compressed using a technology called <a href="https://en.wikipedia.org/w/index.php?title=DEFLATE&amp;oldid=735386036">Deflate</a>. Deflate is really good at compressing data but it has a drawback: it makes identifying changes in the original (uncompressed) content really hard. Even a tiny change to the original content (like changing one word in a book) can make the compressed output of deflate look <em>completely different</em>. Describing the differences between the <em>original</em> content is easy, but describing the differences between the <em>compressed</em> content is so hard that it leads to inefficient patches. </p>
+ <p> Watch how much the compressed text on the right side changes from a one-letter change in the uncompressed text on the left: </p>
+ <p><a href="https://2.bp.blogspot.com/-chCZZinlUTg/WEcxvJo9gdI/AAAAAAAADnk/3ND_BspqN6Y2j5xxkLFW3RyS2Ig0NHZpQCLcB/s1600/ipsum-opsum.gif" imageanchor="1"><img src="https://2.bp.blogspot.com/-chCZZinlUTg/WEcxvJo9gdI/AAAAAAAADnk/3ND_BspqN6Y2j5xxkLFW3RyS2Ig0NHZpQCLcB/s640/ipsum-opsum.gif" width="640" height="105"/></a></p>
+ <p> File-by-File therefore is based on detecting changes in the uncompressed data. To generate a patch, we first decompress both old and new files before computing the delta (we still use bsdiff here). Then to apply the patch, we decompress the old file, apply the delta to the uncompressed content and then recompress the new file. In doing so, we need to make sure that the APK on your device is a perfect match, byte for byte, to the one on the Play Store (see <a href="https://source.android.com/security/apksigning/v2.html">APK Signature
+Schema v2 </a>for why). </p>
+ <p> When recompressing the new file, we hit two complications. First, Deflate has a number of settings that affect output; and we don't know which settings were used in the first place. Second, many versions of deflate exist and we need to know whether the version on your device is suitable. </p>
+ <p> Fortunately, after analysis of the apps on the Play Store, we've discovered that recent and compatible versions of deflate based on zlib (the most popular deflate library) account for almost all deflated content in the Play Store. In addition, the default settings (level=6) and maximum compression settings (level=9) are the only settings we encountered in practice. </p>
+ <p> Knowing this, we can detect and reproduce the original deflate settings. This makes it possible to uncompress the data, apply a patch, and then recompress the data back to <em>exactly the same bytes</em> as originally uploaded. </p>
+ <p> However, there is one trade off; extra processing power is needed on the device. On modern devices (e.g. from 2015), recompression can take a little over a second per megabyte and on older or less powerful devices it can be longer. Analysis so far shows that, on average, if the patch size is halved then the time spent applying the patch (which for File-by-File includes recompression) is doubled. </p>
+ <p> For now, we are limiting the use of this new patching technology to auto-updates only, i.e. the updates that take place in the background, usually at night when your phone is plugged into power and you're not likely to be using it. This ensures that users won't have to wait any longer than usual for an update to finish when manually updating an app. </p>
+ <p> <strong><span>How effective is File-by-File
+Patching?</span></strong> </p>
+ <p> Here are examples of app updates already using File-by-File Patching: </p>
+ <div dir="ltr" trbidi="on">
+ <div dir="ltr">
+ <table>
+ <colgroup>
+ <col width="142" />
+ <col width="102" />
+ <col width="176" />
+ <col width="176" />
+ </colgroup>
+ <tbody>
+ <tr>
+ <td>
+ <p><span>Application</span></p>
+ </td>
+ <td>
+ <p><span>Original Size</span></p>
+ </td>
+ <td>
+ <p><span>Previous (BSDiff) Patch Size</span></p>
+ <p><span>(% vs original)</span></p>
+ </td>
+ <td>
+ <p><span>File-by-File Patch Size (% vs original)</span></p>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div dir="ltr">
+ <p><a href="https://play.google.com/store/apps/details?id=com.king.farmheroessupersaga&amp;hl=en"><span>Farm Heroes Super Saga</span></a></p>
+ </div>
+ </td>
+ <td>
+ <p><span>71.1 MB</span></p>
+ </td>
+ <td>
+ <p><span>13.4 MB (-81%)</span></p>
+ </td>
+ <td>
+ <p><span>8.0 MB (-89%)</span></p>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div dir="ltr">
+ <p><a href="https://play.google.com/store/apps/details?id=com.google.android.apps.maps"><span>Google Maps</span></a></p>
+ </div>
+ </td>
+ <td>
+ <p><span>32.7 MB</span></p>
+ </td>
+ <td>
+ <p><span>17.5 MB (-46%)</span></p>
+ </td>
+ <td>
+ <p><span>9.6 MB (-71%)</span></p>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div dir="ltr">
+ <p><a href="https://play.google.com/store/apps/details?id=com.google.android.gm"><span>Gmail</span></a></p>
+ </div>
+ </td>
+ <td>
+ <p><span>17.8 MB</span></p>
+ </td>
+ <td>
+ <p><span>7.6 MB (-57%)</span></p>
+ </td>
+ <td>
+ <p><span>7.3 MB (-59%)</span></p>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div dir="ltr">
+ <p><a href="https://play.google.com/store/apps/details?id=com.google.android.tts"><span>Google TTS</span></a></p>
+ </div>
+ </td>
+ <td>
+ <p><span>18.9 MB</span></p>
+ </td>
+ <td>
+ <p><span>17.2 MB (-9%)</span></p>
+ </td>
+ <td>
+ <p><span>13.1 MB (-31%)</span></p>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div dir="ltr">
+ <p><a href="https://play.google.com/store/apps/details?id=com.amazon.kindle"><span>Kindle</span></a></p>
+ </div>
+ </td>
+ <td>
+ <p><span>52.4 MB</span></p>
+ </td>
+ <td>
+ <p><span>19.1 MB (-64%)</span></p>
+ </td>
+ <td>
+ <p><span>8.4 MB (-84%)</span></p>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div dir="ltr">
+ <p><a href="https://play.google.com/store/apps/details?id=com.netflix.mediaclient"><span>Netflix</span></a></p>
+ </div>
+ </td>
+ <td>
+ <p><span>16.2 MB</span></p>
+ </td>
+ <td>
+ <p><span>7.7 MB (-52%)</span></p>
+ </td>
+ <td>
+ <p><span>1.2 MB (-92%)</span></p>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ </div>
+ <p><em>Disclaimer: if you see different patch sizes when you press "update"
manually, that is because we are not currently using File-by-file for
-interactive updates, only those done in the background.</em>
-<p>
-<strong><span>Saving data and making our
-users (&amp; developers!) happy</span></strong>
-</p>
-<p>
-These changes are designed to ensure our community of over a billion Android
-users use as little data as possible for regular app updates. The best thing is
-that as a developer you don't need to do anything. You get these reductions to
-your update size for free!
-</p>
-
-<p>
-If you'd like to know more about File-by-File patching, including the technical
-details, head over to the <a href="https://github.com/andrewhayden/archive-patcher">Archive Patcher GitHub
-project</a> where you can find information, including the source code. Yes,
-File-by-File patching is completely open-source!
-</p>
-<p>
-As a developer if you're interested in reducing your APK size still further,
-here are some <a href="https://developer.android.com/topic/performance/reduce-apk-size.html?utm_campaign=android_discussion_filebyfile_120616&amp;utm_source=anddev&amp;utm_medium=blog">general
-tips on reducing APK size</a>.
-</p>
-<div><a href="https://2.bp.blogspot.com/-5aRh1dM6Unc/WEcNs55RGhI/AAAAAAAADnI/tzr_oOJjZwgWd9Vu25ydY0UwB3eXKupXwCLcB/s1600/image01.png" imageanchor="1"><img height="200" src="https://2.bp.blogspot.com/-5aRh1dM6Unc/WEcNs55RGhI/AAAAAAAADnI/tzr_oOJjZwgWd9Vu25ydY0UwB3eXKupXwCLcB/s200/image01.png" width="191"></img></a></div>
-<span itemprop="author" itemscope="itemscope" itemtype="http://schema.org/Person">
-<meta content="https://plus.google.com/116899029375914044550" itemprop="url"></meta></span>
-
+interactive updates, only those done in the background.</em> </p>
+ <p> <strong><span>Saving data and making our
+users (&amp; developers!) happy</span></strong> </p>
+ <p> These changes are designed to ensure our community of over a billion Android users use as little data as possible for regular app updates. The best thing is that as a developer you don't need to do anything. You get these reductions to your update size for free! </p>
+ <p> If you'd like to know more about File-by-File patching, including the technical details, head over to the <a href="https://github.com/andrewhayden/archive-patcher">Archive Patcher GitHub
+project</a> where you can find information, including the source code. Yes, File-by-File patching is completely open-source! </p>
+ <p> As a developer if you're interested in reducing your APK size still further, here are some <a href="https://developer.android.com/topic/performance/reduce-apk-size.html?utm_campaign=android_discussion_filebyfile_120616&amp;utm_source=anddev&amp;utm_medium=blog">general
+tips on reducing APK size</a>. </p>
+ <p><a href="https://2.bp.blogspot.com/-5aRh1dM6Unc/WEcNs55RGhI/AAAAAAAADnI/tzr_oOJjZwgWd9Vu25ydY0UwB3eXKupXwCLcB/s1600/image01.png" imageanchor="1"><img src="https://2.bp.blogspot.com/-5aRh1dM6Unc/WEcNs55RGhI/AAAAAAAADnI/tzr_oOJjZwgWd9Vu25ydY0UwB3eXKupXwCLcB/s200/image01.png" width="191" height="200"/></a></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 b2bef41..e16c0cd 100644
--- a/test/test-pages/lwn-1/expected.html
+++ b/test/test-pages/lwn-1/expected.html
@@ -1,8 +1,8 @@
<div><td>
-
+
<div>
<h2><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>
@@ -22,7 +22,7 @@ program</a> for third-party manufacturers interested in using the "Arduino" bran
<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><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>
@@ -30,49 +30,45 @@ program</a> for third-party manufacturers interested in using the "Arduino" bran
<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 alt="[QGIS main interface]" height="264" 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><a href="http://fakehost/Articles/637747/"> <img alt="[QGIS main interface]" height="264" src="http://fakehost/images/2015/03-qgis-map-sm.png" width="350"></img></a></p><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 alt="[QGIS query builder]" height="302" 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><a href="http://fakehost/Articles/637748/"> <img alt="[QGIS query builder]" height="302" src="http://fakehost/images/2015/03-qgis-query-sm.png" width="300"></img></a></p><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
curves</a>, refactoring data sets, and more. </p>
<h4>Maps in, maps out</h4>
- <a href="http://fakehost/Articles/637749/"> <img alt="[QGIS simplify tool]" height="303" 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><a href="http://fakehost/Articles/637749/"> <img alt="[QGIS simplify tool]" height="303" src="http://fakehost/images/2015/03-qgis-simplify-sm.png" width="300"></img></a></p><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 alt="[QGIS style editing]" height="286" 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><a href="http://fakehost/Articles/637751/"> <img alt="[QGIS style editing]" height="286" src="http://fakehost/images/2015/03-qgis-style-sm.png" width="300"></img></a></p><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><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.
+ <br></br>March 25, 2015 </p><p> The LibreOffice project was <a href="http://fakehost/Articles/407383/">announced</a> with great fanfare in September 2010. Nearly one year later, the OpenOffice.org project (from which LibreOffice was forked) <a href="http://fakehost/Articles/446093/">was
+cut loose from Oracle</a> 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">Most active OpenOffice developers</th>
</tr><tr><td>
@@ -181,7 +177,7 @@ cut loose from Oracle</a><p> and found a new home as an Apache project. It is fa
<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">Most active LibreOffice developers</th>
</tr><tr><td>
@@ -312,7 +308,7 @@ cut loose from Oracle</a><p> and found a new home as an Apache project. It is fa
</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>
@@ -348,7 +344,7 @@ cut loose from Oracle</a><p> and found a new home as an Apache project. It is fa
<td>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>
@@ -357,7 +353,7 @@ blog</a> shows no posts in 2015. In the October discussion, Rob <a href="http://
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></br></p>
<h2>Inside this week's LWN.net Weekly Edition</h2>
@@ -366,12 +362,12 @@ bark but the caravan moves on.</span>" That may be true, but, in this case, the
<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&gt;&gt;</a>
- <br></br></div>
-
+ </ul><p><b>Next page</b>: <a href="http://fakehost/Articles/637395/">Security&gt;&gt;</a>
+ <br></br></p></div>
+
</td>
-
+
<td>
-
+
</td>
</div> \ No newline at end of file
diff --git a/test/test-pages/medium-1/expected.html b/test/test-pages/medium-1/expected.html
index 0ab250c..0f8551f 100644
--- a/test/test-pages/medium-1/expected.html
+++ b/test/test-pages/medium-1/expected.html
@@ -1,10 +1,10 @@
<div>
<h2 data-align="center" id="3c62" name="3c62">Open Journalism Project:</h2>
-
+
<h4 data-align="center" id="425a" name="425a"><em>Better Student Journalism</em></h4>
-
-
-
+
+
+
<p id="d178" name="d178">We pushed out the first version of the <a data-href="http://pippinlee.github.io/open-journalism-project/" href="http://pippinlee.github.io/open-journalism-project/" rel="nofollow">Open Journalism site</a> in January. Our goal is for the
site to be a place to teach students what they should know about journalism
on the web. It should be fun too.</p>
@@ -26,8 +26,8 @@
like Flickr to see how others could frame the world in ways I hadn’t previously
considered.</p>
<figure id="06e8" name="06e8"><div>
-
- <img data-action="zoom" data-action-value="1*AzYWbe4cZkMMEUbfRjysLQ.png" data-height="500" data-image-id="1*AzYWbe4cZkMMEUbfRjysLQ.png" data-width="1000" src="https://d262ilb51hltx0.cloudfront.net/max/800/1*AzYWbe4cZkMMEUbfRjysLQ.png"></img></div>
+
+ <p><img data-action="zoom" data-action-value="1*AzYWbe4cZkMMEUbfRjysLQ.png" data-height="500" data-image-id="1*AzYWbe4cZkMMEUbfRjysLQ.png" data-width="1000" src="https://d262ilb51hltx0.cloudfront.net/max/800/1*AzYWbe4cZkMMEUbfRjysLQ.png"></img></p></div>
<figcaption>topleftpixel.com</figcaption></figure><p id="930f" name="930f">I started discovering beautiful things the <a data-href="http://wvs.topleftpixel.com/13/02/06/timelapse-strips-homewood.htm" href="http://wvs.topleftpixel.com/13/02/06/timelapse-strips-homewood.htm" rel="nofollow">web could do with images</a>:
things not possible with print. Just as every generation revolts against
walking in the previous generations shoes, I found myself questioning the
@@ -45,8 +45,8 @@
the shoes we were handed down from previous generations of editors. It
was, we were told, all part of “becoming a journalist.”</p>
<figure id="12da" name="12da"><div>
-
- <img data-action="zoom" data-action-value="1*d0Hp6KlzyIcGHcL6to1sYQ.png" data-height="451" data-image-id="1*d0Hp6KlzyIcGHcL6to1sYQ.png" data-width="868" src="https://d262ilb51hltx0.cloudfront.net/max/800/1*d0Hp6KlzyIcGHcL6to1sYQ.png"></img></div>
+
+ <p><img data-action="zoom" data-action-value="1*d0Hp6KlzyIcGHcL6to1sYQ.png" data-height="451" data-image-id="1*d0Hp6KlzyIcGHcL6to1sYQ.png" data-width="868" src="https://d262ilb51hltx0.cloudfront.net/max/800/1*d0Hp6KlzyIcGHcL6to1sYQ.png"></img></p></div>
</figure><h3 id="e2f0" name="e2f0">We don’t know what we don’t know</h3>
<p id="8263" name="8263">We spent much of the rest of the school year asking “what should we be
doing in the newsroom?”, which mainly led us to ask “how do we use the
@@ -89,8 +89,8 @@
words on computers, for print.</li>
<li id="0be9" name="0be9">Not enough discussion between the business side and web efforts</li>
</ul><figure id="79ed" name="79ed"><div>
-
- <img data-action="zoom" data-action-value="1*_9KYIFrk_PqWFgptsMDeww.png" data-height="500" data-image-id="1*_9KYIFrk_PqWFgptsMDeww.png" data-width="1086" src="https://d262ilb51hltx0.cloudfront.net/max/800/1*_9KYIFrk_PqWFgptsMDeww.png"></img></div>
+
+ <p><img data-action="zoom" data-action-value="1*_9KYIFrk_PqWFgptsMDeww.png" data-height="500" data-image-id="1*_9KYIFrk_PqWFgptsMDeww.png" data-width="1086" src="https://d262ilb51hltx0.cloudfront.net/max/800/1*_9KYIFrk_PqWFgptsMDeww.png"></img></p></div>
<figcaption>From our 2011 research</figcaption></figure><h3 id="8d0c" name="8d0c">Common problems in student newsrooms (2013)</h3>
<p id="3ef6" name="3ef6">Two years later, we went back and looked at what had changed. We talked
to a dozen more newsrooms and weren’t surprised by our findings.</p>
@@ -130,15 +130,15 @@
change with it will be critical.</p>
<p id="2888" name="2888"><strong>We are building a shoe machine, not a shoe.</strong>
</p>
-
+
<h3 id="9c30" name="9c30">A train or light at the end of the tunnel: are student newsrooms changing for the better?</h3>
-
+
<p id="4634" name="4634">In our 2013 research we found that almost 50% of student newsrooms had
created roles specifically for the web. <strong>This sounds great, but is still problematic in its current state.</strong>
</p>
<figure id="416f" name="416f"><div>
-
- <img data-height="560" data-image-id="1*Vh2MpQjqjPkzYJaaWExoVg.png" data-width="624" src="https://d262ilb51hltx0.cloudfront.net/max/800/1*Vh2MpQjqjPkzYJaaWExoVg.png"></img></div>
+
+ <p><img data-height="560" data-image-id="1*Vh2MpQjqjPkzYJaaWExoVg.png" data-width="624" src="https://d262ilb51hltx0.cloudfront.net/max/800/1*Vh2MpQjqjPkzYJaaWExoVg.png"></img></p></div>
<figcaption><strong>We designed many of these slides to help explain to ourselves what we were doing</strong>
</figcaption></figure><p id="39e6" name="39e6">When a newsroom decides to create a position for the web, it’s often with
the intent of having content flow steadily from writers onto the web. This
@@ -179,8 +179,8 @@
steps towards having all their editors involved in the stories for the
web.</p>
<figure id="7aab" name="7aab"><div>
-
- <img data-action="zoom" data-action-value="1*2Ln_DmC95Xpz6LzgywkcFQ.png" data-height="718" data-image-id="1*2Ln_DmC95Xpz6LzgywkcFQ.png" data-width="1315" src="https://d262ilb51hltx0.cloudfront.net/max/800/1*2Ln_DmC95Xpz6LzgywkcFQ.png"></img></div>
+
+ <p><img data-action="zoom" data-action-value="1*2Ln_DmC95Xpz6LzgywkcFQ.png" data-height="718" data-image-id="1*2Ln_DmC95Xpz6LzgywkcFQ.png" data-width="1315" src="https://d262ilb51hltx0.cloudfront.net/max/800/1*2Ln_DmC95Xpz6LzgywkcFQ.png"></img></p></div>
<figcaption>The current Open Journalism site was a few years in the making. This was
an original launch page we use in 2012</figcaption></figure><h3 id="08f5" name="08f5">What we know</h3>
<ul><li id="f7fe" name="f7fe"><strong>New process</strong>
@@ -250,8 +250,8 @@
writing about it, and sharing code. We need to start building a bridge
between student journalism and professional newsrooms.</p>
<figure id="7ed3" name="7ed3"><div>
-
- <img data-height="400" data-image-id="1*bXaR_NBJdoHpRc8lUWSsow.png" data-width="686" src="https://d262ilb51hltx0.cloudfront.net/max/800/1*bXaR_NBJdoHpRc8lUWSsow.png"></img></div>
+
+ <p><img data-height="400" data-image-id="1*bXaR_NBJdoHpRc8lUWSsow.png" data-width="686" src="https://d262ilb51hltx0.cloudfront.net/max/800/1*bXaR_NBJdoHpRc8lUWSsow.png"></img></p></div>
<figcaption>2012</figcaption></figure><h3 id="ee1b" name="ee1b">This is a start</h3>
<p id="ebf9" name="ebf9">We going to continue slowly growing the content on <a data-href="http://pippinlee.github.io/open-journalism-project/" href="http://pippinlee.github.io/open-journalism-project/" rel="nofollow">Open Journalism</a>. We still consider this the beta version,
but expect to polish it, and beef up the content for a real launch at the
@@ -268,8 +268,8 @@
smell a bit different, we feel lacing up a new pair of kicks can change
a lot.</p>
<figure id="4c68" name="4c68"><div>
-
- <img data-action="zoom" data-action-value="1*lulfisQxgSQ209vPHMAifg.png" data-height="534" data-image-id="1*lulfisQxgSQ209vPHMAifg.png" data-width="950" src="https://d262ilb51hltx0.cloudfront.net/max/800/1*lulfisQxgSQ209vPHMAifg.png"></img></div>
+
+ <p><img data-action="zoom" data-action-value="1*lulfisQxgSQ209vPHMAifg.png" data-height="534" data-image-id="1*lulfisQxgSQ209vPHMAifg.png" data-width="950" src="https://d262ilb51hltx0.cloudfront.net/max/800/1*lulfisQxgSQ209vPHMAifg.png"></img></p></div>
</figure>
<p id="2c5c" name="2c5c"><strong>Let’s talk. Let’s listen.</strong>
</p>
@@ -277,8 +277,8 @@
</p>
<p id="9376" name="9376"><a data-href="mailto:[email protected]" href="mailto:[email protected]" rel="nofollow"><strong>[email protected]</strong></a>
</p>
-
-
+
+
<p id="ea00" name="ea00"><em>This isn’t supposed to be a </em>
<strong><em>manifesto™©</em>
</strong><em> we just think it’s pretty cool to share what we’ve learned so far, and hope you’ll do the same. We’re all in this together.</em>
diff --git a/test/test-pages/medium-2/expected.html b/test/test-pages/medium-2/expected.html
index b371180..222b09d 100644
--- a/test/test-pages/medium-2/expected.html
+++ b/test/test-pages/medium-2/expected.html
@@ -1 +1 @@
-<section name="d9f8"><div><div><figure id="4924" name="4924"><div><img data-action="zoom" data-action-value="1*eR_J8DurqygbhrwDg-WPnQ.png" data-height="1280" data-image-id="1*eR_J8DurqygbhrwDg-WPnQ.png" data-width="1891" src="https://d262ilb51hltx0.cloudfront.net/max/1600/1*eR_J8DurqygbhrwDg-WPnQ.png"></img></div><figcaption>Words need defenders.</figcaption></figure><h3 id="b098" name="b098">On Behalf of “Literally”</h3><p id="1a73" name="1a73">You either are a “literally” abuser or know of one. If you’re anything like me, hearing the word “literally” used incorrectly causes a little piece of your soul to whither and die. Of course I do not mean that literally, I mean that figuratively. An abuser would have said: “Every time a person uses that word, a piece of my soul literally withers and dies.” Which is terribly, horribly wrong.</p><p id="104a" name="104a">For whatever bizarre reason, people feel the need to use literally as a sort of verbal crutch. They use it to emphasize a point, which is silly because they’re already using an analogy or a metaphor to illustrate said point. For example: “Ugh, I literally tore the house apart looking for my remote control!” No, you literally did not tear apart your house, because it’s still standing. If you’d just told me you “tore your house apart” searching for your remote, I would’ve understood what you meant. No need to add “literally” to the sentence.</p><p id="c2c0" name="c2c0">Maybe I should define literally.</p><blockquote id="b239" name="b239">Literally means actually. When you say something literally happened, you’re describing the scene or situation as it actually happened.</blockquote><p id="a8fd" name="a8fd">So you should only use literally when you mean it. It should not be used in hyperbole. Example: “That was so funny I literally cried.” Which is possible. Some things are funny enough to elicit tears. Note the example stops with “literally cried.” You cannot <em>literally cry your eyes out</em>. The joke wasn’t so funny your eyes popped out of their sockets.</p><h4 id="165a" name="165a">When in Doubt, Leave it Out</h4><p id="e434" name="e434">“I’m so hungry I could eat a horse,” means you’re hungry. You don’t need to say “I’m so hungry I could literally eat a horse.” Because you can’t do that in one sitting, I don’t care how big your stomach is.</p><p id="d88f" name="d88f">“That play was so funny I laughed my head off,” illustrates the play was amusing. You don’t need to say you literally laughed your head off, because then your head would be on the ground and you wouldn’t be able to speak, much less laugh.</p><p id="4bab" name="4bab">“I drove so fast my car was flying,” we get your point: you were speeding. But your car is never going fast enough to fly, so don’t say your car was literally flying.</p><h4 id="f2f0" name="f2f0">Insecurities?</h4><p id="1bd7" name="1bd7">Maybe no one believed a story you told as a child, and you felt the need to prove that it actually happened. <em>No really, mom, I literally climbed the tree. </em>In efforts to prove truth, you used literally to describe something real, however outlandish it seemed. Whatever the reason, now your overuse of literally has become a habit.</p><h4 id="d7c1" name="d7c1">Hard Habit to Break?</h4><p id="714b" name="714b">Abusing literally isn’t as bad a smoking, but it’s still an unhealthy habit (I mean that figuratively). Help is required in order to break it.</p><p id="f929" name="f929">This is my version of an intervention for literally abusers. I’m not sure how else to do it other than in writing. I know this makes me sound like a know-it-all, and I accept that. But there’s no excuse other than blatant ignorance to misuse the word “literally.” So just stop it.</p><p id="fd19" name="fd19">Don’t say “Courtney, this post is so snobbish it literally burned up my computer.” Because nothing is that snobbish that it causes computers to combust. Or: “Courtney, your head is so big it literally cannot get through the door.” Because it can, unless it’s one of those tiny doors from <em>Alice in Wonderland</em> and I need to eat a mushroom to make my whole body smaller.</p><h4 id="fe12" name="fe12">No One’s Perfect</h4><p id="7ff8" name="7ff8">And I’m not saying I am. I’m trying to restore meaning to a word that’s lost meaning. I’m standing up for literally. It’s a good word when used correctly. People are butchering it and destroying it every day (figuratively speaking) and the massacre needs to stop. Just as there’s a coalition of people against the use of certain fonts (like <a data-href="http://bancomicsans.com/main/?page_id=2" href="http://bancomicsans.com/main/?page_id=2" rel="nofollow">Comic Sans</a> and <a data-href="https://www.facebook.com/group.php?gid=14448723154" href="https://www.facebook.com/group.php?gid=14448723154" rel="nofollow">Papyrus</a>), so should there be a coalition of people against the abuse of literally.</p><h4 id="049e" name="049e">Saying it to Irritate?</h4><p id="9381" name="9381">Do you misuse the word “literally” just to annoy your know-it-all or grammar police friends/acquaintances/total strangers? If so, why? Doing so would be like me going outside when it’s freezing, wearing nothing but a pair of shorts and t-shirt in hopes of making you cold by just looking at me. Who suffers more?</p><h4 id="3e52" name="3e52">Graphical Representation</h4><p id="b57e" name="b57e">Matthew Inman of “The Oatmeal” wrote a comic about literally. Abusers and defenders alike <a data-href="http://theoatmeal.com/comics/literally" href="http://theoatmeal.com/comics/literally" rel="nofollow">should check it out</a>. It’s clear this whole craze about literally is driving a lot of us nuts. You literally abusers are killing off pieces of our souls. You must be stopped, or the world will be lost to meaninglessness forever. Figuratively speaking.</p></div></div></section> \ No newline at end of file
+<section name="d9f8"><div><div><figure id="4924" name="4924"><div><p><img data-action="zoom" data-action-value="1*eR_J8DurqygbhrwDg-WPnQ.png" data-height="1280" data-image-id="1*eR_J8DurqygbhrwDg-WPnQ.png" data-width="1891" src="https://d262ilb51hltx0.cloudfront.net/max/1600/1*eR_J8DurqygbhrwDg-WPnQ.png"></img></p></div><figcaption>Words need defenders.</figcaption></figure><h3 id="b098" name="b098">On Behalf of “Literally”</h3><p id="1a73" name="1a73">You either are a “literally” abuser or know of one. If you’re anything like me, hearing the word “literally” used incorrectly causes a little piece of your soul to whither and die. Of course I do not mean that literally, I mean that figuratively. An abuser would have said: “Every time a person uses that word, a piece of my soul literally withers and dies.” Which is terribly, horribly wrong.</p><p id="104a" name="104a">For whatever bizarre reason, people feel the need to use literally as a sort of verbal crutch. They use it to emphasize a point, which is silly because they’re already using an analogy or a metaphor to illustrate said point. For example: “Ugh, I literally tore the house apart looking for my remote control!” No, you literally did not tear apart your house, because it’s still standing. If you’d just told me you “tore your house apart” searching for your remote, I would’ve understood what you meant. No need to add “literally” to the sentence.</p><p id="c2c0" name="c2c0">Maybe I should define literally.</p><blockquote id="b239" name="b239">Literally means actually. When you say something literally happened, you’re describing the scene or situation as it actually happened.</blockquote><p id="a8fd" name="a8fd">So you should only use literally when you mean it. It should not be used in hyperbole. Example: “That was so funny I literally cried.” Which is possible. Some things are funny enough to elicit tears. Note the example stops with “literally cried.” You cannot <em>literally cry your eyes out</em>. The joke wasn’t so funny your eyes popped out of their sockets.</p><h4 id="165a" name="165a">When in Doubt, Leave it Out</h4><p id="e434" name="e434">“I’m so hungry I could eat a horse,” means you’re hungry. You don’t need to say “I’m so hungry I could literally eat a horse.” Because you can’t do that in one sitting, I don’t care how big your stomach is.</p><p id="d88f" name="d88f">“That play was so funny I laughed my head off,” illustrates the play was amusing. You don’t need to say you literally laughed your head off, because then your head would be on the ground and you wouldn’t be able to speak, much less laugh.</p><p id="4bab" name="4bab">“I drove so fast my car was flying,” we get your point: you were speeding. But your car is never going fast enough to fly, so don’t say your car was literally flying.</p><h4 id="f2f0" name="f2f0">Insecurities?</h4><p id="1bd7" name="1bd7">Maybe no one believed a story you told as a child, and you felt the need to prove that it actually happened. <em>No really, mom, I literally climbed the tree. </em>In efforts to prove truth, you used literally to describe something real, however outlandish it seemed. Whatever the reason, now your overuse of literally has become a habit.</p><h4 id="d7c1" name="d7c1">Hard Habit to Break?</h4><p id="714b" name="714b">Abusing literally isn’t as bad a smoking, but it’s still an unhealthy habit (I mean that figuratively). Help is required in order to break it.</p><p id="f929" name="f929">This is my version of an intervention for literally abusers. I’m not sure how else to do it other than in writing. I know this makes me sound like a know-it-all, and I accept that. But there’s no excuse other than blatant ignorance to misuse the word “literally.” So just stop it.</p><p id="fd19" name="fd19">Don’t say “Courtney, this post is so snobbish it literally burned up my computer.” Because nothing is that snobbish that it causes computers to combust. Or: “Courtney, your head is so big it literally cannot get through the door.” Because it can, unless it’s one of those tiny doors from <em>Alice in Wonderland</em> and I need to eat a mushroom to make my whole body smaller.</p><h4 id="fe12" name="fe12">No One’s Perfect</h4><p id="7ff8" name="7ff8">And I’m not saying I am. I’m trying to restore meaning to a word that’s lost meaning. I’m standing up for literally. It’s a good word when used correctly. People are butchering it and destroying it every day (figuratively speaking) and the massacre needs to stop. Just as there’s a coalition of people against the use of certain fonts (like <a data-href="http://bancomicsans.com/main/?page_id=2" href="http://bancomicsans.com/main/?page_id=2" rel="nofollow">Comic Sans</a> and <a data-href="https://www.facebook.com/group.php?gid=14448723154" href="https://www.facebook.com/group.php?gid=14448723154" rel="nofollow">Papyrus</a>), so should there be a coalition of people against the abuse of literally.</p><h4 id="049e" name="049e">Saying it to Irritate?</h4><p id="9381" name="9381">Do you misuse the word “literally” just to annoy your know-it-all or grammar police friends/acquaintances/total strangers? If so, why? Doing so would be like me going outside when it’s freezing, wearing nothing but a pair of shorts and t-shirt in hopes of making you cold by just looking at me. Who suffers more?</p><h4 id="3e52" name="3e52">Graphical Representation</h4><p id="b57e" name="b57e">Matthew Inman of “The Oatmeal” wrote a comic about literally. Abusers and defenders alike <a data-href="http://theoatmeal.com/comics/literally" href="http://theoatmeal.com/comics/literally" rel="nofollow">should check it out</a>. It’s clear this whole craze about literally is driving a lot of us nuts. You literally abusers are killing off pieces of our souls. You must be stopped, or the world will be lost to meaninglessness forever. Figuratively speaking.</p></div></div></section> \ No newline at end of file
diff --git a/test/test-pages/medium-3/expected.html b/test/test-pages/medium-3/expected.html
index f1c311e..5974356 100644
--- a/test/test-pages/medium-3/expected.html
+++ b/test/test-pages/medium-3/expected.html
@@ -1,7 +1,7 @@
<section name="55ff">
<div>
<div>
-
+
<p id="97e7" name="97e7">How to get shanked doing what people say they want</p>
<blockquote id="df70" name="df70">don’t preach to me<br></br>Mr. integrity</blockquote>
<p id="c979" name="c979">(EDIT: removed the link to Samantha’s post, because the arments and the grubers and the rest of The Deck Clique got what they wanted: a non-proper person driven off the internet lightly capped with a dusting of transphobia along the way, all totally okay because the ends justify the means, and it’s okay when “good” people do it.)</p>
@@ -143,8 +143,8 @@
<p id="343b" name="343b">(Note: testflight_app is a parody account. Please do not mess with the actual testflight folks. They are still cool.)</p>
<p id="09bf" name="09bf">Or this…conversation:</p>
<figure id="4d63" name="4d63"><div>
-
-
+
+
</div>
</figure><p id="f2a3" name="f2a3">Good job guys. Good job. Defend the tribe. Attack the other. Frederico attempts to recover from his stunning display of demeaning douchery: <a data-href="https://twitter.com/viticci" href="https://twitter.com/viticci" rel="nofollow noopener" target="_blank">‏@viticci</a>: <a data-href="https://twitter.com/s_bielefeld" href="https://twitter.com/s_bielefeld" rel="nofollow noopener" target="_blank">@s_bielefeld</a> I don’t know if it’s an Italian thing, but counting other people’s money is especially weird for me. IMO, bad move in the post.</p>
<p id="ae0c" name="ae0c">Samantha is clearly sick of his crap: <a data-href="https://twitter.com/s_bielefeld" href="https://twitter.com/s_bielefeld" rel="nofollow noopener" target="_blank">‏@s_bielefeld</a>: <a data-href="https://twitter.com/viticci" href="https://twitter.com/viticci" rel="nofollow noopener" target="_blank">@viticci</a> That’s what I’m referring to, the mistake of ever having mentioned it. So, now, Marco can ignore the bigger issue and go on living.</p>
@@ -174,8 +174,8 @@
<p id="3720" name="3720">I think she’s earned her anger at this point.</p>
<p id="7341" name="7341">Don’t worry, Marco knows what the real problem is: most devs just suck —</p>
<figure id="babe" name="babe"><div>
-
-
+
+
</div>
</figure><p id="503d" name="503d">I have a saying that applies in this case: don’t place your head so far up your nethers that you go full Klein Bottle. Marco has gone full Klein Bottle. (To be correct, he went FKB some years ago.)</p>
<p id="b8c0" name="b8c0">There are some bright spots. My favorite is when Building Twenty points out the <em>real</em> elephant in the room:</p>
@@ -191,8 +191,8 @@
<p id="f026" name="f026">No Chris, you don’t have this right. But hey, who has time to find out the real issue and read an article. I’m sure your friends told you everything you need to know.</p>
<p id="e1c2" name="e1c2">Noted Feminist Glenn Fleishman gets a piece of the action too:</p>
<figure id="067c" name="067c"><div>
-
-
+
+
</div>
</figure><p id="4df8" name="4df8">I’m not actually surprised here. I watched Fleishman berate a friend of mine who has been an engineer for…heck, waaaaay too long on major software products in the most condescending way because she tried to point out that as a <em>very</em> technical woman, “The Magazine” literally had nothing to say to her and maybe he should fix that. “Impertinent” was I believe what he called her, but I may have the specific word wrong. Not the attitude mind you. Great Feminists like Glenn do not like uppity women criticizing Great Feminists who are their Great Allies.</p>
<p id="bf45" name="bf45">Great Feminists are often tools.</p>
diff --git a/test/test-pages/medium-3/source.html b/test/test-pages/medium-3/source.html
index 6e3d085..37c2464 100644
--- a/test/test-pages/medium-3/source.html
+++ b/test/test-pages/medium-3/source.html
@@ -2216,10 +2216,10 @@
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Samantha and The Great Big Lie – Medium</title>
<link rel="canonical" href="https://medium.com/@johncwelch/samantha-and-the-great-big-lie-d146a92473a1" />
- <meta name="title" content="Samantha and The Great Big Lie – John C. Welch – Medium" />
+ <meta name="title" content="Samantha and The Great Big Lie" />
<meta name="referrer" content="always" />
<meta name="description" content="(EDIT: removed the link to Samantha’s post, because the arments and the grubers and the rest of The Deck Clique got what they wanted: a non-proper person driven off the internet lightly capped with a…" />
- <meta property="og:title" content="Samantha and The Great Big Lie – John C. Welch – Medium" />
+ <meta property="og:title" content="Samantha and The Great Big Lie" />
<meta property="og:url" content="https://medium.com/@johncwelch/samantha-and-the-great-big-lie-d146a92473a1#.h9kzgon9m" />
<meta property="og:image" content="https://cdn-images-1.medium.com/max/1200/1*kbPh7V97eyRodSOw2-ALDw.png" />
<meta property="fb:app_id" content="542599432471018" />
diff --git a/test/test-pages/missing-paragraphs/expected.html b/test/test-pages/missing-paragraphs/expected.html
index 39e027e..9848719 100644
--- a/test/test-pages/missing-paragraphs/expected.html
+++ b/test/test-pages/missing-paragraphs/expected.html
@@ -1,5 +1,5 @@
<div>
-
+
<p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy
@@ -15,7 +15,7 @@
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>
-
+
<h2>Secondary header</h2>
<p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy
@@ -31,7 +31,7 @@
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>
-
+
<h2>Secondary header</h2>
<p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy
diff --git a/test/test-pages/mozilla-1/expected.html b/test/test-pages/mozilla-1/expected.html
index 495b230..088dd1e 100644
--- a/test/test-pages/mozilla-1/expected.html
+++ b/test/test-pages/mozilla-1/expected.html
@@ -1,11 +1,11 @@
<div><section id="intro"><div>
-
+
<p>It’s easier than ever to personalize Firefox and make it work the way
you do.
<br></br>No other browser gives you so much choice and flexibility.</p>
<div id="flexible-top-animation">
- <img alt="" src="http://mozorg.cdn.mozilla.net/media/img/firefox/desktop/customize/animations/flexible-top-fallback.c960365ba781.png"></img>
+ <p><img alt="" src="http://mozorg.cdn.mozilla.net/media/img/firefox/desktop/customize/animations/flexible-top-fallback.c960365ba781.png"></img></p>
</div>
</div>
</section><section data-ga-label="Designed to be redesigned" id="designed"><div>
@@ -16,9 +16,9 @@
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="" 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="http://mozorg.cdn.mozilla.net/media/img/firefox/desktop/customize/designed-redesigned.fbd3ee9402e6.png"></img></div>
+ <p><img alt="" 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="http://mozorg.cdn.mozilla.net/media/img/firefox/desktop/customize/designed-redesigned.fbd3ee9402e6.png"></img></p></div>
<div id="flexible-bottom-animation">
- <img alt="" src="http://mozorg.cdn.mozilla.net/media/img/firefox/desktop/customize/animations/flexible-bottom-fallback.cafd48a3d0a4.png"></img>
+ <p><img alt="" src="http://mozorg.cdn.mozilla.net/media/img/firefox/desktop/customize/animations/flexible-bottom-fallback.cafd48a3d0a4.png"></img></p>
</div>
</div>
</section><section data-ga-label="More ways to customize" id="customize">
@@ -29,48 +29,39 @@
<p>Make Firefox match your style. Choose from thousands of themes and dress
up your browser with a single click.</p>
- <a href="https://addons.mozilla.org/firefox/themes/" rel="external">Try it now</a>
+ <p><a href="https://addons.mozilla.org/firefox/themes/" rel="external">Try it now</a>
<br></br><a href="https://support.mozilla.org/kb/use-themes-change-look-of-firefox" rel="external">Learn more</a>
- </div> <a href="#add-ons" role="button">Next</a>
-
- <div>
- <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>
+ </p></div> <p><a href="#add-ons" role="button">Next</a></p><p><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></p>
</div>
</section><section aria-labelledby="customize-addons" id="add-ons" role="tabpanel"><div>
<div>
<h3>Add-ons</h3>
- <a href="#awesome-bar" role="button">Next</a>
-
- <p>Add-ons are like apps that you install to add features to Firefox. They
+ <p><a href="#awesome-bar" role="button">Next</a></p><p>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 &amp; blogs</li>
<li>Manage your downloads</li>
<li>Watch videos &amp; view photos</li>
- </ul><a href="https://addons.mozilla.org/firefox/extensions/?sort=featured" rel="external">Here are a few of our favorites</a>
+ </ul><p><a href="https://addons.mozilla.org/firefox/extensions/?sort=featured" rel="external">Here are a few of our favorites</a>
<br></br><a href="https://support.mozilla.org/kb/find-and-install-add-ons-add-features-to-firefox" rel="external">Learn more</a>
- </div>
-
- <div>
- <img alt="" src="http://mozorg.cdn.mozilla.net/media/img/firefox/desktop/customize/add-ons.63a4b761f822.png"></img></div>
+ </p></div>
+
+ <p><img alt="" src="http://mozorg.cdn.mozilla.net/media/img/firefox/desktop/customize/add-ons.63a4b761f822.png"></img></p>
</div>
</section><section aria-labelledby="customize-awesomebar" id="awesome-bar" role="tabpanel"><div>
<div>
<h3>Awesome Bar</h3>
- <a href="#themes" role="button">Next</a>
-
- <p>The Awesome Bar learns as you browse to make your version of Firefox unique.
+ <p><a href="#themes" role="button">Next</a></p><p>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 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>
- <img alt="Firefox Awesome Bar" src="http://mozorg.cdn.mozilla.net/media/img/firefox/desktop/customize/awesome-bar.437df162126c.png"></img></div>
+ <p><a href="https://support.mozilla.org/kb/awesome-bar-find-your-bookmarks-history-and-tabs" rel="external">See what it can do for you</a>
+ </p></div>
+ <p><img alt="Firefox Awesome Bar" src="http://mozorg.cdn.mozilla.net/media/img/firefox/desktop/customize/awesome-bar.437df162126c.png"></img></p>
</div>
</section></div>
-
+
<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 8b85894..6a8ebab 100644
--- a/test/test-pages/mozilla-2/expected.html
+++ b/test/test-pages/mozilla-2/expected.html
@@ -6,7 +6,7 @@
<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 href="https://developer.mozilla.org/docs/Tools/WebIDE" rel="external">Learn more about WebIDE</a>
-
+
</li>
<li>
<a href="https://www.youtube.com/watch?v=eH0R10Ga4Hs" rel="external">
@@ -14,7 +14,7 @@
<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 href="https://developer.mozilla.org/docs/Tools/Firefox_Tools_Adapter" rel="external">Learn more about Valence</a>
-
+
</li>
</ul><div>
<h4>Important: Sync your new profile</h4>
@@ -31,7 +31,7 @@
<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 href="https://developer.mozilla.org/docs/Tools/Page_Inspector" rel="external">Learn more about Page Inspector</a>
-
+
</li>
<li>
<a href="https://www.youtube.com/watch?v=iEDk8o9ehlw" rel="external">
@@ -39,7 +39,7 @@
<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 href="https://developer.mozilla.org/docs/Tools/Web_Console" rel="external">Learn more about Web Console</a>
-
+
</li>
<li>
<a href="https://www.youtube.com/watch?v=OS4AxYFLCIE" rel="external">
@@ -47,7 +47,7 @@
<h2>JavaScript Debugger</h2>
<p>Step through JavaScript code and examine or modify its state to help track down bugs.</p>
<a href="https://developer.mozilla.org/docs/Tools/Debugger" rel="external">Learn more about JavaScript Debugger</a>
-
+
</li>
<li>
<a href="https://www.youtube.com/watch?v=w4zSG53Qlbk" rel="external">
@@ -55,7 +55,7 @@
<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 href="https://developer.mozilla.org/docs/Tools/Network_Monitor" rel="external">Learn more about Network Monitor</a>
-
+
</li>
<li>
<a href="https://www.youtube.com/watch?v=R_qDaLQ8ghg" rel="external">
@@ -63,7 +63,7 @@
<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 href="https://developer.mozilla.org/docs/Tools/Web_Audio_Editor" rel="external">Learn more about Web Audio Editor</a>
-
+
</li>
<li>
<a href="https://www.youtube.com/watch?v=3kdBvvIZIqU" rel="external">
@@ -71,7 +71,7 @@
<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 href="https://developer.mozilla.org/docs/Tools/Style_Editor" rel="external">Learn more about Style Editor</a>
-
+
</li>
</ul></div>
</section></div> \ No newline at end of file
diff --git a/test/test-pages/msn/expected.html b/test/test-pages/msn/expected.html
index 3ed4d69..d2f30ab 100644
--- a/test/test-pages/msn/expected.html
+++ b/test/test-pages/msn/expected.html
@@ -14,5 +14,5 @@
<p>$10 might seem like a bit much compared to the $0 people pay for most mobile games, but it's possible the game has $10 worth of levels to play in it. It's also not iPhone exclusive, but the Android version will launch at a later, currently unknown date. </p>
<p>To see "Super Mario Run" in action, check out the footage below:</p>
<p><iframe allowfullscreen="" frameborder="0" height="450" src="https://www.youtube.com/embed/E39ychZKnDI" width="100%"></iframe></p>
-
+
</section></article> \ No newline at end of file
diff --git a/test/test-pages/nytimes-1/expected.html b/test/test-pages/nytimes-1/expected.html
index 1393373..efd7b90 100644
--- a/test/test-pages/nytimes-1/expected.html
+++ b/test/test-pages/nytimes-1/expected.html
@@ -2,7 +2,7 @@
<div>
<figure aria-label="media" data-media-action="modal" id="media-100000004869232" itemid="https://static01.nyt.com/images/2017/01/14/world/13SUDAN-1/13SUDAN-1-master768.jpg" itemprop="associatedMedia" itemscope="" itemtype="http://schema.org/ImageObject" role="group"><span>Photo</span>
<div>
- <img alt="" data-mediaviewer-caption="United Nations peacekeepers at a refugee camp in Sudan on Monday. In exchange for the lifting of United States trade sanctions, Sudan has said it will improve access for aid groups, stop supporting rebels in neighboring South Sudan and cooperate with American intelligence agents." data-mediaviewer-credit="Ashraf Shazly/Agence France-Presse — Getty Images" data-mediaviewer-src="https://static01.nyt.com/images/2017/01/14/world/13SUDAN-1/13SUDAN-1-superJumbo.jpg" itemid="https://static01.nyt.com/images/2017/01/14/world/13SUDAN-1/13SUDAN-1-master768.jpg" itemprop="url" src="https://static01.nyt.com/images/2017/01/14/world/13SUDAN-1/13SUDAN-1-master768.jpg"></img>
+ <p><img alt="" data-mediaviewer-caption="United Nations peacekeepers at a refugee camp in Sudan on Monday. In exchange for the lifting of United States trade sanctions, Sudan has said it will improve access for aid groups, stop supporting rebels in neighboring South Sudan and cooperate with American intelligence agents." data-mediaviewer-credit="Ashraf Shazly/Agence France-Presse — Getty Images" data-mediaviewer-src="https://static01.nyt.com/images/2017/01/14/world/13SUDAN-1/13SUDAN-1-superJumbo.jpg" itemid="https://static01.nyt.com/images/2017/01/14/world/13SUDAN-1/13SUDAN-1-master768.jpg" itemprop="url" src="https://static01.nyt.com/images/2017/01/14/world/13SUDAN-1/13SUDAN-1-master768.jpg"></img></p>
<meta content="512" itemprop="height"></meta><meta content="768" itemprop="width"></meta></div>
<figcaption itemprop="caption description"><span>United Nations peacekeepers at a refugee camp in Sudan on Monday. In exchange for the lifting of United States trade sanctions, Sudan has said it will improve access for aid groups, stop supporting rebels in neighboring South Sudan and cooperate with American intelligence agents.</span>
<span itemprop="copyrightHolder">
@@ -12,7 +12,7 @@
<p data-para-count="293" data-total-count="737">On Friday, the Obama administration will announce a new Sudan strategy. For the first time since the 1990s, the nation will be able to trade extensively with the United States, allowing it to buy goods like tractors and spare parts and attract much-needed investment in its collapsing economy.</p>
<p data-para-count="193" data-total-count="930">In return, Sudan will improve access for aid groups, stop supporting rebels in neighboring <a href="http://topics.nytimes.com/top/news/international/countriesandterritories/south-sudan/index.html?inline=nyt-geo" title="More articles about South Sudan.">South Sudan</a>, cease the bombing of insurgent territory and cooperate with American intelligence agents.</p>
<p data-para-count="344" data-total-count="1274">American officials said Sudan had already shown important progress on a number of these fronts. But to make sure the progress continues, the executive order that President Obama plans to sign on Friday, days before leaving office, will have a six-month review period. If Sudan fails to live up to its commitments, the embargo can be reinstated.</p>
-
+
<p data-para-count="204" data-total-count="1478" id="story-continues-1">Analysts said good relations with Sudan could strengthen moderate voices within the country and give the Sudanese government incentives to refrain from the brutal tactics that have defined it for decades.</p>
<p data-para-count="295" data-total-count="1773">In 1997, President Bill Clinton imposed a <a href="https://www.treasury.gov/resource-center/sanctions/Programs/Documents/sudan.pdf">comprehensive trade embargo against Sudan and blocked the assets of the Sudanese government</a>, which was suspected of sponsoring international terrorism. In the mid-1990s, Osama bin Laden lived in Khartoum, the capital, as a guest of Sudan’s government.</p>
<p data-para-count="224" data-total-count="1997">In 1998, Bin Laden’s agents blew up the United States Embassies in Kenya and Tanzania, killing more than 200 people. In retaliation, Mr. Clinton ordered a cruise missile strike against a pharmaceutical factory in Khartoum.</p>
@@ -21,7 +21,7 @@
<p data-para-count="124" data-total-count="2870">Sales of military equipment will still be prohibited, and some Sudanese militia and rebel leaders will still face sanctions.</p>
<p data-para-count="264" data-total-count="3134">But the Obama administration is clearly trying to open a door to Sudan. There is intense discontent across the country, and its economy is imploding. American officials have argued for years that it was time to help Sudan dig itself out of the hole it had created.</p>
<p data-para-count="231" data-total-count="3365">Officials divulged Thursday that the Sudanese government had allowed two visits by American operatives to a restricted border area near Libya, which they cited as evidence of a new spirit of cooperation on counterterrorism efforts.</p>
-
+
<p data-para-count="248" data-total-count="3613" id="story-continues-2">In addition to continuing violence in Darfur, several other serious conflicts are raging in southern and central Sudan, along with a civil war in newly independent South Sudan, which Sudan has been suspected of inflaming with covert arms shipments.</p>
<p data-para-count="145" data-total-count="3758"><a href="http://sudanreeves.org/2016/07/04/eric-reeves-is-now-a-senior-fellow-at-harvard-universitys-francois-xavier-bagnoud-center-for-health-and-human-rights/">Eric Reeves</a>, one of the leading American academic voices on Sudan, said he was “appalled” that the American government was lifting sanctions.</p>
<p data-para-count="215" data-total-count="3973">He said that Sudan’s military-dominated government continued to commit grave human rights abuses and atrocities, and he noted that just last week Sudanese security services <a href="http://sudanreeves.org/2017/01/02/7710/">killed</a><a href="http://sudanreeves.org/2017/01/02/7710/"> more than 10 civilians in Darfur</a>.</p>
@@ -29,9 +29,9 @@
<p data-para-count="208" data-total-count="4431">Obama administration officials said that they had briefed President-elect Donald J. Trump’s transition team, but that they did not know if Mr. Trump would stick with a policy of warmer relations with Sudan.</p>
<p data-para-count="143" data-total-count="4574">They said that Sudan had a long way to go in terms of respecting human rights, but that better relations could help increase American leverage.</p>
<p data-node-uid="1" data-para-count="149" data-total-count="4723">Mr. Reeves said he thought that the American government was being manipulated and that the Obama administration had made a “deal with the devil.”</p>
- <a href="#whats-next">Continue reading the main story</a>
- </div>
-
-
-
+ <p><a href="#whats-next">Continue reading the main story</a>
+ </p></div>
+
+
+
</div> \ No newline at end of file
diff --git a/test/test-pages/nytimes-2/expected.html b/test/test-pages/nytimes-2/expected.html
index e6d2662..0bd50d9 100644
--- a/test/test-pages/nytimes-2/expected.html
+++ b/test/test-pages/nytimes-2/expected.html
@@ -2,22 +2,22 @@
<div>
<figure aria-label="media" data-media-action="modal" id="media-100000004560166" itemid="https://static01.nyt.com/images/2016/07/30/business/db-dealprof/db-dealprof-master315.jpg" itemprop="associatedMedia" itemscope="" itemtype="http://schema.org/ImageObject" role="group"><span>Photo</span>
<div>
- <img alt="" data-mediaviewer-caption="" data-mediaviewer-credit="Harry Campbell" data-mediaviewer-src="https://static01.nyt.com/images/2016/07/30/business/db-dealprof/db-dealprof-superJumbo.jpg" itemid="https://static01.nyt.com/images/2016/07/30/business/db-dealprof/db-dealprof-master315.jpg" itemprop="url" src="https://static01.nyt.com/images/2016/07/30/business/db-dealprof/db-dealprof-master315.jpg"></img>
+ <p><img alt="" data-mediaviewer-caption="" data-mediaviewer-credit="Harry Campbell" data-mediaviewer-src="https://static01.nyt.com/images/2016/07/30/business/db-dealprof/db-dealprof-superJumbo.jpg" itemid="https://static01.nyt.com/images/2016/07/30/business/db-dealprof/db-dealprof-master315.jpg" itemprop="url" src="https://static01.nyt.com/images/2016/07/30/business/db-dealprof/db-dealprof-master315.jpg"></img></p>
<meta content="315" itemprop="height"></meta><meta content="315" itemprop="width"></meta></div>
<figcaption itemprop="caption description"><span itemprop="copyrightHolder">
<span>Credit</span> Harry Campbell </span>
</figcaption></figure><p data-para-count="148" data-total-count="148"><a href="http://www.nytimes.com/topic/company/yahoo-inc?inline=nyt-org" title="More information about Yahoo! Inc.">Yahoo</a>’s $4.8 billion sale to <a href="http://www.nytimes.com/topic/company/verizon-communications-inc?inline=nyt-org" title="More information about Verizon Communications Inc.">Verizon</a> is a complicated beast, showing how different acquisition structures can affect how shareholders are treated.</p>
<p data-para-count="177" data-total-count="325">First, let’s say what the Yahoo sale is not. It is not a sale of the publicly traded company. Instead, it is a sale of the Yahoo subsidiary and some related assets to Verizon.</p>
<p data-para-count="529" data-total-count="854">The sale is being done in two steps. The <a href="https://www.sec.gov/Archives/edgar/data/1011006/000119312516656036/d178500dex22.htm">first step</a> will be the transfer of any assets related to Yahoo business to a singular subsidiary. This includes the stock in the business subsidiaries that make up Yahoo that are not already in the single subsidiary, as well as the odd assets like benefit plan rights. This is what is being sold to Verizon. A license of Yahoo’s oldest patents is being held back in the so-called Excalibur portfolio. This will stay with Yahoo, as will Yahoo’s stakes in Alibaba Group and Yahoo Japan.</p>
- <p data-para-count="479" data-total-count="1333">It is hard to overestimate how complex an asset sale like this is. Some of the assets are self-contained, but they must be gathered up and transferred. Employees need to be shuffled around and compensation arrangements redone. Many contracts, like the now-infamous one struck with the search engine Mozilla, which <a href="http://www.recode.net/2016/7/7/12116296/marissa-mayer-deal-mozilla-yahoo-payment">may result in a payment of up to a $1 billion</a>, will contain change-of-control provisions that will be set off and have to be addressed. Tax issues always loom large.</p> <a href="#story-continues-1">Continue reading the main story</a>
- </div>
-
-
-
+ <p data-para-count="479" data-total-count="1333">It is hard to overestimate how complex an asset sale like this is. Some of the assets are self-contained, but they must be gathered up and transferred. Employees need to be shuffled around and compensation arrangements redone. Many contracts, like the now-infamous one struck with the search engine Mozilla, which <a href="http://www.recode.net/2016/7/7/12116296/marissa-mayer-deal-mozilla-yahoo-payment">may result in a payment of up to a $1 billion</a>, will contain change-of-control provisions that will be set off and have to be addressed. Tax issues always loom large.</p> <p><a href="#story-continues-1">Continue reading the main story</a>
+ </p></div>
+
+
+
</div><div>
<div>
<p data-para-count="602" data-total-count="1935" id="story-continues-2">In the second step, at the closing, <a href="https://www.sec.gov/Archives/edgar/data/1011006/000119312516656036/d178500dex22.htm">Yahoo will sell the stock</a> in the single subsidiary to Verizon. At that point, Yahoo will change its name to something without “Yahoo” in it. My favorite is simply Remain Co., the name Yahoo executives are using. Remain Co. will become a holding company for the Alibaba and Yahoo Japan stock. Included will also be $10 billion in cash, plus the Excalibur patent portfolio and a number of minority investments including Snapchat. Ahh, if only Yahoo had bought Snapchat instead of Tumblr (indeed, if only Yahoo had bought Google or Facebook when it had the chance).</p>
-
+
<p data-para-count="262" data-total-count="2197" id="story-continues-3">Because it is a sale of a subsidiary, the $4.8 billion will be paid to Yahoo. Its shareholders will not receive any money unless Yahoo pays it out in a dividend (after paying taxes). Instead, Yahoo shareholders will be left holding shares in the renamed company.</p>
<p data-para-count="250" data-total-count="2447">Verizon’s Yahoo will then be run <a href="http://www.nytimes.com/2016/07/25/business/yahoo-sale.html?_r=0">under the same umbrella as AOL</a>. It is unclear whether there will be a further merger of the two businesses after the acquisition. Plans for Yahoo are still a bit in flux in part because of the abnormal sale process.</p>
<p data-para-count="497" data-total-count="2944">As for Remain Co., it will become a so-called investment company. This is a special designation for a company that holds securities for investment but does not operate a working business. Investment companies are subject to special regulation under the Investment Company Act of 1940. Remain Co. will probably just sit there, returning cash to shareholders and waiting for Alibaba to buy it in a tax-free transaction. (Alibaba says it has no plans to do this, but most people do not believe this).</p>
@@ -26,16 +26,16 @@
<p data-para-count="114" data-total-count="3747">In either case, shareholders get a say. They either vote on the merger or decide whether to tender into the offer.</p>
<p data-para-count="278" data-total-count="4025">In both cases, there would be appraisal rights if the buyer pays cash. This means that shareholders can object to the deal by not voting for it or not tendering into the offer and instead asking a court to value their shares – this is what happened <a href="http://www.nytimes.com/2016/06/08/business/dealbook/ruling-on-dell-buyout-may-not-be-precedent-some-fear.html">in Dell’s buyout in 2013</a>.</p>
<p data-para-count="448" data-total-count="4473">The Yahoo deal, however, is not a sale of the public company. It is an asset sale, in which there is only a shareholder vote if there is a sale of “all” or “substantially all” of the assets of the company. Yahoo is not all of the assets or even “substantially all” – the Alibaba shares being left behind in Remain Co. are worth about $28 billion, or six times the value of the cash Verizon is paying for the Yahoo assets it is buying.</p>
-
+
<p data-para-count="343" data-total-count="4816" id="story-continues-4">The courts have held that the definition of “substantially all” includes a change of business in a company because of an asset sale where the assets are <a href="http://caselaw.findlaw.com/de-court-of-chancery/1306648.html">“qualitatively vital.”</a> And that certainly applies here. So there will be a vote – indeed, Yahoo has no problem with a vote – and shareholders are desperate to sell at this point.</p>
<p data-para-count="183" data-total-count="4999">There will be no appraisal rights, however. Again, in an asset sale, there are no appraisal rights. So anyone who votes against the deal and thinks this is a bum price is out of luck.</p>
<p data-para-count="260" data-total-count="5259">The different standards for voting and appraisal rights apply because the structure of the deal is a quirk of the law in Delaware, where Yahoo is incorporated, that allows lawyers to sometimes work around these issues simply by changing the way a deal is done.</p>
<p data-para-count="112" data-total-count="5371">In Yahoo’s case, this is not deliberate, though. It is simply the most expedient way to get rid of the assets.</p>
<p data-para-count="583" data-total-count="5954">Whether this is the most tax-efficient way is unclear to me as a nontax lawyer (email me if you know). Yahoo is likely to have a tax bill on the sale, possibly a substantial one. And I presume there were legal reasons for not using a <a href="http://dealbook.nytimes.com/2014/04/29/alliant-techsystems-break-up-and-the-return-of-the-morris-trust/">Morris Trust structure</a>, in which Yahoo would have been spun off and immediately sold to Verizon so that only Yahoo’s shareholders paid tax on the deal. In truth, the Yahoo assets being sold are only about 10 percent of the value of the company, so the time and logistics for such a sale when Yahoo is a melting ice cube may not have been worth it.</p>
<p data-para-count="450" data-total-count="6404">Finally, if another bidder still wants to acquire Yahoo, it has time. The agreement with Verizon allows Yahoo to terminate the deal and accept a superior offer by paying a $144 million breakup fee to Verizon. And if Yahoo shareholders change their minds and want to stick with Yahoo’s chief executive, <a href="http://topics.nytimes.com/top/reference/timestopics/people/m/marissa_mayer/index.html?inline=nyt-per" title="More articles about Marissa Mayer.">Marissa Mayer</a>, and vote down the deal, there is a so-called naked no-vote termination fee of $15 million payable to Verizon to reimburse expenses.</p>
- <p data-para-count="426" data-total-count="6830">All in all, this was as hairy a deal as they come. There was the procedural and logistical complications of selling a company when the chief executive wanted to stay. Then there was the fact that this was an asset sale, including all of the challenges that go with it. Throw in all of the tax issues and the fact that this is a public company, and it is likely that the lawyers involved will have nightmares for years to come.</p> <a href="#whats-next">Continue reading the main story</a>
- </div>
-
-
-
+ <p data-para-count="426" data-total-count="6830">All in all, this was as hairy a deal as they come. There was the procedural and logistical complications of selling a company when the chief executive wanted to stay. Then there was the fact that this was an asset sale, including all of the challenges that go with it. Throw in all of the tax issues and the fact that this is a public company, and it is likely that the lawyers involved will have nightmares for years to come.</p> <p><a href="#whats-next">Continue reading the main story</a>
+ </p></div>
+
+
+
</div> \ No newline at end of file
diff --git a/test/test-pages/pixnet/expected.html b/test/test-pages/pixnet/expected.html
index ffa81c7..6f6189e 100644
--- a/test/test-pages/pixnet/expected.html
+++ b/test/test-pages/pixnet/expected.html
@@ -13,7 +13,7 @@
</p>
<p><span><span><span>營區內</span></span>除了露營、民宿、餐飲</span><span><span>、</span>賞楓項目<span>多了許多原木飾品更有畫龍點睛加乘效果</span></span>
</p>
-
+
<p><span><a href="http://stevenhgm.pixnet.net/album/photo/470396919"><img alt="30-IMG_4228.jpg" original="http://pic.pimg.tw/stevenhgm/1387894971-1486345289.jpg" src="http://pic.pimg.tw/stevenhgm/1387894971-1486345289.jpg" title="30-IMG_4228.jpg"></img></a></span></p>
<p><span>廣受歡迎的美樹營地有個很大特色就是<span>楓紅時期楓香樹由綠轉黃、轉紅到楓紅層層</span> </span>
</p>
@@ -27,67 +27,67 @@
</span>、貓頭鷹裝飾品勾勒出美樹的風格</span>
</span>
</p>
-
-
+
+
<p><span><a href="http://stevenhgm.pixnet.net/album/photo/470396943"><img alt="31-IMG_4231.jpg" original="http://pic.pimg.tw/stevenhgm/1387894979-1252095111.jpg" src="http://pic.pimg.tw/stevenhgm/1387894979-1252095111.jpg" title="31-IMG_4231.jpg"></img></a></span></p>
<p><span> 每年12月向來是攝影班外拍的絕佳場所之一 楓紅期間入園費$50元</span></p>
<p><span>園區給愛攝一族淨空場景而不是散搭帳蓬之下反</span><span>而影響拍照畫面與構圖取景</span></p>
<p><span>露營的話則須待中午過後再進場搭帳的彈性做法個人也相當支持這樣的權宜之計</span></p>
-
-
+
+
<p><span> </span>
<a href="http://stevenhgm.pixnet.net/album/photo/470389413"><img alt="P1610088.jpg" original="http://pic.pimg.tw/stevenhgm/1387971416-4261675924.jpg" src="http://pic.pimg.tw/stevenhgm/1387971416-4261675924.jpg" title="P1610088.jpg"></img></a>
</p>
<p> <span>來到現場已是落葉飄飄堆疊滿地 不時隨著風吹雨襲而葉落垂地</span></p>
-
-
+
+
<p><span> </span>
<a href="http://stevenhgm.pixnet.net/album/photo/470389413"><img alt="P1610069.jpg" original="http://pic.pimg.tw/stevenhgm/1387971406-2480195851.jpg" src="http://pic.pimg.tw/stevenhgm/1387971406-2480195851.jpg" title="P1610069.jpg"></img></a>
</p>
<p><span>不忍踩過剛剛掉落的樹葉 沿著前人足跡踏痕輕踩而行</span></p>
<p><span>雖然只是一廂情願的想法 終究還是不可避免地將會化為塵土</span></p>
-
-
+
+
<p><span><a href="http://stevenhgm.pixnet.net/album/photo/470383005"><img alt="02-P1610080.jpg" original="http://pic.pimg.tw/stevenhgm/1387894752-3567294980.jpg" src="http://pic.pimg.tw/stevenhgm/1387894752-3567294980.jpg" title="02-P1610080.jpg"></img></a> </span></p>
<p><span> 葉落繽紛顯得幾分蕭瑟氣息 空氣中可以嗅得出來<span>依然</span>瀰漫著濕寒水氣</span>
</p>
<p><span>偶而還會飄下來一些霧氣水滴 不時張望尋找最佳楓葉主題</span></p>
-
-
+
+
<p><span><a href="http://stevenhgm.pixnet.net/album/photo/470384469"><img alt="04-P1610087.jpg" original="http://pic.pimg.tw/stevenhgm/1387894771-2897027724.jpg" src="http://pic.pimg.tw/stevenhgm/1387894771-2897027724.jpg" title="04-P1610087.jpg"></img></a></span></p>
<p><span> 外拍的攝影班學員一堆早已不時穿梭其間</span></p>
<p><span>各自努力地找尋自認為最好的拍攝角度</span></p>
-
-
+
+
<p><span><a href="http://stevenhgm.pixnet.net/album/photo/470384925"><img alt="05-P1610099.jpg" original="http://pic.pimg.tw/stevenhgm/1387894778-2035483089.jpg" src="http://pic.pimg.tw/stevenhgm/1387894778-2035483089.jpg" title="05-P1610099.jpg"></img></a></span></p>
-
-
+
+
<p><span><a href="http://stevenhgm.pixnet.net/album/photo/470389413"><img alt="P1610095.jpg" original="http://pic.pimg.tw/stevenhgm/1387897405-3236217457.jpg" src="http://pic.pimg.tw/stevenhgm/1387897405-3236217457.jpg" title="P1610095.jpg"></img></a></span></p>
-
-
+
+
<p><span><a href="http://stevenhgm.pixnet.net/album/photo/470389803"><img alt="13-IMG_3891.jpg" original="http://pic.pimg.tw/stevenhgm/1387894848-3695967443.jpg" src="http://pic.pimg.tw/stevenhgm/1387894848-3695967443.jpg" title="13-IMG_3891.jpg"></img></a></span></p>
-
-
+
+
<p><span><a href="http://stevenhgm.pixnet.net/album/photo/470390760"><img alt="15-IMG_3906.jpg" original="http://pic.pimg.tw/stevenhgm/1387894863-3269042540.jpg" src="http://pic.pimg.tw/stevenhgm/1387894863-3269042540.jpg" title="15-IMG_3906.jpg"></img></a></span></p>
<p><span>"水槽"上面的這幾隻彩繪版貓頭鷹也太可愛了</span></p>
<p><span>同樣的造型加上不同色彩宛如賦予不同的生命力一般 cool!</span></p>
-
-
+
+
<p><span><a href="http://stevenhgm.pixnet.net/album/photo/470391000"><img alt="16-IMG_3916.jpg" original="http://pic.pimg.tw/stevenhgm/1387894868-3997219746.jpg" src="http://pic.pimg.tw/stevenhgm/1387894868-3997219746.jpg" title="16-IMG_3916.jpg"></img></a></span></p>
<p><span> 雨水洗塵後的枝頭固然掉落些葉片是否也洗去塵勞憂傷</span></p>
-
-
+
+
<p><span><a href="http://stevenhgm.pixnet.net/album/photo/470391519"><img alt="17-IMG_3919.jpg" original="http://pic.pimg.tw/stevenhgm/1387894873-1524806724.jpg" src="http://pic.pimg.tw/stevenhgm/1387894873-1524806724.jpg" title="17-IMG_3919.jpg"></img></a></span></p>
-
-
+
+
<p><span><a href="http://stevenhgm.pixnet.net/album/photo/470385711"><img alt="06-IMG_3853.jpg" original="http://pic.pimg.tw/stevenhgm/1387894788-105924953.jpg" src="http://pic.pimg.tw/stevenhgm/1387894788-105924953.jpg" title="06-IMG_3853.jpg"></img></a></span></p>
<p><span> 喜歡拍照的不論是平面掃描、天空搜尋、</span><span>地上地毯式搜索</span></p>
<p><span>有如小說偵探一般 不放過蛛絲馬跡地用力尋尋覓覓找尋最美角度</span></p>
-
-
+
+
<p><span><a href="http://stevenhgm.pixnet.net/album/photo/470386749"><img alt="07-P1610104.jpg" original="http://pic.pimg.tw/stevenhgm/1387894798-1063855065.jpg" src="http://pic.pimg.tw/stevenhgm/1387894798-1063855065.jpg" title="07-P1610104.jpg"></img></a></span></p>
-
-
+
+
<p><span><a href="http://stevenhgm.pixnet.net/album/photo/470387232"><img alt="08-IMG_3862.jpg" original="http://pic.pimg.tw/stevenhgm/1387894807-309560703.jpg" src="http://pic.pimg.tw/stevenhgm/1387894807-309560703.jpg" title="08-IMG_3862.jpg"></img></a></span></p>
<p><span> 原本這周是由小朱團長早在一年前就跟"簍信"預定下來的場子</span></p>
<p><span>早上從台北出門之際還是小雨不斷細雨紛飛來到此地雖雨已停</span></p>
@@ -96,32 +96,32 @@
</span>
</span>
</p>
-
-
+
+
<p><span><a href="http://stevenhgm.pixnet.net/album/photo/470391732"><img alt="18-P1610141.jpg" original="http://pic.pimg.tw/stevenhgm/1387894882-1881930036.jpg" src="http://pic.pimg.tw/stevenhgm/1387894882-1881930036.jpg" title="18-P1610141.jpg"></img></a></span></p>
<p><span>午後從"秀巒"回到美樹之際已經全數撤退只剩下我們三車留下來</span></p>
<p><span>唯有"離開地球表面"睡車上的才可以不受到地上泥濘而影響</span></p>
-
-
+
+
<p><span><a href="http://stevenhgm.pixnet.net/album/photo/470392077"><img alt="19-IMG_3933.jpg" original="http://pic.pimg.tw/stevenhgm/1387894887-407829597.jpg" src="http://pic.pimg.tw/stevenhgm/1387894887-407829597.jpg" title="19-IMG_3933.jpg"></img></a></span></p>
-
-
+
+
<p><span><a href="http://stevenhgm.pixnet.net/album/photo/470390364"><img alt="14-P1610134.jpg" original="http://pic.pimg.tw/stevenhgm/1387894857-470378275.jpg" src="http://pic.pimg.tw/stevenhgm/1387894857-470378275.jpg" title="14-P1610134.jpg"></img></a></span></p>
<p><span> 午後山嵐興起雲氣遊蕩<span>盤旋在對岸山頭 人潮來來去去似乎也沒有減少</span></span>
</p>
-
-
+
+
<p><span><a href="http://stevenhgm.pixnet.net/album/photo/470403381"><img alt="44-P1610283.jpg" original="http://pic.pimg.tw/stevenhgm/1387895099-4119123008.jpg" src="http://pic.pimg.tw/stevenhgm/1387895099-4119123008.jpg" title="44-P1610283.jpg"></img></a></span></p>
<p><span> 美樹民宿有開設餐廳 室內簡單佈置提供伙食餐飲 <br></br></span></p>
-
-
+
+
<p>
<a href="http://stevenhgm.pixnet.net/album/photo/470389413"><img alt="P1610212.jpg" original="http://pic.pimg.tw/stevenhgm/1387971426-4277312474.jpg" src="http://pic.pimg.tw/stevenhgm/1387971426-4277312474.jpg" title="P1610212.jpg"></img></a>
</p>
<p> <span>這兩間是民宿房間 跟著民宿主人"簍信"聊起來還提到日後將改變成兩層木屋</span></p>
<p><span>一樓則是咖啡飲料/賣店提供訪客來賓有個落腳席座之地 二樓才會是民宿房間</span></p>
<p><span>心中有了計畫想法才會有日後的夢想藍圖 相信將會改變得更好的民宿露營環境<br></br></span></p>
-
+
<p>
<a href="http://stevenhgm.pixnet.net/album/photo/470389413"><img alt="P1610219.jpg" original="http://pic.pimg.tw/stevenhgm/1387971436-2828193592.jpg" src="http://pic.pimg.tw/stevenhgm/1387971436-2828193592.jpg" title="P1610219.jpg"></img></a>
</p>
@@ -129,27 +129,27 @@
<p><span>前面這一區約可搭上十二帳/車/廳 後面那區也大約4~5帳/車/廳</span></p>
<p><span>正前方小木屋即是衛浴區 男女分別以左右<span>兩側</span>分開(燒材鍋爐)</span>
</p>
-
-
+
+
<p><span><a href="http://stevenhgm.pixnet.net/album/photo/470388054"><img alt="10-P1610114.jpg" original="http://pic.pimg.tw/stevenhgm/1387894823-4061326865.jpg" src="http://pic.pimg.tw/stevenhgm/1387894823-4061326865.jpg" title="10-P1610114.jpg"></img></a></span></p>
<p><span> 營區水電方便 水槽也很有特色</span></p>
-
-
+
+
<p><span><a href="http://stevenhgm.pixnet.net/album/photo/470393178"><img alt="22-P1610245.jpg" original="http://pic.pimg.tw/stevenhgm/1387894911-3706194096.jpg" src="http://pic.pimg.tw/stevenhgm/1387894911-3706194096.jpg" title="22-P1610245.jpg"></img></a></span></p>
<p><span> 這次選擇左側地勢高些以防午夜下雨泥濘</span></p>
-
-
+
+
<p><span><a href="http://stevenhgm.pixnet.net/album/photo/470392404"><img alt="20-P1610238.jpg" original="http://pic.pimg.tw/stevenhgm/1387894894-1173705525.jpg" src="http://pic.pimg.tw/stevenhgm/1387894894-1173705525.jpg" title="20-P1610238.jpg"></img></a></span></p>
<p><span> "野馬"特地帶來了冬至應景食材ㄜ<span>---湯圓</span></span>
</p>
<p><span>這家還是最近被評比第一名氣的湯圓專賣店 </span></p>
-
-
+
+
<p><span><a href="http://stevenhgm.pixnet.net/album/photo/470393130"><img alt="21-P1610241.jpg" original="http://pic.pimg.tw/stevenhgm/1387894901-1058040075.jpg" src="http://pic.pimg.tw/stevenhgm/1387894901-1058040075.jpg" title="21-P1610241.jpg"></img></a></span></p>
<p><span> 向來對於湯圓是敬謝不敏 沒想到是出乎意料之外的好吃 <span>沒話說!</span><br></br></span>
</p>
-
-
+
+
<p><span> <a href="http://stevenhgm.pixnet.net/album/photo/470394156"><img alt="24-IMG_4113.jpg" original="http://pic.pimg.tw/stevenhgm/1387894925-1582979930.jpg" src="http://pic.pimg.tw/stevenhgm/1387894925-1582979930.jpg" title="24-IMG_4113.jpg"></img></a></span></p>
<p><span> 喜歡原住民朋友的坦率、真誠 要將民宿營地經營的有聲有色並非容易之事</span></p>
<p><span><span>午茶時間與"簍信"閒聊分享著他的觀點理念之時很支持對於環境應有生態保護</span> </span>
@@ -157,47 +157,47 @@
<p><span><span>環保維護是人人有責</span></span><span><span><span><span> 勿以善小而不為不計涓滴之水才可匯集成河</span></span> </span>
</span>
</p>
-
-
+
+
<p><span><a href="http://stevenhgm.pixnet.net/album/photo/470397399"><img alt="32-IMG_4248.jpg" original="http://pic.pimg.tw/stevenhgm/1387894989-1689510758.jpg" src="http://pic.pimg.tw/stevenhgm/1387894989-1689510758.jpg" title="32-IMG_4248.jpg"></img></a></span></p>
-
-
+
+
<p><span><a href="http://stevenhgm.pixnet.net/album/photo/470394732"><img alt="25-IMG_4152.jpg" original="http://pic.pimg.tw/stevenhgm/1387894933-2886337976.jpg" src="http://pic.pimg.tw/stevenhgm/1387894933-2886337976.jpg" title="25-IMG_4152.jpg"></img></a> </span></p>
<p><span> 入夜前雨絲終於漸漸緩和下來 雖然氣溫很低卻沒感受到寒冷的跡象</span></p>
<p><span>是山谷中少了寒氣還是美樹營區裡的人熱情洋溢暖化了不少寒意</span></p>
-
+
<p><span><a href="http://stevenhgm.pixnet.net/album/photo/470404359"><img alt="IMG_4158.jpg" original="http://pic.pimg.tw/stevenhgm/1387895113-4041265313.jpg" src="http://pic.pimg.tw/stevenhgm/1387895113-4041265313.jpg" title="IMG_4158.jpg"></img></a></span></p>
<p><span> 聖誕前夕裝點些聖誕飾品 感受一下節慶的氛圍<br></br></span></p>
-
-
+
+
<p><span><a href="http://stevenhgm.pixnet.net/album/photo/470394948"><img alt="26-P1610261.jpg" original="http://pic.pimg.tw/stevenhgm/1387894940-3359449338.jpg" src="http://pic.pimg.tw/stevenhgm/1387894940-3359449338.jpg" title="26-P1610261.jpg"></img></a></span></p>
<p><span>晚餐準備了砂鍋魚頭</span></p>
-
-
+
+
<p><span><a href="http://stevenhgm.pixnet.net/album/photo/470403921"><img alt="46-1021221美樹露營.jpg" original="http://pic.pimg.tw/stevenhgm/1387895106-1387217970.jpg" src="http://pic.pimg.tw/stevenhgm/1387895106-1387217970.jpg" title="46-1021221美樹露營.jpg"></img></a></span></p>
<p><span>"蒯嫂"還特地準備著羊肩排、鹹豬肉、柳葉魚...哇!這哩澎湃哩...</span></p>
<p><span> "永老爺"早已備妥了好酒為遠自台南來的蒯兄嫂敬一杯囉</span></p>
<p><span>感謝蒯嫂精心準備的好料理 食指大動好菜色感恩ㄟ!</span></p>
-
-
+
+
<p><span><a href="http://stevenhgm.pixnet.net/album/photo/470395164"><img alt="27-IMG_4173.jpg" original="http://pic.pimg.tw/stevenhgm/1387894947-2636431527.jpg" src="http://pic.pimg.tw/stevenhgm/1387894947-2636431527.jpg" title="27-IMG_4173.jpg"></img></a></span></p>
<p><span> 吃得快精光之際...才想到忘了拍合照...(哇哩咧 ^&amp;*()<br></br></span></p>
-
+
<p><span><a href="http://stevenhgm.pixnet.net/album/photo/470395614"><img alt="28-IMG_4178.jpg" original="http://pic.pimg.tw/stevenhgm/1387894956-618198074.jpg" src="http://pic.pimg.tw/stevenhgm/1387894956-618198074.jpg" title="28-IMG_4178.jpg"></img></a></span></p>
-
-
+
+
<p><span><a href="http://stevenhgm.pixnet.net/album/photo/470396325"><img alt="29-IMG_4188.jpg" original="http://pic.pimg.tw/stevenhgm/1387894961-2201609427.jpg" src="http://pic.pimg.tw/stevenhgm/1387894961-2201609427.jpg" title="29-IMG_4188.jpg"></img></a></span></p>
<p><span> 隔日睡到很晚才起床 不用拍日出晨光的營地對我來說都是個幸福的睡眠</span></p>
<p><span>哪怕是葉落飄零落滿地還是睡夢周公召見而去 起床的事~差點都忘記了</span></p>
-
-
+
+
<p>
<a href="http://stevenhgm.pixnet.net/album/photo/470389413"><img alt="IMG_4205.jpg" original="http://pic.pimg.tw/stevenhgm/1387971396-2999285851.jpg" src="http://pic.pimg.tw/stevenhgm/1387971396-2999285851.jpg" title="IMG_4205.jpg"></img></a>
</p>
<p> <span> 昨天細雨紛飛依然打落了不少落葉中間這株整個都快變成枯枝了</span></p>
<p><span>昨天依稀凋零稀疏的楓葉殘留今兒個完全不復存在(上周是最美的代名詞)</span></p>
-
-
+
+
<p><span><a href="http://stevenhgm.pixnet.net/album/photo/470397765"><img alt="33-IMG_4255.jpg" original="http://pic.pimg.tw/stevenhgm/1387894999-1588465034.jpg" src="http://pic.pimg.tw/stevenhgm/1387894999-1588465034.jpg" title="33-IMG_4255.jpg"></img></a></span></p>
<p><span><span>上回來得太早沒能見到楓葉泛紅 這次晚了一周已陸續落葉也</span>無從比對楓葉差異性 </span>
</p>
@@ -205,52 +205,52 @@
</p>
<p><span><span>只要心中自認為是最美最浪漫的一刻 都是美的表徵也是最美的時分</span></span>
</p>
-
-
+
+
<p><span><a href="http://stevenhgm.pixnet.net/album/photo/470398749"><img alt="34-P1610269.jpg" original="http://pic.pimg.tw/stevenhgm/1387895007-4184988815.jpg" src="http://pic.pimg.tw/stevenhgm/1387895007-4184988815.jpg" title="34-P1610269.jpg"></img></a></span></p>
<p><span> 早起的"蒯嫂"已經備好熱騰騰中式稀飯、包子、蔬果 頓時~有幸福的感覺<br></br></span></p>
-
-
+
+
<p><span><a href="http://stevenhgm.pixnet.net/album/photo/470399232"><img alt="35-IMG_4303.jpg" original="http://pic.pimg.tw/stevenhgm/1387895016-2193615729.jpg" src="http://pic.pimg.tw/stevenhgm/1387895016-2193615729.jpg" title="35-IMG_4303.jpg"></img></a> </span></p>
<p><span> 星期天早上趁著攝影團還沒入場先來人物場景特寫</span></p>
<p><span>野馬家兩張新"座椅"就當作是試坐囉!拍謝哩</span></p>
-
-
+
+
<p><span><a href="http://stevenhgm.pixnet.net/album/photo/470400471"><img alt="38-IMG_4330.jpg" original="http://pic.pimg.tw/stevenhgm/1387895047-92554161.jpg" src="http://pic.pimg.tw/stevenhgm/1387895047-92554161.jpg" title="38-IMG_4330.jpg"></img></a></span></p>
-
-
+
+
<p>
<a href="http://stevenhgm.pixnet.net/album/photo/470389413"><img alt="P1610279.jpg" original="http://pic.pimg.tw/stevenhgm/1387971446-966387512.jpg" src="http://pic.pimg.tw/stevenhgm/1387971446-966387512.jpg" title="P1610279.jpg"></img></a>
</p>
<p><span> 難得有此無人美景在楓樹下的聖誕氛圍也一定要來一張才行</span></p>
-
-
+
+
<p><span><a href="http://stevenhgm.pixnet.net/album/photo/470399946"><img alt="37-IMG_4323.jpg" original="http://pic.pimg.tw/stevenhgm/1387895036-848978834.jpg" src="http://pic.pimg.tw/stevenhgm/1387895036-848978834.jpg" title="37-IMG_4323.jpg"></img></a></span></p>
<p><span> 三家合照(Hero也一定要入鏡的)</span></p>
-
-
+
+
<p><span> <a href="http://stevenhgm.pixnet.net/album/photo/470401161"><img alt="40-IMG_4342.jpg" original="http://pic.pimg.tw/stevenhgm/1387895067-717977929.jpg" src="http://pic.pimg.tw/stevenhgm/1387895067-717977929.jpg" title="40-IMG_4342.jpg"></img></a></span></p>
<p><span> 接著攝影團入場帶隊老師請求借個時間也來讓學員練習楓樹下的聖誕飾品</span></p>
<p><span>此時剛好也遇到早在FB社團相互回應卻頭一次謀面的Mr."大雄"真是幸會了</span></p>
-
-
+
+
<p><span><a href="http://stevenhgm.pixnet.net/album/photo/470402037"><img alt="42-IMG_4382.jpg" original="http://pic.pimg.tw/stevenhgm/1387895083-1227791497.jpg" src="http://pic.pimg.tw/stevenhgm/1387895083-1227791497.jpg" title="42-IMG_4382.jpg"></img></a> </span></p>
<p><span> 接近中午時分陽光漸露 藍天帷幕再次嶄露頭角 ~ 久違了!</span></p>
<p><span>期盼下的天空終於放晴 沒有缺席的藍天還是準時赴約如期出席</span></p>
-
-
+
+
<p><span><a href="http://stevenhgm.pixnet.net/album/photo/470402682"><img alt="41-IMG_4366.jpg" original="http://pic.pimg.tw/stevenhgm/1387895075-2647157523.jpg" src="http://pic.pimg.tw/stevenhgm/1387895075-2647157523.jpg" title="41-IMG_4366.jpg"></img></a></span></p>
<p><span> 這兩天肉肉(Hero)天雨濕滑無法自由奔跑都快悶壞了</span></p>
<p><span>天晴後"蒯嫂"帶著散步遊園也好解解悶</span></p>
-
-
+
+
<p><span><a href="http://stevenhgm.pixnet.net/album/photo/470402898"><img alt="43-IMG_4383.jpg" original="http://pic.pimg.tw/stevenhgm/1387895093-631461272.jpg" src="http://pic.pimg.tw/stevenhgm/1387895093-631461272.jpg" title="43-IMG_4383.jpg"></img></a> </span></p>
<p><span>收拾好裝備準備離開營地 亮麗的</span><span>天空鮮明對比下的楓樹林又讓人覺得有點捨不得離開</span></p>
<p><span><span>道別了"美樹營地"準備前往而行</span>"石磊國小"一個很生疏的小學座落在這深山部落裡</span>
</p>
<p><span>北橫"石磊部落" 一個從未踏入的陌生之地因為露營之故否則畢生大概也不會路過</span></p>
<p><span>三位大叔同行準備走著這段遙遠的路段 下次找機會再來重溫舊夢了.......</span></p>
-
+
<p><span lang="EN-US"><a href="http://tw.myblog.yahoo.com/wu141993/article?mid=104&amp;sc=1"><span lang="EN-US"><span lang="EN-US"><span>美樹營地</span></span>
</span>
</a> </span><span lang="EN-US"><span>資訊</span></span>
@@ -264,17 +264,17 @@
</p>
<p><span lang="EN-US"><span>楓紅期間須過中午才可搭帳 </span></span><span lang="EN-US">水電便利</span></p>
<p><strong><span lang="EN-US">GPS: N24 39 16.4 <span> </span>E121 18 19.5</span></strong></p>
-
-
+
+
<p><span><span>如果您喜歡</span>"<span>史蒂文的家"圖文分享 邀請您到 </span></span><span><a href="https://www.facebook.com/stevenhgm1188"><span>FB </span><span lang="EN-US"><span lang="EN-US">粉絲團</span></span>
</a><span>按個"讚"!</span></span>
</p>
<p><span><span><span>內文有不定期的更新旅遊、露營圖文訊息 </span></span><span><span>謝謝!</span></span>
</span>
</p>
-
-
-
+
+
+
</div> \ No newline at end of file
diff --git a/test/test-pages/qq/expected-metadata.json b/test/test-pages/qq/expected-metadata.json
new file mode 100644
index 0000000..64fe95e
--- /dev/null
+++ b/test/test-pages/qq/expected-metadata.json
@@ -0,0 +1,5 @@
+{
+ "Title": "DeepMind新电脑已可利用记忆自学 人工智能迈上新台阶_科技_腾讯网",
+ "Author": null,
+ "Excerpt": "DeepMind新电脑已可利用记忆自学 人工智能迈上新台阶"
+}
diff --git a/test/test-pages/qq/expected.html b/test/test-pages/qq/expected.html
new file mode 100644
index 0000000..d8de933
--- /dev/null
+++ b/test/test-pages/qq/expected.html
@@ -0,0 +1,35 @@
+<div id="readability-page-1" class="page">
+ <div accesskey="3" tabindex="-1">
+ <div id="Cnt-Main-Article-QQ" bosszone="content">
+ <div>
+ <p><span>转播到腾讯微博</span></p>
+ <p><img alt="DeepMind新电脑已可利用记忆自学 人工智能迈上新台阶" src="http://img1.gtimg.com/tech/pics/hv1/168/240/2140/139214868.jpg" /></p>
+ </div>
+ <p>TNW中文站 10月14日报道</p>
+ <p> <span onmouseover='ShowInfo(this,"GOOG.OQ","200","-1",event);'><a href="http://stockhtm.finance.qq.com/astock/ggcx/GOOG.OQ.htm" target="_blank">谷歌</a></span>(<a href="http://t.qq.com/googlechina#pref=qqcom.keyword" rel="googlechina" reltitle="谷歌" target="_blank">微博</a>) 在2014年收购的人工智能公司DeepMind开发出一款能够用自己的记忆学习新知识并利用这些知识来回答问题的计算机。</p>
+ <p>这款产品具有极其重要的意义,因为这意味着未来的人工智能技术可能不需要人类来教它就能回答人类提出的问题。</p>
+ <p>DeepMind表示,这款名为DNC(可微神经计算机)的AI模型可以接受家谱和伦敦地铁网络地图这样的信息,还可以回答与那些数据结构中的不同项目之间的关系有关的复杂问题。</p>
+ <p>例如,它可以回答“从邦德街开始,沿着中央线坐一站,环线坐四站,然后转朱比利线坐两站,你会到达哪个站?”这样的问题。</p>
+ <p>DeepMind称,DNC还可以帮你规划从沼泽门到皮卡迪利广场的最佳路线。</p>
+ <p>同样,它还可以理解和回答某个大家族中的成员之间的关系这样的复杂问题,比如“张三的大舅是谁?”。</p>
+ <p>DNC建立在神经网络的概念之上,神经网络可以模拟人类思想活动的方式。这种AI技术很适合与机器习得配套使用。</p>
+ <p>DeepMind的AlphaGo AI能够打败围棋冠军也跟这些神经网络有很大关系。但是AlphaGo必须进行训练才行,开发人员向AlphaGo提供了历史对弈中的大约3000万记录。让人工智能技术具备通过记忆学习的能力,就可以让它独自完成更复杂的任务。</p>
+ <p>DeepMind希望DNC可以推动计算行业实现更多突破。DeepMind已将其研究结果发表在<a href="http://tech.qq.com/science.htm" target="_blank">科学</a>刊物《自然》(Nature)上。(编译/林靖东)</p>
+ <p><strong><strong>精彩视频推荐</strong></strong>
+ </p>
+ <div>
+ <div>
+ <div id="rv-player">
+ <div>
+ <div>
+ <p><span>转播到腾讯微博</span></p>
+ <p><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAJAQMAAAAB5D5xAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAADUExURQAAAKd6PdoAAAABdFJOUwBA5thmAAAAC0lEQVQI12NgwAkAABsAAVJE5KkAAAAASUVORK5CYIIvKiAgfHhHdjAwfDUwZDc5YmEzMGM3MDcxY2I5OTIyMTk4MzYyZGRlZmNlICov" /></p>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <p><strong>【美国The Next Web作品的中文相关权益归腾讯公司独家所有。未经授权,不得转载、摘编等。】</strong></p>
+ </div>
+ </div>
+</div> \ No newline at end of file
diff --git a/test/test-pages/qq/source.html b/test/test-pages/qq/source.html
new file mode 100644
index 0000000..6676348
--- /dev/null
+++ b/test/test-pages/qq/source.html
@@ -0,0 +1,7280 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
+ <title>DeepMind新电脑已可利用记忆自学 人工智能迈上新台阶_科技_腾讯网</title>
+ <meta name="keywords" content="DeepMind新电脑已可利用记忆自学 人工智能迈上新台阶" />
+ <meta name="Description" content="DeepMind新电脑已可利用记忆自学 人工智能迈上新台阶" />
+ <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
+ <!-- 2016.7.13 jackiejiang add house.com use-->
+ <script src="http://jsqmt.qq.com/cdn_djl.js" type="text/javascript" async=""></script>
+ <script src="//push.zhanzhang.baidu.com/push.js"></script>
+ <script src="http://mat1.gtimg.com/house/js/h5rewrite.js"></script>
+
+ <!--2014.3.20 byAustinjin-->
+ <!--20140225 menshen-->
+ <script type="text/javascript" src="http://js.aq.qq.com/js/aq_common.js"></script>
+ <!--[if !IE]>|xGv00|3d36f9f3e0f060add30b9b285e75c8be<![endif]-->
+ <script>
+ ! function() {
+ var i = function(i) {
+ if (i & amp; & amp; i.indexOf("/a/") & gt; 0) {
+ var t = i.split("/")[2].split("qq.com")[0].split("."),
+ e = i.split("/a/")[1].split(".htm")[0].replace(/[^0-9]/g, ""),
+ n = "",
+ o = "",
+ s = "";
+ if (o = 3 === t.length ? t[0] + "_" + t[1] : t[0], s = o.indexOf("_") & gt; 0 & amp; & amp; o.split("_")[0].length & lt; 3 ? (o.split("_")[0] + o.split("_")[1]).substring(0, 3).toUpperCase() : o.substring(0, 3).toUpperCase(), o.indexOf("house") & gt; 0 & amp; & amp;
+ (s = "HOU"), o.indexOf("auto") & gt; 0 & amp; & amp;
+ (s = "AUT"), /cd|fj|cq|hb|gd|zj|ln|js/.test(o) & amp; & amp;
+ (s = o.toUpperCase() + "C"), /henan/.test(o) & amp; & amp;
+ (s = "HNC"), /xian/.test(o) & amp; & amp;
+ (s = "XAC"), /hn/.test(o) & amp; & amp;
+ (s = "HNN"), /2016/.test(o) & amp; & amp;
+ (s = "BCP"), "undefined" != typeof o & amp; & amp;
+ "undefined" != typeof e) {
+ if (o.split(".").length & gt; 2)
+ for (var a = o.split(".").length, l = 0; a & gt; l; l++) n += o.split(".")[l], a - 2 & gt;
+ l & amp; & amp;
+ (n += "_");
+ else n = o.split(".")[0];
+ return "http://xw.qq.com/" + o + "/" + e + "/" + s + e + "00"
+ }
+ }
+ },
+ t = {
+ news: "news",
+ photo: "photo",
+ video: "video",
+ view: "huati",
+ finance: "finance",
+ ent: "ent",
+ sports: "sports",
+ digi: "digi",
+ mil: "mil",
+ lady: "lady",
+ auto: "auto",
+ games: "games",
+ house: "house",
+ astro: "astro",
+ cul: "cul",
+ fashion: "fashion",
+ 2014: "shijiebei",
+ 2016: "2016",
+ edu: "edu",
+ nba: "nba"
+ };
+ if (/Android|webOS|iPhone|Windows Phone|iPod|BlackBerry|SymbianOS/i.test(navigator.userAgent)) {
+ var e = window.location.href;
+ window.location.pathname;
+ if (e.indexOf("/a/") & gt; 0 & amp; & amp;
+ "www.nanjing2014.org" != window.location.hostname) {
+ if (e.indexOf("?pc") & lt; 0) try {
+ window.location.href = i(e)
+ } catch (n) {}
+ } else if (e.indexOf("?mobile") & lt; 0) {
+ var o = window.location.hostname.split(".")[0],
+ s = window.location.pathname.split(".")[0].replace(/\//g, "").substring(0, 3);
+ if (/news|pp|video|view|finance|ent|sports|digi|mil|fashion|auto|games|house|astro|cul|2014|2016|edu/i.test(o)) try {
+ "nba" == s ? window.location.href = "http://xw.qq.com/m/" + t[s] + "/index.htm" : window.location.href = "http://xw.qq.com/m/" + t[o] + "/index.htm"
+ } catch (n) {}
+ }
+ try {} catch (n) {}
+ }
+ }();
+ </script>
+ <!--设计:leono,大白兔 | 前端:tomie,Artis | 后端:旭雷 | 团队博客: http://qqfe.org-->
+ <!--[if !IE]>|xGv00|b25250848c3111bf80269b4261c908fc<![endif]-->
+ <script type="text/javascript" src="http://mat1.qq.com/js/speed_v1.9-min.js"></script>
+ <script>
+ (function() {
+ var bp = document.createElement('script');
+ bp.src = '//push.zhanzhang.baidu.com/push.js';
+ var s = document.getElementsByTagName("script")[0];
+ s.parentNode.insertBefore(bp, s);
+ })();
+ </script>
+ <!--[if !IE]>|xGv00|9d55b3987908c0de3cdcd8e4686965fc<![endif]-->
+ <link href="http://mat1.gtimg.com/news/imgcss_article_qq/global_v1.5.5.css" rel="stylesheet" type="text/css" media="screen" />
+ <style>
+ .adpip_Aritcle_QQ,
+ .PinP-Main-Article-QQ {
+ position: relative;
+ }
+ /*app down*/
+
+ .Tool-Article-QQ ul {
+ margin-top: 3px;
+ }
+
+ .Tool-Article-QQ .appIconB {
+ float: left;
+ width: 380px;
+ height: 40px;
+ margin-left: 32px;
+ _margin-left: 16px;
+ padding: 0;
+ background: url(http://mat1.gtimg.com/news/imgcss_article_qq/tool_bg.png) left repeat-y;
+ }
+
+ .Tool-Article-QQ .appIconB span {
+ display: block;
+ }
+
+ .Tool-Article-QQ .appIconB b {
+ display: none;
+ }
+
+ .Tool-Article-QQ .appIconB a {
+ display: block;
+ width: 290px;
+ height: 40px;
+ background: url(http://mat1.gtimg.com/news/imgcss_article_qq/appBt.png) no-repeat;
+ }
+
+ .Tool-Article-QQ .appIconB a:hover {
+ background-position: 0 -40px;
+ }
+
+ .Tool-Article-QQ .appIconB a:hover {
+ text-decoration: none;
+ }
+
+ .Tool-Article-QQ .appIconB .appIco {
+ display: block;
+ float: left;
+ width: 40px;
+ height: 40px;
+ background: url(http://mat1.gtimg.com/news/imgcss_article_qq/appBt.png) no-repeat;
+ }
+
+ .Tool-Article-QQ .appIconB .downArrow {
+ display: block;
+ float: right;
+ width: 26px;
+ height: 40px;
+ background: url(http://mat1.gtimg.com/news/imgcss_article_qq/appBt.png) -264px 0 no-repeat;
+ }
+
+ .Tool-Article-QQ .appIconBfin a {
+ width: 320px;
+ background-position: 0 -80px;
+ }
+
+ .Tool-Article-QQ .appIconBfin a:hover {
+ background-position: 0 -120px;
+ }
+
+ .Tool-Article-QQ .appIconBfin .appIco {
+ background-position: 0 -80px;
+ }
+
+ .Comment-Article-QQ .commt-sub #cmt_post_btn {
+ background: url(http://mat1.gtimg.com/news/imgcss_article_qq/split_v4.4.png) no-repeat -61px -34px;
+ border: 0 none;
+ color: #FFFFFF;
+ cursor: pointer;
+ font-size: 12px;
+ height: 23px;
+ width: 82px;
+ }
+
+ #Main-Article-QQ .cred {
+ color: red
+ }
+
+ #Main-Article-QQ .cred a,
+ #Main-Article-QQ .cred a:visited,
+ #Main-Article-QQ .cred a:link,
+ #Main-Article-QQ .cred a:hover {
+ color: red;
+ }
+ </style>
+ <!--[if !IE]>|xGv00|65ccee0a3e6965b2bfc62ad50125fd88<![endif]-->
+ <link href="http://tech.qq.com/2012pl/newpl.css" rel="stylesheet" type="text/css" />
+ <script type="text/javascript" src="http://mat1.gtimg.com/joke/Koala/Koala.developer1.3.3.js"></script>
+ <script src="http://mat1.gtimg.com/libs/jquery/1.12.0/jquery.min.js"></script>
+ <script src="http://imgcache.gtimg.cn/tencentvideo_v1/tvp/js/tvp.player_v2_jq.js" charset="utf-8"></script>
+ <style>
+ .wrapper {
+ font: 12px/20px "微软雅黑", Tahoma, Verdana, "宋体"
+ }
+
+ #Cnt-Main-Article-QQ {
+ font-size: 15px;
+ font-family: "微软雅黑", Tahoma, Verdana, "宋体"
+ }
+
+ #Cnt-Main-Article-QQ p {
+ line-height: 30px;
+ }
+
+ .nAdTop-Article-QQ {
+ width: 1000px;
+ margin: 8px auto 0 auto;
+ }
+
+ .cf:after {
+ content: "";
+ display: block;
+ clear: both;
+ height: 0px;
+ visibility: hidden;
+ }
+
+ .cf {
+ *display: inline-block;
+ zoom: 1;
+ }
+
+ .Day-Article-QQ .hd a.rightLink {
+ display: none;
+ }
+
+ .place-Article-QQ li p {
+ float: right;
+ background: url(http://mat1.gtimg.com/tech/dc/icon_pl.png) no-repeat left center;
+ padding-left: 20px;
+ padding-right: 5px;
+ color: #8d8d8d;
+ }
+
+ .place-Article-QQ li a,
+ .place-Article-QQ li a:link,
+ .place-Article-QQ li a:visited {
+ color: #000;
+ }
+
+ .place-Article-QQ li a:hover {
+ color: #c00;
+ }
+
+ .place-Article-QQ li p a,
+ .place-Article-QQ li p a:link,
+ .place-Article-QQ li p a:visited,
+ .place-Article-QQ li p a:hover {
+ float: none;
+ color: #8D8D8D;
+ }
+
+ .place-Article-QQ li {
+ border-bottom: 1px dotted #DCDCDC;
+ padding: 12px 10px 7px;
+ width: 95%;
+ }
+
+ .place-Article-QQ ol {
+ margin-left: 0;
+ }
+
+ .place-Article-QQ li em.hot {
+ background: #cc2b33;
+ }
+
+ .place-Article-QQ li em {
+ background: #a1a1a1;
+ }
+
+ #Main-Article-QQ {
+ background: none;
+ }
+
+ #Main-Article-QQ .main {
+ width: 648px;
+ color: #434343;
+ }
+
+ .post-area-wapper {
+ width: 635px;
+ }
+
+ .place-Article-QQ .bd {
+ background: none;
+ }
+
+ .Crumbs-Article-QQ span {
+ display: none;
+ }
+
+ .wrapper {
+ width: 1000px;
+ }
+
+ .Crumbs-Article-QQ {
+ padding: 10px 0 12px 0;
+ }
+
+ .Form-Crumbs-Article-QQ {
+ padding-right: 10px;
+ }
+
+ #Main-Article-QQ {
+ border-top: 1px solid #dadada;
+ border-bottom: 1px solid #dadada;
+ }
+
+ #Main-Article-QQ .main {
+ border-top: none;
+ }
+
+ #C-Main-Article-QQ {
+ border: none;
+ }
+
+ .mod-left {
+ width: 670px;
+ }
+
+ #C-Main-Article-QQ .hd,
+ #C-Main-Article-QQ .bd {
+ width: 640px;
+ outline: none
+ }
+
+ #C-Main-Article-QQ .hd {
+ width: 600px;
+ }
+
+ #C-Main-Article-QQ .Introduction {
+ width: 600px;
+ font-size: 16px;
+ }
+ /*增加正文样式*/
+
+ #Cnt-Main-Article-QQ p {
+ font-size: 16px;
+ line-height: 26px;
+ padding: 5px 0;
+ color: #333333;
+ }
+
+ #Cnt-Main-Article-QQ p a {
+ color: #00479d;
+ font-family: '微软雅黑';
+ }
+
+ #Cnt-Main-Article-QQ .introduction1 {
+ background: #f3f2f2;
+ text-indent: 0!important;
+ padding: 10px!important;
+ border-top: 1px solid #e0e0e0;
+ border-bottom: 1px solid #e0e0e0;
+ width: 85%;
+ COLOR: #004986!important;
+ margin: 20px auto 5px auto;
+ }
+ /*增加正文样式*/
+
+ #Main-Article-QQ .side {
+ padding-top: 22px;
+ }
+
+ .otherNews {
+ width: auto;
+ border-top: none;
+ padding-left: 0;
+ }
+
+ .aboutnews li {
+ width: 144px;
+ float: left;
+ }
+
+ .aboutnews li a {
+ font-size: 12px;
+ }
+
+ .aboutnews li a,
+ .aboutnews li a:link,
+ .aboutnews li a:visited,
+ .aboutnews li a:hover {
+ color: #000;
+ }
+
+ .aboutnews li img {
+ width: 140px;
+ height: 90px;
+ margin-bottom: 8px;
+ padding: 2px;
+ border: 1px solid #cccccc;
+ }
+
+ .aboutnews {
+ margin-top: 20px;
+ }
+
+ .otherNews li {
+ padding-left: 22px;
+ line-height: 18px;
+ _padding-left: 22px;
+ *padding-left: 19px;
+ }
+
+ .otherNews h2 {
+ color: #000;
+ float: none;
+ font-family: '微软雅黑', '黑体', Tahoma, Verdana, "宋体";
+ font-size: 18px;
+ font-weight: normal;
+ padding-bottom: 6px;
+ padding-left: 0px
+ }
+
+ .QQeditor {
+ display: block;
+ }
+
+ .correlation-Article-QQ {
+ margin: 0 20px 0 auto;
+ width: auto;
+ }
+
+ .moreBtn {
+ float: right;
+ background: #3499ea;
+ border-bottom: 2px solid #eaeaea;
+ margin-right: 36px;
+ margin-bottom: 20px;
+ _margin-right: 18px;
+ _margin-bottom: 10px;
+ width: 115px;
+ display: none;
+ cursor: pointer
+ }
+
+ .moreBtn h2 {
+ background: url(http://mat1.gtimg.com/digi/dc_new/icon_more11.png) no-repeat 93px center;
+ text-align: center;
+ font-family: "微软雅黑", "MicrosoftYahei", "宋体", "Arial Narrow", sans-serif;
+ font-size: 16px;
+ font-weight: bold;
+ color: #fff;
+ border-right: 1px solid #2a83ca;
+ border-bottom: 1px solid #2a83ca;
+ height: 30px;
+ line-height: 30px;
+ }
+
+ .moreBtnA h2 {
+ background: url(http://mat1.gtimg.com/tech/dc_new/icon_more22.png) no-repeat 93px center;
+ }
+
+ .titleKj {
+ margin-bottom: 15px;
+ margin-right: 21px;
+ }
+
+ #C-Main-Article-QQ .hd,
+ #C-Main-Article-QQ .bd {
+ float: left;
+ }
+
+ #Main-Article-QQ .main {
+ border-right: 1px solid #D8D8D8;
+ width: 670px;
+ }
+
+ #Main-Article-QQ #comment-list {
+ width: 645px;
+ border-left: none;
+ border-right: none;
+ }
+
+ .place-Article-QQ .bd {
+ padding: 0 0 3px 0;
+ }
+
+ .Tool-Article-QQ {
+ display: block;
+ }
+
+ #backqqcom {
+ display: none;
+ }
+
+ #C-Main-Article-QQ h1 {
+ text-align: left;
+ font-family: "微软雅黑", "黑体", Tahoma, Verdana, "宋体";
+ margin-bottom: 28px;
+ font-size: 24px;
+ color: #222;
+ width: 600px;
+ }
+
+ #C-Main-Article-QQ .info {
+ text-align: left;
+ }
+
+ #top_count {
+ font-size: 18px;
+ color: #fff;
+ font-weight: bold;
+ font-family: 'arial';
+ }
+
+ #C-Main-Article-QQ .info .where {
+ padding-left: 0;
+ }
+
+ #C-Main-Article-QQ .info .where a,
+ #C-Main-Article-QQ .info .auth a {
+ color: #222;
+ }
+
+ .where {
+ display: inline-block;
+ padding-right: 10px;
+ }
+
+ .infoMblog {
+ padding-left: 18px;
+ background: url(http://mat1.gtimg.com/digi/dc_new/icon_wb_ly.gif) no-repeat 4px 3px;
+ }
+
+ #C-Main-Article-QQ .infoCol {
+ padding-right: 10px;
+ }
+
+ #C-Main-Article-QQ .hd {
+ padding-top: 28px;
+ }
+
+ #cmt_1:hover {
+ text-decoration: none;
+ }
+
+ .otherZt {
+ width: auto;
+ }
+
+ .aboutRead {
+ margin-bottom: 10px;
+ }
+
+ .aboutTag ul {
+ float: left;
+ padding-top: 8px;
+ }
+
+ .aboutTag li {
+ float: left;
+ margin-right: 5px;
+ background: #8d8d8d;
+ font-size: 14px;
+ font-family: "微软雅黑", Tahoma, Verdana, "宋体";
+ }
+
+ .aboutTag li a {
+ display: block;
+ padding: 0 4px;
+ }
+
+ .aboutTag li a,
+ .aboutTag li a:visited,
+ .aboutTag li a:link,
+ .aboutTag li a:hover {
+ color: #f7f7f7;
+ text-decoration: none;
+ }
+
+ .aboutTag li a:hover {
+ background: #4e4e4e;
+ }
+
+ .moreBtnA {
+ display: block;
+ margin-top: 10px;
+ }
+
+ #C-Main-Article-QQ .titBar {
+ width: auto;
+ }
+
+ .titBar .info {
+ padding-right: 0;
+ }
+
+ #C-Main-Article-QQ .info {
+ position: relative;
+ }
+
+ .comment {
+ width: 640px;
+ margin: 0 auto;
+ }
+
+ .userComment input {
+ margin-left: 10px;
+ }
+
+ .textComment textarea {
+ width: 610px;
+ height: 45px;
+ outline: medium none;
+ resize: none;
+ font-size: 14px;
+ padding: 5px;
+ }
+
+ .hotComment .hd {
+ background: url(http://mat1.gtimg.com/digi/dc_new/icon_hotcomment.png) no-repeat 78px 8px;
+ }
+
+ .hotComment .newComment-title {
+ background: url(http://mat1.gtimg.com/digi/dc_new/icon_newcomment.png) no-repeat 78px 8px;
+ }
+
+ .hotComment .hd h2 {
+ color: #000000;
+ float: none;
+ font-family: "微软雅黑", "黑体", Tahoma, Verdana, "宋体";
+ font-size: 18px;
+ font-weight: bold;
+ padding-bottom: 6px;
+ }
+
+ .hotComment .bd {
+ padding-top: 23px;
+ width: 615px;
+ }
+
+ .borderHd {
+ background: none repeat scroll 0 0 #D1D1D1;
+ height: 1px;
+ overflow: hidden;
+ }
+
+ .borderHdN {
+ background: none repeat scroll 0 0 #636363;
+ height: 1px;
+ overflow: hidden;
+ width: 95px;
+ }
+
+ .commentList {
+ padding-bottom: 10px;
+ }
+
+ .commentList dl {
+ color: #666666;
+ font-size: 14px;
+ }
+
+ .commentList dl dt {
+ float: left;
+ padding-right: 18px;
+ }
+
+ .commentList dl dd p {
+ display: inline;
+ }
+
+ .zbMassage {
+ font-weight: bold;
+ color: #4367a5;
+ }
+
+ .ycMassage {
+ color: #4367a5;
+ }
+
+ .toolComment {
+ padding-left: 40px;
+ padding-top: 5px;
+ }
+
+ .commentTime {
+ color: #8d8d8d;
+ }
+
+ .toolOther {
+ float: right;
+ color: #d3d3d3;
+ }
+
+ .toolColorOne {
+ color: #8c8e8d;
+ }
+
+ .toolColorThree {
+ color: #ff9002;
+ }
+
+ .toolOther a {
+ padding: 0 3px;
+ }
+
+ .addReply {
+ border: 1px solid #e9e9e9;
+ background: #f8f6f7;
+ padding: 3px 19px 15px;
+ }
+
+ .addReply .hd {
+ background: none;
+ }
+
+ .btnNone {
+ float: right;
+ padding: 3px 0 3px 3px;
+ }
+
+ .userCon {
+ padding: 4px 0;
+ }
+
+ .userCon span {
+ padding-left: 3px;
+ }
+
+ .userCon img {
+ float: left;
+ padding-right: 5px;
+ }
+
+ .btnNone img {
+ padding: 0;
+ }
+
+ .userName span {
+ padding-left: 15px;
+ color: #8d8d8d;
+ }
+
+ .userName span a {
+ color: #666
+ }
+
+ .addReply {
+ margin-top: 3px;
+ }
+
+ .addReply .bd textarea {
+ width: 563px;
+ height: 85px;
+ border: 1px solid #d7d7d7;
+ border-bottom: none;
+ outline: medium none;
+ resize: none;
+ font-size: 14px;
+ padding: 5px;
+ }
+
+ .toolAdd {
+ background: #f6f6f8;
+ border: 1px solid #d7d7d7;
+ border-top: none;
+ padding: 3px 10px;
+ }
+
+ .toolAdd span {
+ display: inline-block;
+ }
+
+ .commentFace {
+ background: url(http://mat1.gtimg.com/digi/dc_new/icon_face.png) no-repeat 0 center;
+ padding-left: 24px;
+ }
+
+ .commentFd {
+ background: url(http://mat1.gtimg.com/digi/dc_new/icon_at.png) no-repeat 10px center;
+ padding-left: 34px;
+ }
+
+ .commentZb {
+ padding-left: 5px;
+ }
+
+ .commentZb input {
+ vertical-align: text-top;
+ margin-right: 3px;
+ }
+
+ .sendComment {
+ padding: 12px 0;
+ }
+
+ .sendComment p {
+ float: right;
+ line-height: 30px;
+ padding-right: 14px;
+ color: #9a9a9a;
+ }
+
+ .sendComment p span {
+ font-family: Georgia, Tahoma, Arial;
+ font-size: 26px;
+ position: relative;
+ top: -5px;
+ vertical-align: middle;
+ color: #9a9a9a;
+ }
+
+ .sendComment input {
+ float: right;
+ }
+
+ .commentSuccess {
+ margin-top: 10px;
+ border: 1px solid #ebebeb;
+ background: #ffffff;
+ padding: 17px 0 17px 19px;
+ }
+
+ .commentSuccess p {
+ background: url(http://mat1.gtimg.com/digi/dc_new/comment_success.png) no-repeat 0 center;
+ padding-left: 26px;
+ font-size: 14px;
+ color: #666666;
+ }
+
+ .loginComment {
+ margin-bottom: 10px;
+ }
+
+ .toolComment {
+ border-bottom: 1px dotted #b8b8b8;
+ margin-bottom: 20px;
+ padding-bottom: 6px;
+ font-size: 12px;
+ }
+
+ .shareBtn {
+ float: right;
+ display: inline-block;
+ padding: 3px 20px 20px;
+ width: 24px;
+ line-height: 20px;
+ cursor: pointer;
+ }
+
+ .Tool-Article-QQ {
+ height: auto;
+ padding: 20px 12px 10px 0
+ }
+
+ .Tool-Article-QQ ul {
+ float: left;
+ width: 100%;
+ }
+
+ .sanJiao {
+ background: url(http://mat1.gtimg.com/digi/dc_new/icon_sanjiao.png) no-repeat right bottom;
+ height: 40px;
+ width: 90px;
+ }
+
+ .place-Article-QQ {
+ margin-bottom: 10px;
+ }
+
+ #__pop_reply .bd {
+ padding-top: 0;
+ width: 575px;
+ }
+
+ .Form-Crumbs-Article-QQ {
+ padding-right: 0
+ }
+
+ .i_cor {
+ background: url(http://mat1.gtimg.com/digi/dc_new/icon_1.png) no-repeat;
+ width: 10px;
+ height: 5px;
+ overflow: hidden;
+ position: absolute;
+ top: 6px;
+ margin-left: 5px
+ }
+ /* E */
+ /* 这是新辣椒图标 */
+
+ #infoCommBg {
+ height: 39px;
+ line-height: 33px;
+ position: absolute;
+ right: 320px;
+ top: 25px;
+ z-index: 10;
+ }
+
+ .sanJiao a {
+ float: right;
+ text-align: center;
+ background: #757575;
+ cursor: pointer;
+ }
+
+ .sanJiao .num {
+ display: inline-block;
+ padding: 0 7px 0 47px;
+ background: url(http://mat1.gtimg.com/digi/2012/shuma2013/linkai/icon_commentNumber.gif) no-repeat 0 0 #757575;
+ }
+
+ .infoComm .sanJiao .num {
+ width: 20px;
+ height: 33px
+ }
+
+ .infoComm_A .sanJiao .num {
+ background-position: 0 0;
+ }
+
+ .infoComm_B .sanJiao .num {
+ background-position: 0 -35px;
+ }
+
+ .infoComm_C .sanJiao .num {
+ background-position: 0 -70px;
+ }
+
+ .infoComm_D .sanJiao .num {
+ background-position: 0 -105px;
+ padding: 0 7px 0 50px;
+ }
+
+ .infoComm_E .sanJiao .num {
+ background-position: 0 -140px;
+ }
+
+ .infoComm_F .sanJiao .num {
+ background-position: 0 -175px;
+ padding: 0 7px 0 69px;
+ }
+
+ .plContent {
+ width: 669px;
+ }
+
+ .newspl1 {
+ width: 669px;
+ }
+
+ .plContent .bd h2 {
+ margin-right: 40px;
+ }
+
+ .page {
+ display: none;
+ }
+
+ .newspl1 .otherNews {
+ margin-right: 20px;
+ }
+
+ .newplArea li {
+ float: none;
+ display: inline-block;
+ margin-right: 39px;
+ }
+
+ .moreBtnA a,
+ .moreBtnA a:visited,
+ .moreBtnA a:link,
+ .moreBtnA a:hover {
+ color: #fff;
+ text-decoration: none;
+ }
+
+ .aboutmblog_mod {
+ overflow: visible;
+ }
+
+ #toTop {
+ width: 58px;
+ height: 58px;
+ position: fixed;
+ right: 25px;
+ bottom: 45px;
+ background: url(http://mat1.gtimg.com/digi/dc_new/to_top.png);
+ opacity: 0.5;
+ filter: alpha(opacity=50);
+ _position: absolute;
+ display: none
+ }
+
+ #toTop:hover {
+ opacity: 1;
+ filter: alpha(opacity=100);
+ background: url(http://mat1.gtimg.com/tech/dc_new/to_top_b.png)
+ }
+
+ .newplArea .login {
+ margin-top: 13px;
+ }
+
+ .newplArea {
+ padding-bottom: 9px;
+ }
+
+ .commentHd {
+ overflow: hidden;
+ }
+
+ #Main-Article-QQ {
+ background: url(http://mat1.gtimg.com/digi/dc_new/bg_body.png) repeat-y 0 0;
+ }
+
+ #C-Main-Article-QQ .Line {
+ margin-top: 7px;
+ }
+
+ .shareMod a b {
+ display: none;
+ }
+
+ .moreBtnA {
+ display: none;
+ }
+
+ .uesrUp a {
+ display: block;
+ color: #8c8d8e;
+ font-weight: normal
+ }
+
+ .uesrUp a,
+ .uesrUp a:link,
+ .uesrUp a:visited,
+ .uesrUp a:hover {
+ color: #8c8d8e;
+ text-decoration: none;
+ }
+
+ .uesrUp a:hover {
+ color: #FF9002
+ }
+
+ .titShareIcon {
+ display: inline-block;
+ background: url(http://mat1.gtimg.com/digi/dc_new/icon_share_down.png) no-repeat right 6px;
+ padding-right: 6px;
+ width: 34px;
+ }
+
+ .place-Article-QQ {
+ width: 300px;
+ margin: 0 auto 0px;
+ }
+
+ .place-Article-QQ .bd {
+ border: none;
+ }
+
+ .place-Article-QQ .hd {
+ background: none;
+ height: auto;
+ }
+
+ .place-Article-QQ div.hd h2 {
+ font-family: '微软雅黑', '黑体', Tahoma, Verdana, "宋体";
+ font-size: 18px;
+ color: #000;
+ float: none;
+ padding-left: 0;
+ }
+
+ .borderHd {
+ background: #d1d1d1;
+ height: 1px;
+ overflow: hidden;
+ }
+
+ .borderHdN {
+ background: #636363;
+ height: 1px;
+ overflow: hidden;
+ }
+
+ .conUse {
+ margin-top: 15px;
+ padding-bottom: 0px;
+ border-bottom: 1px dotted #b8b9b9
+ }
+
+ .commentHd div.userPic {
+ float: left;
+ overflow: hidden;
+ margin-right: 10px;
+ margin-top: 4px;
+ display: inline-block;
+ }
+
+ .commentHd .userInfo {
+ float: left;
+ overflow: hidden;
+ padding-left: 12px;
+ clear: right
+ }
+ /* by link 2013-02-01 */
+
+ .commentHd .userPic img {
+ border-radius: 5px
+ }
+
+ .commentHd .userName {
+ font-size: 14px;
+ font-weight: bold;
+ padding: 0 5px 3px 0px;
+ color: #455c85;
+ line-height: 19px;
+ height: 19px;
+ float: none;
+ clear: both;
+ display: block
+ }
+
+ .commentHd .userName a {
+ margin-right: 10px;
+ color: #666;
+ }
+
+ .commentHd .userName a:hover {
+ color: #cc0000
+ }
+
+ .commentHd span {
+ float: left
+ }
+
+ .commentHd div.ucontent {
+ font-size: 12px;
+ color: #535353;
+ line-height: 18px;
+ float: left;
+ width: 248px;
+ overflow: hidden;
+ }
+ /* by link 2013-01-23 */
+
+ .commentHd .ucontent a {
+ color: #134874;
+ display: inline-block;
+ /*color:#666;font-weight:800;*/
+ }
+
+ .commentHd .ucontent a.zuozheName {
+ outline: none
+ }
+
+ .commentHd .ucontent .lk_con em img {
+ height: 14px;
+ }
+
+ .commentHd .ucontent .lk_jiav {
+ display: inline-block;
+ vertical-align: baseline;
+ padding: 0px 0 0 32px;
+ font-size: 12px;
+ color: #888;
+ background: url(http://mat1.gtimg.com/digi/2012/shuma2013/linkai/jiav.gif) no-repeat 8px 2px;
+ height: 18px;
+ line-height: 17px;
+ +line-height: 18px;
+ }
+ /*20130114 by link*/
+
+ .commentHd .ucontent a.zuozheName {
+ display: inline;
+ outline: none
+ }
+
+ .commentHd .ucontent .lk_p_1em {
+ white-space: nowrap;
+ overflow: hidden;
+ }
+
+ .commentHd .ucontent .lk_con {
+ font-family: "宋体";
+ }
+
+ .commentHd .ucontent .lk_con em {
+ font-family: "微软雅黑", Tahoma, Verdana, "宋体";
+ }
+
+ .commentHd .ucontent .lk_con em img {
+ height: 18px;
+ vertical-align: -4px;
+ }
+
+ .commentHd .ucontent .lk_jiav {
+ display: inline-block;
+ vertical-align: baseline;
+ padding: 0 0 0 32px;
+ font-size: 12px;
+ color: #888;
+ background: url(http://mat1.gtimg.com/digi/2012/shuma2013/linkai/jiav.gif) no-repeat 8px 0;
+ height: 18px;
+ line-height: 17px;
+ +line-height: 18px;
+ }
+
+ .commentHd .ucontent .lk_city {
+ white-space: nowrap;
+ display: inline-block;
+ margin-left: 10px;
+ height: 18px;
+ line-height: 17px;
+ +line-height: 18px;
+ color: #777;
+ }
+
+ .commentBd {
+ color: #8c8d8e;
+ margin-top: 10px;
+ height: 30px
+ }
+
+ .commentBd p.postInfo {
+ height: 24px;
+ line-height: 24px;
+ overflow: visible;
+ }
+
+ .commentBd p.postInfo a {
+ float: right;
+ padding-right: 15px
+ }
+
+ .commentBd p.postInfo .upNum {
+ color: #8c8d8e;
+ font-weight: 800;
+ padding-left: 20px;
+ background: url(http://mat1.gtimg.com/digi/2012/shuma2012/backbg.png) 0px -47px no-repeat;
+ position: relative
+ }
+
+ .commentBd p.postInfo .upNum span {
+ position: absolute;
+ left: 13px;
+ bottom: 18px;
+ color: #ff9000;
+ font-family: Arial;
+ font-weight: 800;
+ font-size: 11px;
+ filter: alpha(opacity=0);
+ opacity: 0
+ }
+
+ .commentBd p.postInfo .upNum:hover {
+ background-position: 0px -72px;
+ color: #ff9000
+ }
+
+ .commentBd p.postInfo .zhuanbo {
+ background: url(http://mat1.gtimg.com/digi/2012/shuma2012/backbg.png) 0px -98px no-repeat;
+ width: 15px;
+ height: 20px;
+ text-indent: -10000px
+ }
+
+ .commentBd p.postInfo .zhuanbo:hover {
+ background-position: 0 -122px
+ }
+
+ .commentBd p .pinglun {
+ background: url(http://mat1.gtimg.com/digi/2012/shuma2012/backbg.png) 0px -18px no-repeat;
+ width: 15px;
+ height: 20px;
+ text-indent: -10000px;
+ padding-right: 0px
+ }
+
+ .commentBd p .pinglun:hover {
+ background-position: 0 5px
+ }
+
+ .commentHd p .pinglun {
+ background: url(http://mat1.gtimg.com/digi/2012/shuma2012/backbg.png) 0px -18px no-repeat;
+ width: 15px;
+ height: 20px;
+ text-indent: -10000px;
+ padding-right: 0px;
+ position: absolute;
+ right: 0;
+ }
+
+ .commentHd p.lk_p_1em .pinglun:hover {
+ background-position: 0 5px;
+ }
+
+ .userTime {
+ display: inline-block;
+ font-size: 12px;
+ color: #8d8d8d;
+ padding: 0 3px 0 0;
+ line-height: 20px;
+ height: 20px;
+ *margin-top: 0px;
+ vertical-align: top;
+ }
+
+ .userTime a,
+ .userTime a:visited {
+ color: #666
+ }
+
+ .uesrUp {
+ font-size: 12px;
+ display: inline-block;
+ line-height: 20px;
+ color: #8c8d8e;
+ font-weight: bold;
+ margin-left: 10px
+ }
+
+ .commentCon {
+ font-size: 14px;
+ color: #222;
+ }
+
+ .commentCon p {
+ padding: 12px 0px 0px 0px;
+ clear: both;
+ line-height: 26px
+ }
+
+ p.fromComment {
+ padding-top: 0px;
+ font-size: 12px;
+ line-height: 20px;
+ color: #8c8d8e;
+ width: 152px;
+ margin-top: -24px;
+ margin-left: 50px;
+ }
+
+ .commentCon p.fromComment a:hover {
+ color: #cc0000
+ }
+
+ .fromComment span {
+ color: #8d8d8d;
+ }
+
+ .fromComment a,
+ .fromComment a:visited,
+ .fromComment a:link,
+ .fromComment a:hover {
+ color: #8c8d8e;
+ }
+
+ .newspl1 .plDinfo .commt-sub {
+ margin-right: 58px
+ }
+
+ .hotA li {
+ padding: 0px;
+ width: 300px;
+ padding-bottom: 14px;
+ margin-top: 15px
+ }
+
+ .hotA li .pica {
+ float: left;
+ width: 92px;
+ margin-top: 4px
+ }
+
+ .hotA li .pica img {
+ border: 1px solid #e1e1e1
+ }
+
+ .hotA li .infoo {
+ float: right;
+ width: 195px;
+ display: inline
+ }
+
+ .hotA li div.infoo a {
+ float: none;
+ width: auto;
+ display: block;
+ font-size: 12px;
+ color: #333;
+ line-height: 20px
+ }
+
+ .qqspace li div.infoo a {
+ font-size: 14px;
+ }
+
+ .hotA li .infoo a:hover {
+ color: #cc0000
+ }
+
+ .hotA li .infoo span {
+ color: #8d8d8d;
+ margin-top: 2px;
+ display: block
+ }
+ /*工具条*/
+
+ .shareBtn {
+ float: right;
+ background: none!important;
+ padding: 0;
+ }
+
+ .shareBtn-hd {
+ display: inline-block;
+ position: relative;
+ z-index: 3;
+ width: 64px;
+ height: 23px;
+ padding-left: 8px;
+ border: 1px solid #fff;
+ border-bottom: none;
+ border-left: 1px solid #FFF;
+ color: #676767;
+ line-height: 21px;
+ font-size: 12px;
+ text-decoration: none;
+ }
+
+ .h-shareBtn .shareBtn-hd {
+ float: left;
+ width: 55px;
+ padding-left: 0;
+ padding-top: 5px;
+ color: #666;
+ font-size: 14px;
+ }
+
+ .shareBtn-hd i {
+ position: absolute;
+ right: 6px;
+ top: 8px;
+ width: 0;
+ height: 0;
+ font-size: 0;
+ line-height: 0;
+ border-width: 4px;
+ border-style: solid;
+ border-color: #8b8c8e #fff #fff;
+ -moz-transition: -moz-transform .2s ease-in;
+ -webkit-transition: -webkit-transform .2s ease-in;
+ -o-transition: -o-transform .2s ease-in;
+ transition: transform .2s ease-in;
+ -moz-transform: rotate(0);
+ -webkit-transform: rotate(0);
+ -o-transform: rotate(0);
+ transform: rotate(0);
+ }
+
+ .hover .shareBtn-hd i {
+ -moz-transform: rotate(180deg);
+ -moz-transform-origin: 50% 30%;
+ -webkit-transform: rotate(180deg);
+ -webkit-transform-origin: 50% 30%;
+ -o-transform: rotate(180deg);
+ -o-transform-origin: 50% 30%;
+ transform: rotate(180deg);
+ transform-origin: 50% 30%;
+ filter: progid: DXImageTransform.Microsoft.BasicImage(rotation=2);
+ top: 3px\9;
+ }
+
+ .showItem .shareBtn-hd {
+ border: 1px solid #d1d1d1;
+ border-bottom: none;
+ background: #fff;
+ }
+
+ .v-shareBtn {
+ width: 64px;
+ height: 40px;
+ font-size: 12px;
+ z-index: 12;
+ position: absolute;
+ top: 0;
+ right: -58px;
+ }
+
+ .v-shareBtn .shareBtn-bd {
+ display: none;
+ position: absolute;
+ z-index: 2;
+ left: 0;
+ top: 22px;
+ border: 1px solid #d1d1d1;
+ width: 92px;
+ padding: 8px 0;
+ background: #fff;
+ }
+
+ .showItem .shareBtn-bd {
+ display: block;
+ }
+
+ .shareBtn-bd li {
+ height: 24px;
+ padding: 0 0 0 11px;
+ line-height: 24px;
+ }
+
+ .shareBtn-bd li.hover {
+ background: #f3f3f3;
+ }
+
+ .shareBtn-bd a {
+ display: block;
+ padding-left: 22px;
+ color: #5c5c5c;
+ }
+
+ .shareBtn-bd li.hover a {
+ color: #c00;
+ }
+
+ .Tool-Article-QQ .shareBtn {
+ width: 210px;
+ margin-top: 10px;
+ font-size: 12px;
+ float: right;
+ padding: 0;
+ text-align: right;
+ margin-right: -15px;
+ }
+
+ .Tool-Article-QQ a {
+ background: none
+ }
+
+ .h-shareBtn .shareBtn-bd li {
+ float: left;
+ width: 24px;
+ height: 24px;
+ padding: 0;
+ overflow: hidden;
+ margin-right: 5px;
+ }
+
+ .h-shareBtn .shareBtn-bd a {
+ display: block;
+ width: 0;
+ height: 24px;
+ padding-left: 24px;
+ filter: Alpha(Opacity=80);
+ opacity: .8;
+ -moz-transition: opacity .5s ease;
+ -webkit-transition: opacity .5s ease;
+ -o-transition: opacity .5s ease;
+ transition: opacity .5s ease;
+ }
+
+ .h-shareBtn .shareBtn-bd a:hover {
+ filter: Alpha(Opacity=100);
+ opacity: 1;
+ }
+
+ .shareBtn16 .s_weibo {
+ background-position: -66px -2px;
+ }
+
+ .shareBtn16 .s_qzone {
+ background-position: -66px -25px;
+ }
+
+ .shareBtn16 .s_weixin {
+ background-position: -66px -49px;
+ }
+
+ .shareBtn16 .s_sina {
+ background-position: -66px -98px;
+ }
+
+ .shareBtn16 .s_qmail {
+ background-position: -66px -146px;
+ }
+
+ .shareBtn16 .s_qq {
+ background: url(http://mat1.gtimg.com/news/dc/images/qqshare_16_24.png) 0 5px no-repeat;
+ }
+
+ .shareBtn24 .s_weibo {
+ background-position: -62px -200px;
+ }
+
+ .shareBtn24 .s_qzone {
+ background-position: -62px -229px;
+ }
+
+ .shareBtn24 .s_weixin {
+ background-position: -62px -258px;
+ }
+
+ .shareBtn24 .s_sina {
+ background-position: -62px -316px;
+ }
+
+ .shareBtn24 .s_qq {
+ background: url(http://mat1.gtimg.com/news/dc/images/qqshare_16_24.png) -18px -25px no-repeat;
+ }
+
+ .shareBtn24 .s_ewm {
+ background: url(http://mat1.gtimg.com/news/dc/images/icon_wx_24.png) no-repeat;
+ }
+ /*分享-微信*/
+
+ .shareBtn #shareWx {
+ position: relative;
+ }
+
+ .shareBtn #shareWx a {
+ background: url('http://mat1.gtimg.com/news/dc/images/weixin_16.png') no-repeat scroll left center;
+ }
+
+ .shareBtn #shareWx .ewmBox {
+ display: none;
+ width: 136px;
+ height: 136px;
+ border: 1px solid #d0d0d0;
+ background-color: #FFFFFF;
+ position: absolute;
+ top: -105px;
+ right: -138px;
+ }
+
+ .shareBtn #shareWx .ewmBox img {
+ width: 126px;
+ height: 126px;
+ padding: 5px;
+ }
+
+ .shareBtn-bd .shareBtn24 .s_in {
+ background: url('http://mat1.gtimg.com/news/dc/images/linkedIn.png') no-repeat;
+ }
+
+ .shareBtn-bd .s_in {
+ background: url('http://mat1.gtimg.com/news/dc/images/linkedIn_16.png') no-repeat left center;
+ }
+ /*微信弹出*/
+
+ .pop_two_code {
+ width: 255px;
+ height: 89px;
+ border: 2px solid #dcdcdc;
+ padding: 10px;
+ background: #fff;
+ border-radius: 5px;
+ position: absolute;
+ z-index: 9999;
+ }
+
+ .pop_two_code img {
+ width: 85px;
+ height: 85px;
+ float: left;
+ margin-right: 10px;
+ }
+
+ .pop_two_code p {
+ line-height: 24px;
+ font-size: 12px;
+ margin-top: 5px;
+ }
+
+ .pop_two_code .pop_close {
+ width: 13px;
+ height: 13px;
+ position: absolute;
+ right: 12px;
+ top: 11px;
+ cursor: pointer;
+ background: url(http://mat1.gtimg.com/news/dc/icon_wem_k_k.png) no-repeat 0 0;
+ }
+
+ .pop_two_code .down_arrow {
+ width: 18px;
+ height: 13px;
+ position: absolute;
+ right: 15px;
+ bottom: -13px;
+ background: url(http://mat1.gtimg.com/news/dc/icon_erwm_sj.png) no-repeat 0 0;
+ }
+ /*相关新闻*/
+
+ .otherNews {
+ margin: 0 auto;
+ margin-bottom: 7px;
+ color: #1C2C58;
+ border-top: none;
+ }
+
+ .otherNews li {
+ padding-left: 13px;
+ line-height: 25px;
+ text-align: left;
+ }
+
+ .otherNews a {
+ font-size: 14px;
+ }
+
+ .otherNews .bestSelect p {
+ font-size: 14px;
+ }
+
+ .otherNews .bestSelect p strong {
+ display: block;
+ color: black;
+ font-family: "微软雅黑", "MicrosoftYahei", "宋体", "Arial Narrow", sans-serif;
+ font-size: 20px;
+ font-weight: normal;
+ margin-bottom: 8px;
+ padding-bottom: 6px;
+ padding-left: 10px;
+ border-bottom: #D1D1D1 1px solid;
+ }
+
+ .otherNews .bestSelect p span {
+ font-size: 12px;
+ padding-left: 6px;
+ color: #8a8a8a;
+ }
+
+ .otherNews table {
+ margin-top: 4px;
+ }
+
+ .otherNews td,
+ .otherNews p {
+ color: #8c8d8e;
+ }
+
+ .otherNews td a,
+ .otherNews p a {
+ line-height: 30px;
+ color: #000;
+ margin-left: 0px;
+ }
+
+ .otherNews td span {
+ padding-left: 6px;
+ color: #8C8D8E;
+ font-family: Arial;
+ }
+
+ .otherNews .norrow td span {
+ padding: 0;
+ color: #8C8D8E;
+ }
+
+ .page-Article-QQ span {
+ background: #258cff;
+ width: 30px;
+ height: 30px;
+ line-height: 30px
+ }
+
+ .page-Article-QQ a {
+ background: none;
+ border: 1px solid #dedede;
+ width: 28px;
+ height: 28px;
+ line-height: 28px
+ }
+
+ .page-Article-QQ span.next,
+ .page-Article-QQ a.next {
+ background: none;
+ width: 60px;
+ height: 30px;
+ line-height: 30px
+ }
+
+ .page-Article-QQ span.next {
+ border: 1px solid #dedede;
+ }
+
+ .last {
+ border: none
+ }
+
+ .hotA {
+ margin-bottom: 10px
+ }
+
+ #latest_area,
+ #hot_area {
+ display: none;
+ }
+
+ .bottomAds {
+ width: 1000px;
+ margin: 10px auto;
+ }
+
+ .TopAds {
+ width: 1000px;
+ margin: 10px auto 0 auto;
+ }
+
+ #Tech_F_Width1 {
+ margin: 0 auto;
+ }
+
+ .djrpTitle,
+ .rdwpTitle {
+ margin-top: 10px;
+ }
+ /*修正组图字色*/
+
+ .titleArea .phot-desp {
+ color: #fff!important;
+ font-size: 14px!important;
+ line-height: 24px!important;
+ padding: 0!important;
+ }
+
+ .photo-warp-inner .titleArea {
+ margin-top: 5px!important;
+ }
+ /*修正组图文字字号*/
+
+ #contTxt p {
+ font-size: 16px!important;
+ }
+ /*-------20130114 by link--------*/
+
+ .Tool-Article-QQ .shareTxt {
+ background: url(http://mat1.gtimg.com/digi/2012/shuma2013/linkai/icon_link.gif) no-repeat 0 7px;
+ width: 30px;
+ height: 24px;
+ line-height: 200px;
+ overflow: hidden;
+ }
+
+ .Tool-Article-QQ ul {
+ float: right;
+ width: auto;
+ }
+
+ .aboutRead {
+ margin-bottom: 10px;
+ }
+ /*.aboutRead .aboutTag ul{background:#424242 url(http://mat1.gtimg.com/digi/2012/shuma2013/linkai/icon_tags.gif) no-repeat; padding-left:19px;}*/
+
+ .aboutRead .aboutTag li {
+ float: left;
+ padding: 1px 4px;
+ margin-right: 4px;
+ display: inline-block;
+ background: #8d8d8d;
+ /*height:30px; margin-left:2px; padding:0 8px; font:18px/30px '\5FAE\8F6F\96C5\9ED1';background:#f99200;*/
+ }
+
+ .aboutRead .aboutTag li a,
+ .aboutRead .aboutTag li a:visited {
+ font-size: 14px;
+ color: #FFF;
+ font-family: Arial, Helvetica, sans-serif;
+ }
+
+ .aboutRead .aboutTag li a:hover {
+ color: #FFF;
+ }
+
+ .correlation-Article-QQ .aboutRead {
+ position: absolute;
+ top: 52px
+ }
+
+ .correlation-Article-QQ .aboutRead .aboutTag {
+ width: 355px;
+ white-space: nowrap;
+ height: 30px;
+ overflow: hidden;
+ }
+
+ .correlation-Article-QQ .aboutRead dl {
+ float: left;
+ width: 500px;
+ }
+
+ .correlation-Article-QQ .aboutRead dl a {
+ color: #fff;
+ background: none;
+ width: auto;
+ height: auto;
+ font-family: "微软雅黑", "MicrosoftYahei", "宋体", "Arial", sans-serif;
+ }
+
+ .correlation-Article-QQ .aboutRead dl a:hover {
+ color: #fff;
+ }
+
+ .correlation-Article-QQ .aboutRead dt {
+ float: left;
+ display: inline-block;
+ height: 30px;
+ width: 17px;
+ font: 12px/12px '\5B8B\4F53';
+ color: #fff;
+ background: #424242 url(http://mat1.gtimg.com/digi/2012/shuma2013/linkai/icon_tags.gif) no-repeat;
+ overflow: hidden;
+ line-height: 200px;
+ }
+
+ .correlation-Article-QQ .aboutRead dd {
+ float: left;
+ display: inline-block;
+ height: 30px;
+ margin-left: 2px;
+ padding: 0 8px;
+ font: 18px/30px '\5FAE\8F6F\96C5\9ED1';
+ background: #f99200;
+ }
+
+ .correlation-Article-QQ .aboutRead dd.bgA {
+ background: #f94c00;
+ }
+
+ .correlation-Article-QQ .aboutRead dd.bgB {
+ background: #f97500;
+ }
+
+ .correlation-Article-QQ .aboutRead dd.bgC {
+ background: #f99200;
+ }
+ /*相关新闻*/
+
+ .otherNews {
+ margin: 0 auto;
+ margin-bottom: 7px;
+ color: #1C2C58;
+ border-top: none;
+ }
+
+ .otherNews li {
+ padding-left: 13px;
+ line-height: 25px;
+ text-align: left;
+ }
+
+ .otherNews a {
+ font-size: 14px;
+ }
+
+ .otherNews .bestSelect p {
+ font-size: 14px;
+ }
+
+ .otherNews .bestSelect p strong {
+ display: block;
+ color: black;
+ font-family: "微软雅黑", "MicrosoftYahei", "宋体", "Arial Narrow", sans-serif;
+ font-size: 20px;
+ font-weight: normal;
+ margin-bottom: 8px;
+ padding-bottom: 6px;
+ padding-left: 10px;
+ border-bottom: #D1D1D1 1px solid;
+ }
+
+ .otherNews .bestSelect p span {
+ font-size: 12px;
+ padding-left: 6px;
+ color: #8a8a8a;
+ }
+
+ .otherNews table {
+ margin-top: 4px;
+ }
+
+ .otherNews td,
+ .otherNews p {
+ color: #8c8d8e;
+ }
+
+ .otherNews td {
+ font-family: '宋体';
+ }
+
+ .otherNews td a,
+ .otherNews p a {
+ line-height: 30px;
+ color: #000;
+ }
+
+ .otherNews td a {
+ font-family: "微软雅黑", Tahoma, Verdana, "宋体";
+ }
+
+ .otherNews td span {
+ padding-left: 6px;
+ color: #8C8D8E;
+ font-family: Arial;
+ }
+
+ .otherNews .norrow td span {
+ padding: 0;
+ color: #8C8D8E;
+ }
+
+ .page-Article-QQ span {
+ background: #f6b433;
+ width: 30px;
+ height: 30px;
+ background: #f6b433;
+ line-height: 30px;
+ font-size: 14px
+ }
+
+ .page-Article-QQ a {
+ background: none;
+ border: 1px solid #dedede;
+ width: 28px;
+ height: 28px;
+ line-height: 28px;
+ font-size: 14px;
+ color: #000
+ }
+
+ .page-Article-QQ span.next,
+ .page-Article-QQ a.next {
+ background: none;
+ width: 60px;
+ height: 30px;
+ line-height: 30px
+ }
+
+ .page-Article-QQ span.next {
+ border: 1px solid #dedede;
+ }
+
+ .last {
+ border: none
+ }
+
+ .hotA {
+ margin-bottom: 10px;
+ margin-top: 10px
+ }
+
+ #changeName span.userTime a {
+ color: #666
+ }
+
+ #changeName span.userTime a:hover {
+ color: #cc0000
+ }
+
+ #hot_area,
+ #latest_area {
+ display: none
+ }
+
+ #pop_rightreply {
+ width: 630px
+ }
+ /*相关专题、相关文章*/
+
+ .otherNews .hd_c ul {
+ padding: 5px;
+ margin-top: 4px;
+ }
+
+ .otherNews .hd_c li {
+ /*background:url(http://mat1.gtimg.com/digi/2012/shuma2013/linkai/icon_dot.gif) no-repeat 3px 13px;*/
+ padding-left: 3px;
+ color: #8C8D8E;
+ line-height: 30px;
+ height: 30px;
+ }
+
+ .otherNews .hd_c li a {
+ color: #000;
+ line-height: 30px;
+ display: inline;
+ }
+
+ .otherNews .hd_c li em {
+ display: inline-block;
+ margin-left: 10px;
+ font-style: normal;
+ color: #8c8d8e;
+ }
+
+ .otherNews .hd_c li i {
+ float: none;
+ vertical-align: middle;
+ display: inline-block;
+ margin-left: 4px;
+ height: 17px;
+ line-height: 17px;
+ text-indent: -1000px;
+ overflow: hidden;
+ background: url(http://mat1.gtimg.com/digi/2012/shuma2013/linkai/dingyue.gif) no-repeat;
+ }
+
+ .otherNews .hd_c li i.dy_bt {
+ background-position: 0 0;
+ width: 41px
+ }
+
+ .otherNews .hd_c li i.dy_bt span {
+ display: block;
+ width: 68px;
+ height: 17px;
+ margin-top: 0px;
+ padding: 0;
+ text-indent: -99em;
+ background: none;
+ cursor: pointer;
+ }
+
+ .otherNews .hd_c li i.dy_done {
+ background-position: 0 -23px;
+ width: 68px;
+ display: inline-block;
+ float: none;
+ color: #999;
+ }
+
+ .otherNews .hd_c li i.dy_done span {
+ display: none;
+ }
+
+ .otherNews .hd_c li i.dy_done a {
+ float: left;
+ width: 68px;
+ height: 17px;
+ margin-top: 0px;
+ padding: 0;
+ background: none;
+ text-align: center;
+ text-indent: -199px;
+ }
+ /******加名人图标******/
+
+ .newplArea li .fontsInfo {
+ font-size: 12px;
+ line-height: 18px
+ }
+ /* by link 2013-01-23*/
+
+ .newplArea li .fontsInfo a {
+ font-weight: normal;
+ }
+
+ .newplArea li .fontsInfo p .lk_jiav {
+ display: inline-block;
+ vertical-align: baseline;
+ padding: 0 0 0 32px;
+ font-size: 12px;
+ color: #888;
+ background: url(http://mat1.gtimg.com/digi/2012/shuma2013/linkai/jiav.gif) no-repeat 8px 0;
+ height: 18px;
+ line-height: 17px;
+ +line-height: 18px;
+ }
+
+ .newplArea li .fontsInfo p .lk_city {
+ color: #777;
+ margin-left: 10px;
+ display: inline-block;
+ height: 18px;
+ line-height: 17px;
+ +line-height: 18px;
+ }
+
+ .plArea li p .lk_city {
+ color: #777;
+ margin-left: 10px;
+ display: inline-block;
+ height: 18px;
+ line-height: 17px;
+ +line-height: 18px;
+ }
+
+ .newplArea li .fontsInfo .lk_con {}
+
+ .newplArea li .fontsInfo .lk_con img {
+ height: 14px;
+ }
+
+ .newplArea li .fontsInfo .fonts-info {
+ height: 14px;
+ margin-top: 10px;
+ }
+
+ .newplArea li .fontsInfo .timeDate {
+ margin: 0;
+ display: inline
+ }
+
+ #rightList .conUse span.dot {
+ overflow: hidden;
+ }
+
+ .newplArea li .imgico {
+ margin-left: 0;
+ }
+ /* relativeVide S */
+
+ .relativeVideo {
+ width: 640px;
+ position: relative;
+ margin-bottom: 0px;
+ cursor: pointer;
+ overflow: hidden
+ }
+
+ .relInfo {
+ background: #f3f3f3;
+ height: 105px;
+ overflow: hidden
+ }
+
+ .relStatus {
+ background: #f6f9fe
+ }
+
+ .relPic {
+ width: 140px;
+ height: 105px;
+ overflow: hidden;
+ float: left;
+ margin-right: 18px;
+ cursor: pointer;
+ position: relative
+ }
+
+ .relPicbg {
+ z-index: 11;
+ width: 140px;
+ height: 105px;
+ position: absolute;
+ top: 0;
+ left: 0;
+ background: url(http://mat1.gtimg.com/news/dc/images/videoPng.png) no-repeat center center;
+ _background-image: none;
+ _filter: progid: DXImageTransform.Microsoft.AlphaImageLoader(src='http://mat1.gtimg.com/news/dc/images/videobg.png', sizingMethod='scale')
+ }
+
+ .relStatus .relPicbg {
+ background: url(http://mat1.gtimg.com/news/dc/images/videoPng1.png) no-repeat center center;
+ _background-image: none;
+ _filter: progid: DXImageTransform.Microsoft.AlphaImageLoader(src='http://mat1.gtimg.com/news/dc/images/videoBg1.png', sizingMethod='scale')
+ }
+
+ .relTxt {
+ float: left;
+ font-size: 12px;
+ padding: 7px 0;
+ width: 480px
+ }
+
+ .relTxt h2 {
+ font-size: 16px;
+ font-weight: bold;
+ line-height: 30px;
+ height: 30px;
+ overflow: hidden
+ }
+
+ #Cnt-Main-Article-QQ .relTxt p {
+ margin-top: 0;
+ line-height: 20px;
+ padding: 0;
+ font-size: 12px
+ }
+
+ .relTxt label {
+ color: #999
+ }
+
+ .v-times {
+ visibility: hidden;
+ }
+
+ .relVideo {
+ display: none;
+ overflow: hidden;
+ width: 640px;
+ height: 0;
+ background: #000;
+ z-index: 2;
+ position: relative
+ }
+
+ .reltit {
+ position: relative;
+ top: 0;
+ left: 0;
+ height: 30px;
+ background: #F3F3F3;
+ line-height: 30px
+ }
+
+ .reltit h3 {
+ line-height: 30px;
+ padding-left: 11px;
+ font-size: 16px;
+ font-weight: 700;
+ height: 30px;
+ width: 560px;
+ overflow: hidden
+ }
+
+ .reltit h3 a {
+ color: #000
+ }
+
+ .reltit h3 a:hover {
+ color: #cd0000;
+ text-decoration: underline
+ }
+
+ .reltit .v_close {
+ position: absolute;
+ right: 10px;
+ top: 4px;
+ border: none;
+ background: none;
+ cursor: pointer;
+ font-size: 12px;
+ padding-left: 18px;
+ color: #536DA6
+ }
+
+ .reltit .v_close:hover {
+ text-decoration: underline
+ }
+
+ #icon_v_close {
+ width: 11px;
+ height: 14px;
+ display: inline-block;
+ background: url(http://mat1.gtimg.com/news/dc/images/s_gallery_20121102.png) no-repeat -66px -498px;
+ position: absolute;
+ top: 7px;
+ left: 0
+ }
+
+ #mod_player {
+ position: absolute;
+ top: 30px
+ }
+ /*更多视频*/
+
+ .moreTv {
+ width: 339px;
+ border: 1px solid rgba(81, 81, 81, 0.15);
+ background: rgba(0, 0, 0, 0.9);
+ border-right: none;
+ position: absolute;
+ right: 0;
+ top: 135px;
+ filter: progid: DXImageTransform.Microsoft.gradient(startcolorstr=#DD000000, endcolorstr=#DD000000, gradientType=1);
+ z-index: 9
+ }
+
+ .moreTv-list {
+ padding: 10px
+ }
+
+ .moreTv-list li {
+ padding: 10px;
+ height: 63px;
+ overflow: hidden;
+ background: url(none);
+ cursor: default
+ }
+
+ #Cnt-Main-Article-QQ .moreTv-list li p {
+ padding-bottom: 0;
+ line-height: 26px;
+ font-size: 14px
+ }
+
+ .moreTv-list li img {
+ float: left;
+ margin-right: 12px;
+ width: 112px;
+ height: 63px
+ }
+
+ #Cnt-Main-Article-QQ .moreTv-list li:hover,
+ #Cnt-Main-Article-QQ .moreTv-list .hover {
+ background: #353535
+ }
+
+ #Cnt-Main-Article-QQ .moreTv-list li p a {
+ border-bottom: none;
+ color: #fff
+ }
+
+ #Cnt-Main-Article-QQ .moreTv-list li:hover p a,
+ #Cnt-Main-Article-QQ .moreTv-list .hover p a {
+ border-bottom: none;
+ color: #2d96e9
+ }
+
+ .moreTvBtn {
+ width: 25px;
+ height: 45px;
+ background: #242424 url(http://mat1.gtimg.com/news/dc/images/moreTvBtn.png) no-repeat center -16px;
+ position: absolute;
+ top: 245px;
+ right: 0;
+ z-index: 3;
+ visibility: hidden
+ }
+
+ .moreTvBtn:hover {
+ background: #242424 url(http://mat1.gtimg.com/news/dc/images/moreTvBtn.png) no-repeat center 16px
+ }
+
+ .Video-Main-Article-QQ {
+ position: relative;
+ background: none
+ }
+
+ .Video-Main-Article-QQ a:hover.pic,
+ Video-Main-Article-QQ a:hover.vtime {
+ text-decoration: none
+ }
+
+ .Video-Main-Article-QQ .pic img {
+ width: 160px;
+ height: 120px;
+ margin-bottom: 6px;
+ border: #c6c6c6 1px solid
+ }
+
+ .Video-Main-Article-QQ .vbutton {
+ cursor: pointer;
+ display: block;
+ position: absolute;
+ left: 15px;
+ top: 90px;
+ width: 25px;
+ height: 25px;
+ background: url("http://mat1.gtimg.com/worldcup/video/qiudui/video.png") no-repeat;
+ _background-image: none;
+ _filter: progid: DXImageTransform.Microsoft.AlphaImageLoader(src='http://mat1.gtimg.com/worldcup/video/qiudui/video.png', sizingMethod='scale')
+ }
+
+ .Video-Main-Article-QQ .vtime {
+ display: block;
+ position: absolute;
+ left: 38px;
+ top: 105px;
+ width: 120px;
+ height: 18px;
+ _height: 19px;
+ padding-right: 3px;
+ color: #fff;
+ text-align: right;
+ font-family: tahoma;
+ font-size: 14px;
+ overflow: hidden;
+ background: url("http://mat1.gtimg.com/worldcup/2010/bdhui_pic_bg.png") right top repeat-y;
+ _background-image: none;
+ _filter: progid: DXImageTransform.Microsoft.AlphaImageLoader(src='http://mat1.gtimg.com/worldcup/2010/bdhui_pic_bg.png', sizingMethod='scale')
+ }
+
+ .about-other-read-mod {
+ position: relative
+ }
+
+ .about-other-read-mod {
+ position: relative
+ }
+
+ .recommendTips {
+ position: absolute;
+ top: 28px;
+ *top: 25px;
+ right: 0;
+ display: none;
+ filter: Alpha(Opacity=0);
+ opacity: 0;
+ padding-bottom: 5px
+ }
+
+ .ad-cnt-1 #F_Z_Width1 {
+ margin: 15px 0 35px
+ }
+ </style>
+
+ <!-- 主导航 迷你导航 -->
+ <style>
+ /*主导航 迷你导航*/
+
+ .navWrap {
+ height: 35px;
+ margin-bottom: 10px;
+ position: relative;
+ z-index: 21
+ }
+
+ .nav {
+ top: 0;
+ z-index: 100;
+ width: 100%;
+ min-width: 1000px;
+ height: 35px;
+ background: #379be9;
+ text-align: center
+ }
+
+ .nav-Article-QQ {
+ position: relative;
+ float: left;
+ z-index: 20;
+ padding: 0 10px 0 0;
+ font-family: Microsoft Yahei;
+ line-height: 25px
+ }
+
+ .nav-Article-QQ ul {
+ float: left
+ }
+
+ .nav-Article-QQ ul li {
+ float: left;
+ background: url(http://mat1.gtimg.com/joke/temp/bg_nav_li.png) no-repeat right center;
+ font-size: 14px;
+ }
+
+ .nav-Article-QQ ul li a,
+ .nav-Article-QQ ul li a:visited,
+ .nav-Article-QQ ul li a:link,
+ .nav-Article-QQ ul li a:hover {
+ color: #feffff;
+ text-decoration: none
+ }
+
+ .nav-Article-QQ ul li a {
+ display: block;
+ padding: 5px 8px
+ }
+
+ .nav-Article-QQ ul li a:hover {
+ background: #1669AB
+ }
+
+ .colorPd {
+ color: #fff000
+ }
+
+ .nav-Article-QQ ul .colorPd a,
+ .nav-Article-QQ ul .colorPd a:visited,
+ .nav-Article-QQ ul .colorPd a:link,
+ .nav-Article-QQ ul .colorPd a:hover {
+ color: #fff000
+ }
+
+ .nav-Article-QQ ul .nav-color a,
+ .nav-Article-QQ ul .nav-color a:visited,
+ .nav-Article-QQ ul .nav-color a:link,
+ .nav-Article-QQ ul .nav-color a:hover {
+ color: #FFCC00
+ }
+ </style>
+ <!--[if !IE]>|xGv00|27478a53b252353c71f39d87d15a2b0c<![endif]-->
+ <script type="text/javascript">
+ ARTICLE_INFO = window.ARTICLE_INFO || {
+ site: 'tech',
+ site_cname: '科技',
+ site_url: 'http://tech.qq.com',
+ title: 'DeepMind新电脑已可利用记忆自学 人工智能迈上新台阶',
+ id: '20161014006270',
+ pubtime: '2016年10月14日07:17',
+ type: '',
+ article_url: 'http://tech.qq.com/a/20161014/006270.htm',
+ sosokeys: {},
+ tags: [],
+ catalog: 'web',
+ catalog_full: '',
+ sub_nav: 'tnw',
+ topic: {
+ name: '',
+ cname: '',
+ ztcatalog: ''
+ },
+ subName: {
+ name: '',
+ url: '',
+ cname: ''
+ },
+ isShowLastAD: '',
+ tpl: {
+ dev: '',
+ ver: '',
+ time: '',
+ type: '',
+ stype: ''
+ }
+ }
+ </script>
+ <script id="_gdt_loader_0.2351566946383118" data-name="1640491952" type="text/javascript" charset="utf-8" src="http://qzonestyle.gtimg.cn/qzone/biz/ac/comm/qbscomm.20150907.js"></script>
+ <script id="_gdt_loader_0.4431882921794775" data-name="1192569262" type="text/javascript" charset="utf-8" src="http://qzonestyle.gtimg.cn/qzone/biz/ac/comm/gdtlib.20160810.js"></script>
+ <script id="_gdt_loader_0.003156974144375657" data-name="2001567301" type="text/javascript" charset="utf-8" src="http://qzonestyle.gtimg.cn/qzone/biz/ac/comm/ver.20160810.js"></script>
+ <script src="//dp3.qq.com/dynamic?get_type=cm&amp;ch=tech&amp;callback=crystal.cookieMapping"></script>
+ <script src="//l.qq.com/lview?c=www&amp;loc=QQcom_all_Width1,QQcom_all_Rectangle,Tech_F_MIND_STREAM_RM,F_Z_Width1,F_Rectangle_N&amp;ad_cnt=2,1&amp;callback=crystal.callbackarea&amp;rot=1&amp;ri=l.&amp;chl=tech&amp;page_type=2&amp;k=DeepMind%E6%96%B0%E7%94%B5%E8%84%91%E5%B7%B2%E5%8F%AF%E5%88%A9%E7%94%A8%E8%AE%B0%E5%BF%86%E8%87%AA%E5%AD%A6%20%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD%E8%BF%88%E4%B8%8A%E6%96%B0%E5%8F%B0%E9%98%B6&amp;t=DeepMind%E6%96%B0%E7%94%B5%E8%84%91%E5%B7%B2%E5%8F%AF%E5%88%A9%E7%94%A8%E8%AE%B0%E5%BF%86%E8%87%AA%E5%AD%A6%20%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD%E8%BF%88%E4%B8%8A%E6%96%B0&amp;r=&amp;s=" charset="gbk"></script>
+ <script charset="5000" type="text/javascript" src="http://mb.data.rms.qq.com/output.php?url=http://tech.qq.com/a/20161014/006270.htm&amp;callback=fmbInfoJsonCallback"></script>
+ <script type="text/javascript" src="http://mat1.gtimg.com/www/html5js/QVPL1.0.4.js"></script>
+ <script src="//l.qq.com/lview?c=www&amp;loc=F_RM1,tech_f_mwb&amp;callback=crystal.callbackarea&amp;ri=l.&amp;chl=tech&amp;page_type=2&amp;k=DeepMind%E6%96%B0%E7%94%B5%E8%84%91%E5%B7%B2%E5%8F%AF%E5%88%A9%E7%94%A8%E8%AE%B0%E5%BF%86%E8%87%AA%E5%AD%A6%20%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD%E8%BF%88%E4%B8%8A%E6%96%B0%E5%8F%B0%E9%98%B6&amp;t=DeepMind%E6%96%B0%E7%94%B5%E8%84%91%E5%B7%B2%E5%8F%AF%E5%88%A9%E7%94%A8%E8%AE%B0%E5%BF%86%E8%87%AA%E5%AD%A6%20%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD%E8%BF%88%E4%B8%8A%E6%96%B0&amp;r=&amp;s=" charset="gbk"></script>
+</head>
+
+<body id="Article-QQ">
+ <a href="http://www.qq.com/demo/accessibility.htm" title="按alt+3阅读正文,您也可以现在按回车查看详细的无障碍说明,或者使用上下键进行线性阅读" accesskey="0" target="_blank" style="width:0;height:0;overflow:hidden;display:block;font:0/0 Arial">无障碍说明</a>
+ <!-- 导航 -->
+ <div class="navWrap">
+ <script>
+ function ResumeError() {
+ return true;
+ }
+ window.onerror = ResumeError;
+ </script>
+ <div class="nav" id="nav" role="navigation">
+
+ <style>
+ .nav-Article-QQ {
+ outline: none;
+ }
+
+ #moreNav {
+ position: relative;
+ }
+
+ #moreNav .moreLink:hover {
+ background: none;
+ }
+
+ .moreNav1 {
+ display: block;
+ padding-right: 10px;
+ background: url(http://mat1.gtimg.com/news/dc/images/icon_down.gif) no-repeat right center;
+ }
+
+ .moreNav2 {
+ display: block;
+ padding-right: 10px;
+ position: relative;
+ background: url(http://mat1.gtimg.com/news/dc/images/icon_up.gif) no-repeat right center;
+ }
+
+ .navmenu {
+ display: none;
+ position: absolute;
+ top: 35px;
+ background: #379BE9;
+ text-align: left;
+ width: 74px;
+ }
+
+ .navmenu a:hover {
+ background: #1669AB;
+ }
+
+ .nav-Article-QQ {
+ z-index: 21;
+ }
+
+ .nav-color {
+ color: #FFCC00;
+ }
+
+ .nav-Article-QQ ul .nav-color a,
+ .nav-Article-QQ ul .nav-color a:visited,
+ .nav-Article-QQ ul .nav-color a:link,
+ .nav-Article-QQ ul .nav-color a:hover {
+ color: #FFCC00;
+ }
+
+ .nav-Article-QQ ul li a {
+ padding: 5px 7px;
+ }
+
+ .nav-Article-QQ ul li.navKuaibaoStyle a {
+ color: #fcff00;
+ }
+ </style>
+ <!--nav-Article-QQ航 -->
+ <div class="nav-Article-QQ clearfix" accesskey="2" title="" tabindex="-1">
+ <ul class="clearfix" bosszone="mainNav">
+ <li bosszone="qqcom"><a href="http://www.qq.com" target="_blank" title="腾讯网首页" accesskey="1">首页</a></li>
+ <li bosszone="news"><a href="http://news.qq.com" target="_blank">新闻</a></li>
+ <li bosszone="sports"><a href="http://sports.qq.com" target="_blank">体育</a></li>
+ <li bosszone="ent"><a href="http://ent.qq.com" target="_blank">娱乐</a></li>
+ <li bosszone="vqq"><a href="http://v.qq.com" target="_blank">视频</a></li>
+ <li bosszone="finance"><a href="http://finance.qq.com" target="_blank">财经</a></li>
+ <li bosszone="stock"><a href="http://stock.qq.com/" target="_blank">证券</a></li>
+ <li bosszone="auto"><a href="http://auto.qq.com" target="_blank">汽车</a></li>
+ <li bosszone="house"><a href="http://house.qq.com" target="_blank">房产</a></li>
+ <li bosszone="tech"><a href="http://tech.qq.com" target="_blank">科技</a></li>
+ <li bosszone="digi"><a href="http://digi.qq.com" target="_blank">数码</a></li>
+ <li bosszone="games"><a href="http://games.qq.com" target="_blank">游戏</a></li>
+ <li bosszone="edu"><a href="http://edu.qq.com" target="_blank">教育</a></li>
+ <li bosszone="lady"><a href="http://fashion.qq.com/" target="_blank">时尚</a></li>
+ <li bosszone="cul"><a href="http://cul.qq.com" target="_blank">文化</a></li>
+
+ <li bosszone="more" id="moreNav">
+ <a class="moreLink"><span class="moreNav1" id="moreNav1">更多</span></a>
+ <div class="navmenu" id="navmenu">
+ <a href="http://comic.qq.com/" target="_blank">动漫</a>
+ <a href="http://book.qq.com/" target="_blank">读书</a>
+ <a href="http://kid.qq.com/" target="_blank">儿童</a>
+ <a href="http://astro.lady.qq.com/" target="_blank">星座</a>
+ <a href="http://class.qq.com/" target="_blank">精品课</a>
+
+ <a href="http://www.qq.com/map/" target="_blank">全部频道</a>
+ </div>
+ <!-- /navmenu -->
+ </li>
+ </ul>
+ </div>
+ <script type="text/javascript">
+ //function ob(a,b){
+ var Omore = document.getElementById('moreNav');
+ var OList = document.getElementById('navmenu');
+ var omoreNav = document.getElementById('moreNav1');
+
+ Omore.onmouseover = function() {
+ OList.style.display = 'block';
+ omoreNav.className = 'moreNav2';
+ }
+
+ Omore.onmouseout = function() {
+ OList.style.display = 'none';
+ omoreNav.className = 'moreNav1';
+ }
+ //}
+
+ // ob('moreNav','navmenu')
+ </script>
+ <!--[if !IE]>|xGv00|0f18b2fd64f434f25142f668a25fd93a<![endif]-->
+
+ <style type="text/css">
+ body,
+ h1,
+ h2,
+ p,
+ dl,
+ dt,
+ dd,
+ ul,
+ ol,
+ li {
+ margin: 0;
+ padding: 0
+ }
+
+ .loginWrap {
+ float: right;
+ height: 35px
+ }
+
+ .login {
+ text-align: center;
+ font: 12px/35px Tahoma, "宋体";
+ margin-right: 5px
+ }
+
+ .login a {
+ text-decoration: none;
+ outline: 0
+ }
+
+ .login a:hover {
+ text-decoration: none
+ }
+
+ .login .active {
+ color: #3a9bea
+ }
+
+ .login em {
+ font-style: normal
+ }
+
+ .login img {
+ border: none
+ }
+
+ .quickArea {
+ position: relative;
+ float: left
+ }
+
+ .quickLink {
+ float: left;
+ height: 35px;
+ display: block;
+ padding: 0 8px 0 27px;
+ overflow: hidden;
+ background-repeat: no-repeat
+ }
+
+ .clearfix {
+ *zoom: 1
+ }
+
+ .clearfix:after {
+ content: '';
+ display: table;
+ clear: both
+ }
+
+ .quickLink em {
+ display: none
+ }
+
+ .loginBtn {
+ width: 27px;
+ height: 24px;
+ margin: 7px 5px 0 10px
+ }
+
+ .logined .hover .quickLink {}
+
+ .loginBtn:hover {
+ background-position: 0 -42px
+ }
+
+ .infoNum {
+ text-decoration: none;
+ display: block
+ }
+
+ .quickArea dl {
+ width: 102px;
+ padding: 6px 14px;
+ background: #fff;
+ position: absolute;
+ top: 35px;
+ font: 12px/23px Tahoma, "宋体";
+ border: 1px solid #e2e2e2;
+ border-width: 0 1px 1px;
+ text-align: left;
+ display: none;
+ box-shadow: 1px 2px 2px #e2e2e2;
+ z-index: 9999
+ }
+
+ .quickArea dl a span {
+ margin-left: 10px
+ }
+
+ .loginNav {
+ float: left;
+ border-left: 1px solid #d6d6d6;
+ height: 26px;
+ line-height: 18px;
+ margin: 6px 0 0 20px;
+ padding-left: 9px
+ }
+
+ #login_layer_bg {
+ width: 100%;
+ position: absolute;
+ top: 0;
+ left: 0;
+ z-index: 9999;
+ background: url(http://mat1.gtimg.com/www/login/images/alphabg.png);
+ _background: #000;
+ _opacity: 0.3;
+ _filter: alpha(opacity=30);
+ height: 100%
+ }
+
+ #login_layer_main {
+ position: fixed;
+ _position: absolute;
+ width: 490px;
+ height: 382px;
+ top: 50%;
+ left: 50%;
+ margin: -165px 0 0 -276px;
+ z-index: 10000
+ }
+ /* user */
+
+ .user {
+ font-family: tohama;
+ padding: 5px 0 4px 10px
+ }
+
+ .user .menu-hd {
+ width: 28px;
+ line-height: 0;
+ margin-top: 0;
+ margin-right: 5px;
+ display: block;
+ position: relative;
+ text-decoration: none
+ }
+
+ .user img {
+ vertical-align: top
+ }
+
+ .user .menu-hd img {
+ width: 22px;
+ height: 22px;
+ overflow: hidden;
+ background: #d6edff;
+ padding: 2px
+ }
+
+ .user .menu-hd:hover .userVip {
+ visibility: visible
+ }
+
+ .user .menu-bd {
+ position: absolute;
+ top: 39px;
+ width: 185px;
+ display: none;
+ z-index: 9999
+ }
+
+ .user .menu-bd-in {
+ border: 1px solid #e2e2e2;
+ border-top: none;
+ background: #fff;
+ padding: 5px 10px 10px;
+ border-radius: 4px;
+ box-shadow: 1px 2px 2px #e2e2e2
+ }
+
+ .user .menu-hd .userVip .icon_member {
+ position: absolute;
+ width: 13px;
+ height: 13px;
+ right: -3px;
+ bottom: 0px;
+ padding: 0;
+ border: none;
+ background: none
+ }
+
+ .user .menu-bd .userVip {
+ margin-right: 10px
+ }
+
+ .picT-p {
+ width: 38px;
+ height: 38px;
+ overflow: hidden;
+ background: #fff;
+ border: 1px solid #d9d9d9;
+ padding: 2px;
+ float: left;
+ margin-right: 7px;
+ margin-top: 5px
+ }
+
+ .picT-t p {
+ line-height: 24px;
+ color: #666;
+ text-align: left
+ }
+
+ .picT-t a {
+ color: #333
+ }
+
+ .user .menu-bd .picT-p {
+ width: 38px;
+ height: 38px;
+ overflow: hidden;
+ background: #fff;
+ border: 1px solid #d9d9d9;
+ padding: 2px
+ }
+
+ .quickLink {
+ background-image: url(http://mat1.gtimg.com/www/login/images/loginall_24_1x_v1.png);
+ _background-image: url(http://mat1.gtimg.com/www/login/images/loginall_8_1x_v1.png)
+ }
+
+ @media only screen and (-webkit-min-device-pixel-ratio:2) {
+ .quickLink {
+ background-size: 62px auto;
+ background-image: url(http://mat1.gtimg.com/www/login/images/loginall_24_2x_v2.png)
+ }
+ }
+
+ @media only screen and (min--moz-device-pixel-ratio:2) {
+ .quickLink {
+ background-size: 62px auto;
+ background-image: url(http://mat1.gtimg.com/www/login/images/loginall_24_2x_v2.png)
+ }
+ }
+
+ @media only screen and (-o-min-device-pixel-ratio:2/1) {
+ .quickLink {
+ background-size: 62px auto;
+ background-image: url(http://mat1.gtimg.com/www/login/images/loginall_24_2x_v2.png)
+ }
+ }
+
+ @media only screen and (min-device-pixel-ratio:2) {
+ .quickLink {
+ background-size: 62px auto;
+ background-image: url(http://mat1.gtimg.com/www/login/images/loginall_24_2x_v2.png)
+ }
+ }
+ /* sprite图 */
+
+ .loginBtn {
+ background-position: 0 0
+ }
+
+ .weiboLink {
+ background-position: 2px -87px
+ }
+
+ .qzoneLink {
+ background-position: 2px -130px
+ }
+
+ .qmailLink {
+ background-position: 2px -171px
+ }
+
+ .dyLink {
+ background-position: 2px -256px
+ }
+
+ .dyLike {
+ background-position: 2px -297px
+ }
+ /* color */
+
+ .login a {
+ color: #fff
+ }
+ /* 登录数字颜色 */
+
+ .login .menu-bd a {
+ color: #5c5c5c
+ }
+ /* 隐藏框内链接颜色 */
+
+ .login .menu-bd a:hover {
+ color: #000
+ }
+ /* 隐藏框内链接颜色 */
+
+ .logined .hover .quickLink {
+ color: #fff
+ }
+ /* 鼠标滑过背景色和字体颜色 */
+
+ .quickArea dl a span {
+ color: #5c5c5c
+ }
+
+ .loginBg_def {
+ background: #379be9
+ }
+ /*默认背景色*/
+
+ .loginBg_def .logined .hover .quickLink {
+ background-color: #1669ab
+ }
+
+ .loginBg_def .quickArea dl {
+ border-top: 1px solid #1669ab
+ }
+
+ .loginBg_green {
+ background: #539325
+ }
+ /*可配置的绿色*/
+
+ .loginBg_green .logined .hover .quickLink {
+ background-color: #3b7710
+ }
+
+ .loginBg_green .quickArea dl {
+ border-top: 1px solid #3b7710
+ }
+
+ .loginBg_darkgreen {
+ background: #329B97
+ }
+ /*可配置的深绿色*/
+
+ .loginBg_darkgreen .logined .hover .quickLink {
+ background-color: #00847D
+ }
+
+ .loginBg_darkgreen .quickArea dl {
+ border-top: 1px solid #00847D
+ }
+
+ .loginBg_red {
+ background: #c32728
+ }
+ /*可配置的红色*/
+
+ .loginBg_red .logined .hover .quickLink {
+ background-color: #a20202
+ }
+
+ .loginBg_red .quickArea dl {
+ border-top: 1px solid #a20202
+ }
+
+ .loginBg_black {
+ background: #000
+ }
+ /*可配置的黑色*/
+
+ .loginBg_black .logined .hover .quickLink {
+ background-color: #333
+ }
+
+ .loginBg_black .quickArea dl {
+ border-top: 1px solid #666
+ }
+
+ .loginBg_white {
+ background: #fff;
+ color: #5c5c5c
+ }
+ /*可配置的白色*/
+
+ .loginBg_white .logined .hover .quickLink {
+ background-color: #cc1c1c;
+ color: #fff
+ }
+
+ .loginBg_white #oneKey {
+ width: 73px;
+ height: 35px;
+ text-align: center;
+ border: 1px solid #e6e6e6;
+ border-width: 0 1px;
+ color: #5c5c5c;
+ background: none;
+ margin: 0;
+ padding: 0
+ }
+
+ .loginBg_white #oneKey:hover {
+ color: #fff;
+ background: #cc1c1c
+ }
+
+ .loginBg_white #oneKey em {
+ display: block
+ }
+
+ .loginBg_white .quickLink {
+ color: #5c5c5c
+ }
+
+ .loginBg_white .weiboLink {
+ background-position: 0 -335px
+ }
+
+ .loginBg_white .qzoneLink {
+ background-position: 0 -375px
+ }
+
+ .loginBg_white .qmailLink {
+ background-position: 0 -412px
+ }
+
+ .loginBg_white .dyLink {
+ background-position: 0 -452px
+ }
+
+ .loginBg_white .dyLike {
+ background-position: 0 -495px
+ }
+
+ .loginBg_white .weiboLink:hover,
+ .loginBg_white .logined .weiboLink {
+ background-position: 0 -535px
+ }
+
+ .loginBg_white .qzoneLink:hover,
+ .loginBg_white .logined .qzoneLink {
+ background-position: 0 -575px
+ }
+
+ .loginBg_white .qmailLink:hover,
+ .loginBg_white .logined .qmailLink {
+ background-position: 0 -612px
+ }
+
+ .loginBg_white .dyLink:hover,
+ .loginBg_white .logined .dyLink {
+ background-position: 0 -652px
+ }
+
+ .loginBg_white .dyLike:hover,
+ .loginBg_white .logined .dyLike {
+ background-position: 0 -695px
+ }
+
+ .loginBg_white .logined .weiboLink:hover {
+ background-position: 0 -87px
+ }
+
+ .loginBg_white .logined .qzoneLink:hover {
+ background-position: 0 -129px
+ }
+
+ .loginBg_white .logined .qmailLink:hover {
+ background-position: 0 -170px
+ }
+
+ .loginBg_white .logined .dyLink:hover {
+ background-position: 0 -254px
+ }
+
+ .loginBg_white .logined .dyLike:hover {
+ background-position: 0 -296px;
+ background-color: #cc1c1c
+ }
+
+ .loginBg_white .logined .hover .quickLink {
+ background-color: #cc1c1c;
+ color: #fff
+ }
+ </style>
+ <!--[if !IE]>|xGv00|9aae4a193e6b73422a8737b51c18f385<![endif]-->
+ <!-- login -->
+ <div class="loginWrap loginBg_def" id="loginWrap">
+ <div class="login" id="login">
+ <div class="quickArea menu">
+ <a href="javascript:;" role="button" aria-haspopup="true" aria-pressed="false" id="oneKey" class="quickLink loginBtn" onclick="userLogin()" bosszone="onekey"><em>一键登录</em></a>
+ </div>
+ <div class="quickArea menu">
+ <a href="http://t.qq.com" id="weiboLink" target="_blank" class="quickLink weiboLink" aria-expanded="true" bosszone="gqweibo" title="微博"><em>微博</em></a>
+ </div>
+ <div class="quickArea menu">
+ <a href="http://qzone.qq.com" id="qzoneLink" target="_blank" class="quickLink qzoneLink" aria-expanded="true" bosszone="gqqzone" title="Qzone"><em>Qzone</em></a>
+ </div>
+ <div class="quickArea menu">
+ <a href="http://mail.qq.com" id="qmailLink" target="_blank" class="quickLink qmailLink" aria-expanded="true" bosszone="gqqmail" title="QQ邮箱"><em>QQ邮箱</em></a>
+ </div>
+ <!--
+ <div class="quickArea menu">
+ <a href="http://dy.qq.com" id="dyLink" target="_blank" class="quickLink dyLink" aria-expanded="true" bosszone="booking" title="订阅"><em>订阅</em></a>
+ </div>
+-->
+ <div class="quickArea menu">
+ <a href="http://ilike.qq.com/" id="dyLike" target="_blank" class="quickLink dyLike" aria-expanded="true" bosszone="collectinpage" title="收藏"><em>收藏</em></a>
+ </div>
+ </div>
+ </div>
+ <!-- /login -->
+ <script src="http://mat1.gtimg.com/www/asset/seajs/sea.js"></script>
+ <script>
+ seajs.config({
+ alias: {
+ 'ui': 'lib/ui',
+ 'boss': 'widget/boss_min'
+ },
+ preload: ['ui']
+ });
+ </script>
+ <!--[if !IE]>|xGv00|6920d219794f01fdc7cb44dbf24ebbdb<![endif]-->
+ <script>
+ seajs.use('project/login/oneLogin_v1.5', function() {
+ login.init();
+ });
+ (function() {
+ function ExposureBoss(id, name) {
+ var a = document.cookie.match(new RegExp('(^|)o_cookie=([^;]*)(;|$)'));
+ var iQQ = (a == null ? "" : unescape(a[2]));
+ var iurl = 'http://btrace.qq.com/collect?sIp=&amp;iQQ=' + iQQ + '&amp;sBiz=' + (arguments[2] ? arguments[2] : '') + '&amp;sOp=' + name + '&amp;iSta=&amp;iTy=' + id + '&amp;iFlow=&amp;sUrl=' + escape(location.href) + '&amp;iBak=&amp;sBak=&amp;ran=' + Math.random();
+ gImage = new Image(1, 1);
+ gImage.src = iurl;
+ }
+ ExposureBoss(1604, 'EXmainNav', 'dc');
+ })()
+ </script>
+ <style>
+ .dyLink {
+ display: none!important
+ }
+ </style>
+ <!--[if !IE]>|xGv00|60df1513948e03e48616435458df7f06<![endif]-->
+ </div>
+ <!--[if !IE]>|xGv00|a94b66bb449bae9cdaeb20ab1367db85<![endif]-->
+ <!--[if !IE]>|xGv00|3f2d655fa0dfc51444c3b8b67282e516<![endif]-->
+ </div>
+ <script>
+ //图片自动缩放
+ function loadImg(a, b, o) {
+ var w = a,
+ h = b,
+ v = w / h;
+ var i = new Image();
+ i.src = o.src;
+ var W = i.width,
+ H = i.height,
+ V = W / H;
+ var ri = Math.min(w / W, h / H),
+ ra = Math.max(w / W, h / H);
+ if (W == w || H == h) {
+ return
+ }
+ if (v & gt; V) {
+ if (W & gt; w) {
+ o.width = w;
+ o.height = (w * H) / W
+ } else {
+ o.width = W;
+ o.height = (W * h) / H
+ }
+ } else {
+ if (H & gt; h) {
+ o.height = h;
+ o.width = (W * h) / H
+ } else {
+ o.height = H;
+ o.width = (H * w) / h
+ }
+ }
+ }
+ </script>
+ <script src="http://mat1.gtimg.com/www/mb/js/portal/mi.MiniNav_v1.0.1.js" charset="utf-8"></script>
+ <script>
+ if (!window._MUI) {
+ document.write('&lt;scr' + 'ipt src="http://mat1.gtimg.com/news/dc/js/share/mi.Portal_v1.0.3.js" type="text/javascript" charset="utf-8"&gt;&lt;/scr' + 'ipt&gt;')
+ };
+ </script>
+ <script src="http://mat1.gtimg.com/news/dc/js/share/mi.Portal_v1.0.3.js" type="text/javascript" charset="utf-8"></script>
+ <script src="http://mat1.gtimg.com/news/dc/js/ui_v1.0.0.js" charset="utf-8"></script>
+ <!--[if !IE]>|xGv00|1eddbdf3e485ae2b801a576bc8adb083<![endif]-->
+ <!--公共导航tang-->
+ <script type="text/javascript" src="http://imgcache.qq.com/qzone/biz/comm/js/qbs.js"></script>
+ <script type="text/javascript">
+ var TIME_BEFORE_LOAD_CRYSTAL = (new Date).getTime();
+ </script>
+ <script src="http://ra.gtimg.com/web/crystal/v2.8Beta07Build071/crystal-min.js" id="l_qq_com" arguments="{'extension_js_src':'http://ra.gtimg.com/web/crystal/v2.8Beta07Build071/crystal_ext-min.js', 'jsProfileOpen':'false', 'mo_page_ratio':'0.01', 'mo_ping_ratio':'0.01', 'mo_ping_script':'//ra.gtimg.com/sc/mo_ping-min.js'}"></script>
+ <script type="text/javascript">
+ if (typeof crystal === 'undefined' & amp; & amp; Math.random() & lt; = 1) {
+ (function() {
+ var TIME_AFTER_LOAD_CRYSTAL = (new Date).getTime();
+ var img = new Image(1, 1);
+ img.src = "http://dp3.qq.com/qqcom/?adb=1&amp;dm=tech&amp;err=1002&amp;blockjs=" + (TIME_AFTER_LOAD_CRYSTAL - TIME_BEFORE_LOAD_CRYSTAL);
+ })();
+ }
+ </script>
+ <style>
+ .absolute {
+ position: absolute;
+ }
+ </style>
+ <!--[if !IE]>|xGv00|2aa1984c50ef83d09fb459ec2203d70e<![endif]-->
+
+ <!-- QQ浏览器合作推广 -->
+ <style>
+ #coo_qqBrowser {
+ width: 1000px;
+ height: 26px;
+ text-align: center;
+ margin: 0 auto 10px;
+ line-height: 26px;
+ position: relative;
+ background-color: #ffffe0;
+ border: 1px solid #d8d58d;
+ padding: 5px 0;
+ }
+
+ #coo_qqBrowser span {
+ margin-left: 10px;
+ }
+
+ #coo_qqBrowser a {
+ margin-left: 20px;
+ height: 26px;
+ color: #FFF;
+ display: inline-block;
+ padding: 0 24px;
+ }
+
+ #coo_qqBrowser a {
+ background-color: #48bf24;
+ background: linear-gradient(to right, #6ad149, #20ad00);
+ filter: progid: DXImageTransform.Microsoft.gradient(startcolorstr=#6ad149, endcolorstr=#20ad00, gradientType=1);
+ }
+
+ #coo_qqBrowser a:hover {
+ text-decoration: none;
+ }
+
+ #coo_qqBrowser em {
+ color: #cccccc;
+ font-size: 18px;
+ padding: 0 6px;
+ cursor: pointer;
+ position: absolute;
+ top: 5px;
+ right: 5px;
+ font-family: "\u5b8b\u4f53";
+ }
+ </style>
+ <div class="coo_qqBrowser clearfix" id="coo_qqBrowser" style="display: block;">
+ <strong>浏览器更新提醒</strong><span node-type="cooCon">电脑登录微信无需扫码,浏览QQ空间提速 5 倍</span><a href="http://dldir1.qq.com/invc/tt/QQBrowser_Setup_Txw.exe" target="_blank" action-type="update">立即更新</a><em action-type="close">×</em>
+ </div>
+ <!--[if !IE]>|xGv00|e6e5d49b8483a282207d3dea949073fc<![endif]-->
+
+ <!--14.12.10新增广告_顶通广告-->
+ <div class="article_ad body-Top-Ad body-Article-QQ TopAds nAdTop-Article-QQ">
+ <!--$loc$_div AD begin...."l=$loc$&log=off"-->
+ <div id="QQcom_all_Width1:1" data-loc="QQcom_all_Width1" data-index="1" style="height: 90px; display: block; width: 1000px; position: relative;" class="l_qq_com" adconfig_lview="l.qq.com" adconfig_charset="gbk" adconfig_lview_template="//l.qq.com/lview?c=www&amp;loc={loc}" oid="1802863299" display="banner"><object id="auto_gen_3" data="//swa.gtimg.com/web/snswin/2016/09/02/10/1238620.swf" style="outline:none;width:1000px;height:90px;"><param name="allowscriptaccess" value="never" /><param name="wmode" value="opaque" /><param name="quality" value="high" /><param name="flashvars" value="adlink=http%3A%2F%2Fc.l.qq.com%2Flclick%3Floc%3DQQcom_all_Width1%26click_data%3DdXNlcl9pbmZvPW9CM2pnVGc5RXgtXyZjbGlja19leHRzPVJWaFVQV0l5Ykd0UVZHTjNUV3BSZWsxRWF6SlBRMXA2WWpKc2ExQlZTa1pOUlVaQ1RYcGpNazVyUlhoUmVsVTBUV3BKTlU5VlJrWk5SRUpGVWxSc1FrMTZTVzFpUnpscVlWZFJPVlZXUm1waU1qRm1XVmQ0YzFneFpIQmFTRkp2VFZFOVBRPT0mcGN0cj0xMDc0JmF2ZXI9OTAxMDAyJnByaT1nSGtXeDFpRVllY0tkeGk2ZDEyQXZvY1JPVlNVb0t5NiZidHByaT1BSUpBdHRyOXBtblg4dmY4ZEpTUFAxS3p3ejNvbE81NSZwcmkxPWVIdnpTZ0ErVG5aUmlOQWlWREZTMHhoR2ZHcWF2OUtmJmJpZHBhcmExPTEuMDAwMDAwJnByaW1vZD0yJmJpZG1vZD0xJnByaTI9bTBWcU9qWXJiWnhVUHZXazlLT294M05ocW9RZ1dPR0Y%3D%26oid%3D1802863299%26soid%3DvgqjdmocWCKZrgDemjKJqBnDAZve%26dtype%3D0%26pctr%3D1074%26aver%3D901002%26btoid%3D702430968%26pri%3DgHkWx1iEYecKdxi6d12AvocROVSUoKy6%26btpri%3DAIJAttr9pmnX8vf8dJSPP1Kzwz3olO55%26index%3D1%26page_type%3D2%26chl%3D13&amp;ime=true&amp;setFocus=crystal.ime.setFocus&amp;swfid=auto_gen_3" /><param name="type" value="application/x-shockwave-flash" /></object>
+ <a class="absolute a_cover" href="http://c.l.qq.com/lclick?loc=QQcom_all_Width1&amp;click_data=dXNlcl9pbmZvPW9CM2pnVGc5RXgtXyZjbGlja19leHRzPVJWaFVQV0l5Ykd0UVZHTjNUV3BSZWsxRWF6SlBRMXA2WWpKc2ExQlZTa1pOUlVaQ1RYcGpNazVyUlhoUmVsVTBUV3BKTlU5VlJrWk5SRUpGVWxSc1FrMTZTVzFpUnpscVlWZFJPVlZXUm1waU1qRm1XVmQ0YzFneFpIQmFTRkp2VFZFOVBRPT0mcGN0cj0xMDc0JmF2ZXI9OTAxMDAyJnByaT1nSGtXeDFpRVllY0tkeGk2ZDEyQXZvY1JPVlNVb0t5NiZidHByaT1BSUpBdHRyOXBtblg4dmY4ZEpTUFAxS3p3ejNvbE81NSZwcmkxPWVIdnpTZ0ErVG5aUmlOQWlWREZTMHhoR2ZHcWF2OUtmJmJpZHBhcmExPTEuMDAwMDAwJnByaW1vZD0yJmJpZG1vZD0xJnByaTI9bTBWcU9qWXJiWnhVUHZXazlLT294M05ocW9RZ1dPR0Y=&amp;oid=1802863299&amp;soid=vgqjdmocWCKZrgDemjKJqBnDAZve&amp;dtype=0&amp;pctr=1074&amp;aver=901002&amp;btoid=702430968&amp;pri=gHkWx1iEYecKdxi6d12AvocROVSUoKy6&amp;btpri=AIJAttr9pmnX8vf8dJSPP1Kzwz3olO55&amp;index=1&amp;page_type=2&amp;chl=13&amp;k=DeepMind%E6%96%B0%E7%94%B5%E8%84%91%E5%B7%B2%E5%8F%AF%E5%88%A9%E7%94%A8%E8%AE%B0%E5%BF%86%E8%87%AA%E5%AD%A6%20%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD%E8%BF%88%E4%B8%8A%E6%96%B0%E5%8F%B0%E9%98%B6&amp;t=DeepMind%E6%96%B0%E7%94%B5%E8%84%91%E5%B7%B2%E5%8F%AF%E5%88%A9%E7%94%A8%E8%AE%B0%E5%BF%86%E8%87%AA%E5%AD%A6%20%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD%E8%BF%88%E4%B8%8A%E6%96%B0&amp;r=&amp;s=" target="_blank" rel="nofollow" style="position:absolute;width:1000px;height:90px;left:0px;top:0px;cursor:pointer;z-index:10;background-color:#fff;filter:alpha(opacity=0);opacity:0;"></a>
+ <div class="absolute" style="position:absolute;width:18px;height:18px;right:0px;bottom:0px;cursor:pointer;z-index:20;background:url(//ra.gtimg.com/web/privacy/white_icon.png) no-repeat;"></div>
+ <div class="absolute" style="position: absolute; width: 24px; height: 16px; left: 26px; bottom: 0px; cursor: pointer; display: none; z-index: 20; background: transparent url(&quot;//ra.gtimg.com/web/res/icon/report_default_new.png&quot;) no-repeat scroll center top;"></div>
+ <div style="position: absolute; left: 0px; bottom: 0px; width: 26px; height: 16px; z-index: 12; background: transparent url(&quot;//ra.gtimg.com/web/res/icon/leftbottom_new.png&quot;) no-repeat scroll right top;"></div>
+ </div>
+ <!--$loc$ AD end -->
+ <!--[if !IE]>|xGv00|c1f7304f38d62c7ae0cddc9124bd107e<![endif]-->
+ </div>
+ <!--[if !IE]>|xGv00|97999e52b22d9f745a6ac6ca1d9a422b<![endif]-->
+
+ <!--Tech_F_MIND_STREAM_RM_div AD begin...."l=Tech_F_MIND_STREAM_RM&log=off"-->
+ <div id="Tech_F_MIND_STREAM_RM" style="width:360px;height:300px;display:none;" class="l_qq_com" adconfig_lview="l.qq.com" adconfig_charset="gbk" adconfig_lview_template="//l.qq.com/lview?c=www&amp;loc={loc}"></div>
+ <!--Tech_F_MIND_STREAM_RM AD end -->
+ <!--[if !IE]>|xGv00|9965dd094b70acbbe342248219596ee0<![endif]-->
+ <!--[if !IE]>|xGv00|003042fe1dd98c839619795973a88118<![endif]-->
+ <div class="wrapper">
+ <div class="Crumbs-Article-QQ">
+ <a target="_blank" href="http://tech.qq.com" bosszone="crumbLogo"><img src="http://mat1.gtimg.com/www/images/channel_logo/tech_logo.png" alt="腾讯科技" /></a>
+ <!--[if !IE]>|xGv00|933d6d05492de83c04073608f64aaeb4<![endif]--><span bosszone="crumbNav"><a target="_blank" href="http://tech.qq.com">科技</a> <em>&gt;</em> <a target="_blank" href="http://tech.qq.com">要闻</a> <em>&gt;</em> <a target="_blank" href="http://tech.qq.com/tnw.htm">THE NEXT WEB</a> <em>&gt;</em> 正文</span>
+ </div>
+ <script>
+ var sosoArticlKey = '';
+ </script>
+ <style>
+ .Form-Crumbs-Article-QQ {
+ float: right;
+ padding-top: 14px
+ }
+
+ .Form-Crumbs-Article-QQ .submit {
+ float: right;
+ float: right;
+ width: 50px;
+ height: 26px;
+ background: url(http://mat1.gtimg.com/www/images/qq2012/sogouNewUi.png) left -25px no-repeat;
+ border: 0px;
+ line-height: 21px;
+ *padding-top: 1px;
+ font-size: 12px;
+ cursor: pointer
+ }
+
+ .Form-Crumbs-Article-QQ .inputWarp {
+ float: right;
+ width: 210px;
+ height: 24px;
+ margin: 0;
+ padding: 0;
+ line-height: 22px;
+ background: none;
+ border: #c9c9c9 1px solid;
+ border-right: none;
+ }
+
+ .Form-Crumbs-Article-QQ .txtArea {
+ float: left;
+ width: 170px;
+ border: 0px;
+ height: 20px;
+ margin: 2px 0 0 5px;
+ font-size: 14px;
+ line-height: 20px;
+ border: none;
+ color: #424242;
+ outline: none;
+ inline: none;
+ display: inline;
+ }
+
+ .Form-Crumbs-Article-QQ .SosonLogo {
+ float: right;
+ width: 16px;
+ height: 16px;
+ margin: 4px 4px 0 0;
+ background: url(http://mat1.gtimg.com/www/images/qq2012/sogouNewUi.png) left top no-repeat;
+ }
+
+ .Form-Crumbs-Article-QQ .SosonLogo span {
+ display: none
+ }
+
+ .Form-Crumbs-Article-QQ .SosonLogo span {
+ display: none;
+ }
+ </style>
+
+ <div class="Form-Crumbs-Article-QQ" bosszone="sosearch">
+ <form name="flso" action="https://www.sogou.com/sogou" target="_blank">
+ <input class="submit" value="" type="submit" />
+ <div class="inputWarp">
+ <a href="https://www.sogou.com/" target="_blank" class="SosonLogo" title="上网从搜狗开始"><span>搜狗</span></a>
+ <input class="txtArea" name="query" id="sosoArticlKey" type="text" />
+ <input name="pid" value="sogou-wsse-b58ac8403eb9cf17-0003" type="hidden" />
+ </div>
+ </form>
+ </div>
+
+ <script>
+ var sosoArticleKey = document.getElementById("sosoArticlKey"),
+ sosoArticleValue = '';
+ if (sosoArticlKey) {
+ sosoArticleKey.value = sosoArticlKey.replace("&amp;#183;", "·");
+ sosoArticleKey.value = sosoArticlKey.replace("&amp;#23301;", "嬅");
+ sosoArticleKey.value = sosoArticlKey.replace("&amp;#23323;", "嬛");
+ sosoArticleKey.value = sosoArticlKey.replace("&amp;#22247;", "囧");
+ sosoArticleKey.value = sosoArticlKey.replace("&amp;#38229;", "镕");
+
+ sosoArticleValue = sosoArticleKey.value;
+ }
+ sosoArticleKey.onfocus = function() {
+ if (sosoArticleKey.value == sosoArticleValue) {
+ sosoArticleKey.value = '';
+ }
+ }
+ sosoArticleKey.onblur = function() {
+ if (sosoArticleKey.value == '') {
+ sosoArticleKey.value = sosoArticleValue;
+ }
+ }
+ </script>
+ <!--[if !IE]>|xGv00|f23cc5803c80dd8243cdfd091e534a82<![endif]-->
+ <!--[if !IE]>|xGv00|e28e1b38a57119239069b0b494bfb4be<![endif]-->
+ </div>
+ <style>
+ /* mainNav */
+
+ .mainnav {
+ width: 995px;
+ height: 35px;
+ line-height: 35px;
+ margin: 0 auto;
+ margin-bottom: 4px;
+ padding-left: 5px;
+ background: #379be9;
+ overflow: hidden
+ }
+
+ .mainnav li {
+ float: left;
+ background: url(http://img1.gtimg.com/tech/pics/hv1/214/72/1569/102042799.png) no-repeat right;
+ }
+
+ .mainnav li.wpd {
+ background: none
+ }
+
+ .mainnav li a {
+ color: #fff;
+ font-family: "微软雅黑", "Arial Narrow", HELVETICA;
+ font-size: 16px;
+ padding: 0 14px;
+ display: block;
+ text-align: center;
+ margin-right: 1px
+ }
+
+ .mainnav li a:hover {
+ background: #1873de;
+ color: #fff;
+ text-decoration: none;
+ }
+ </style>
+ <div class="mainnav" bosszone="Tech4Nav">
+ <ul>
+ <li class="nobor" bosszone="technav_1"><a class="yw" href="http://tech.qq.com/">首页</a> </li>
+ <li style="display:block;" class="three" bosszone="technav_7"><a class="it" href="http://re.qq.com/" target="_blank">企鹅智酷</a> </li>
+ <li class="two sm" bosszone="technav_9"><a class="bpw" href="http://startup.qq.com/" target="_blank">腾讯创业</a> </li>
+ <li bosszone="technav_3"><a href="http://tech.qq.com/ydhl.htm" target="_blank">移动互联</a> </li>
+ <li bosszone="technav_4"><a class="dzsw" href="http://tech.qq.com/dzsw.htm" target="_blank">电商</a> </li>
+ <li class="two" bosszone="technav_5"><a class="tx" href="http://tech.qq.com/tele.htm" target="_blank">通信</a> </li>
+ <li class="three" bosszone="technav_6"><a class="it" href="http://tech.qq.com/it.htm" target="_blank">IT业界</a> </li>
+ <li style="display:block;" bosszone="technav_13" target="_blank"><a class="hlwdj" href="http://tech.qq.com/internetfinance.htm" target="_blank">金融</a> </li>
+ <li bosszone="technav_8"><a class="sjwl" href="http://tech.qq.com/tmt/" target="_blank">解码</a> </li>
+ <li class="two sm" bosszone="technav_9"><a class="bpw" href="http://v.qq.com/tech/" target="_blank">视频</a> </li>
+ <li class="two sm" bosszone="technav_10"><a href="http://digi.tech.qq.com/" target="_blank">数码</a> </li>
+ <li style="display:block;" bosszone="technav_13"><a class="rwz" href="http://space.qq.com/" target="_blank">太空</a> </li>
+ <li class="two sm" bosszone="technav_11"><a href="http://tech.qq.com/science.htm" target="_blank">探索</a> </li>
+ <li class="three wpd" bosszone="technav_12 noba"><a href="http://kepu.qq.com/" target="_blank">科普中国</a> </li>
+ </ul>
+
+ <style>
+ .mainnav li a {
+ padding: 0 13px;
+ }
+ </style>
+ <!--[if !IE]>|xGv00|1d81bc800ba1f7e03c8841c3d1c8b1e4<![endif]-->
+ </div>
+ <script type="text/javascript">
+ var mainNav = document.getElementById('smnav');
+ var navLi = mainNav.getElementsByTagName('li');
+ for (i = 0; i & lt; 11; i++) {
+
+ navLi[i].className = '';
+
+ if (ARTICLE_INFO.sub_nav == 'ydhl') {
+ navLi[1].className = 'on';
+ } else if (ARTICLE_INFO.sub_nav == 'dzsw') {
+
+ navLi[2].className = 'on';
+
+ } else if (ARTICLE_INFO.sub_nav == 'sjwl') {
+
+ navLi[3].className = 'on';
+
+ } else if (ARTICLE_INFO.sub_nav == 'ganmeol') {
+
+ navLi[4].className = 'on';
+
+ } else if (ARTICLE_INFO.sub_nav == 'tele') {
+
+ navLi[5].className = 'on';
+
+ } else if (ARTICLE_INFO.sub_nav == 'it') {
+
+ navLi[6].className = 'on';
+
+ } else if (ARTICLE_INFO.sub_nav == 'Innovation') {
+
+ navLi[7].className = 'on';
+
+ } else {
+ navLi[0].className = 'on';
+ }
+ };
+ </script>
+ <!--[if !IE]>|xGv00|34673bf81bc22f7e152f677d740754c3<![endif]-->
+ <div class="wrapper" id="Main-Article-QQ">
+ <div class="infoComm_B" id="infoCommBg">
+ <div class="sanJiao"><a href="http://coral.qq.com/1576450358" id="cmt_1" target="_blank" bosszone="Ncomm"><span class="num"><em id="top_count">10</em></span></a></div>
+ </div>
+ <div class="bd" id="MainL">
+ <div class="main">
+ <!--main_0-->
+ <!--[if !IE]>|xGv00|f7455cc8bef8b9af25607132067d73db<![endif]-->
+ <div id="C-Main-Article-QQ" class="mod-left">
+ <div class="hd">
+ <h1>DeepMind新电脑已可利用记忆自学 人工智能迈上新台阶</h1>
+ <div class="titBar" bosszone="titleDown">
+ <div class="info">
+ <span class="infoCol"><span class="where" bosszone="jgname">TNW中文站</span></span><span class="pubTime">2016年10月14日07:17</span>
+ <div class="shareBtn v-shareBtn pr" id="shareBtn">
+ <a class="shareBtn-hd" style="cursor: pointer;">我要分享<i></i></a>
+ <div class="shareBtn-bd">
+ <ul class="shareBtn16">
+ <li bosszone="msWeibo"><a href="javascript:void(0)" id="tmblogbt1" class="s_weibo" onclick="share2weibo.showPopup(this)">腾讯微博</a></li>
+ <li bosszone="msQzone"><a href="javascript:void(0)" class="s_qzone" onclick="share2qzone.showPopup(this)">QQ空间</a></li>
+ <li bosszone="msQQ"><a href="javascript:void(0)" class="s_qq" onclick="share2qq.showPopup(this)">QQ好友</a></li>
+ <li bosszone="msSina"><a href="javascript:void(0)" class="s_sina" onclick="share2sina()">新浪微博</a></li>
+ <li bosszone="msWx" id="shareWx">
+ <a href="javascript:void(0)" class="s_wx">微信好友</a>
+ <div class="ewmBox"><img src="" /></div>
+ </li>
+ <li bosszone="mslinkin"><a href="javascript:void(0)" class="s_in" data-node="shareLinkedIn">领英分享</a></li>
+ </ul>
+ </div>
+ </div>
+ <!--[if !IE]>|xGv00|3aa77d17775948b0788bd642e6db1bca<![endif]-->
+ <!--[if !IE]>|xGv00|c58b58178d5000d0e198ef6ecd736c29<![endif]-->
+ </div>
+ </div>
+ </div>
+ <div class="bd" accesskey="3" tabindex="-1">
+ <div class="Line"></div>
+ <div id="Cnt-Main-Article-QQ" bosszone="content" style="position: relative;">
+ <div class="mbArticleSharePic">
+ <div class="mbArticleShareBtn"><span>转播到腾讯微博</span></div><img alt="DeepMind新电脑已可利用记忆自学 人工智能迈上新台阶" src="http://img1.gtimg.com/tech/pics/hv1/168/240/2140/139214868.jpg" /></div>
+ <p style="TEXT-INDENT: 2em">TNW中文站 10月14日报道</p>
+ <p style="TEXT-INDENT: 2em">
+ <!--keyword--><span onmouseover='ShowInfo(this,"GOOG.OQ","200","-1",event);'><a class="a-tips-Article-QQ" href="http://stockhtm.finance.qq.com/astock/ggcx/GOOG.OQ.htm" target="_blank"><!--/keyword-->谷歌<!--keyword--></a></span>(<a href="http://t.qq.com/googlechina#pref=qqcom.keyword" rel="googlechina" reltitle="谷歌" target="_blank">微博</a>)
+ <!--/keyword-->在2014年收购的人工智能公司DeepMind开发出一款能够用自己的记忆学习新知识并利用这些知识来回答问题的计算机。</p>
+ <p style="TEXT-INDENT: 2em">这款产品具有极其重要的意义,因为这意味着未来的人工智能技术可能不需要人类来教它就能回答人类提出的问题。</p>
+ <p style="TEXT-INDENT: 2em">DeepMind表示,这款名为DNC(可微神经计算机)的AI模型可以接受家谱和伦敦地铁网络地图这样的信息,还可以回答与那些数据结构中的不同项目之间的关系有关的复杂问题。</p>
+ <p style="TEXT-INDENT: 2em">例如,它可以回答“从邦德街开始,沿着中央线坐一站,环线坐四站,然后转朱比利线坐两站,你会到达哪个站?”这样的问题。</p>
+ <p style="TEXT-INDENT: 2em">DeepMind称,DNC还可以帮你规划从沼泽门到皮卡迪利广场的最佳路线。</p>
+ <p style="TEXT-INDENT: 2em">同样,它还可以理解和回答某个大家族中的成员之间的关系这样的复杂问题,比如“张三的大舅是谁?”。</p>
+ <p style="TEXT-INDENT: 2em">DNC建立在神经网络的概念之上,神经网络可以模拟人类思想活动的方式。这种AI技术很适合与机器习得配套使用。</p>
+ <p style="TEXT-INDENT: 2em">DeepMind的AlphaGo AI能够打败围棋冠军也跟这些神经网络有很大关系。但是AlphaGo必须进行训练才行,开发人员向AlphaGo提供了历史对弈中的大约3000万记录。让人工智能技术具备通过记忆学习的能力,就可以让它独自完成更复杂的任务。</p>
+ <p style="TEXT-INDENT: 2em">DeepMind希望DNC可以推动计算行业实现更多突破。DeepMind已将其研究结果发表在<a class="a-tips-Article-QQ" href="http://tech.qq.com/science.htm" target="_blank">科学</a>刊物《自然》(Nature)上。(编译/林靖东)</p>
+ <p style="TEXT-INDENT: 2em"><strong><strong>精彩视频推荐</strong></strong>
+ </p>
+ <p style="TEXT-INDENT: 2em">
+
+
+
+
+
+ <!-- 相关视频 -->
+ <!-- built at: Tue Nov 01 2016 15:44:22 GMT+0800 (中国标准时间) -->
+
+ <script type="text/javascript">
+ var related_video_info = {
+ vid: 'x033633yrm8',
+ cid: 'ehlic8uar3z9hxz',
+ url: 'http://v.qq.com/page/x/m/8/x033633yrm8.html',
+ pic: 'http://vpic.video.qq.com/4249084570/x033633yrm8_ori_1.jpg',
+ title: '全民微信时代,用语音功能发60秒是种怎样的体验?'
+ };
+ </script>
+
+
+ <style type="text/css">
+ .rv-root-v2 {
+ font-family: "\5FAE\8F6F\96C5\9ED1", sans-serif;
+ color: #000
+ }
+
+ .rv-root-v2 a {
+ text-decoration: none;
+ color: #000
+ }
+
+ .rv-root-v2 h1,
+ .rv-root-v2 h2,
+ .rv-root-v2 h3,
+ .rv-root-v2 ol,
+ .rv-root-v2 p,
+ .rv-root-v2 ul {
+ display: block;
+ padding: 0;
+ margin: 0
+ }
+
+ .rv-root-v2 img {
+ border: 0
+ }
+
+ .rv-root-v2 .rv-cf:after,
+ .rv-root-v2 .rv-cf:before {
+ content: " ";
+ display: table
+ }
+
+ .rv-root-v2 .rv-cf:after {
+ clear: both
+ }
+
+ .rv-root-v2 .rv-cf {
+ *zoom: 1
+ }
+
+ .rv-root-v2 .rv-top {
+ height: 40px;
+ line-height: 40px;
+ background-color: #f3f3f3
+ }
+
+ .rv-root-v2 .rv-top .rv-fold-btn {
+ float: right;
+ padding-left: 20px;
+ margin-right: 16px;
+ font-size: 14px;
+ background-image: url(http://mat1.gtimg.com/news/dc/images/fold.png);
+ background-position: left center;
+ background-repeat: no-repeat
+ }
+
+ .rv-root-v2 .rv-top .rv-autoplay {
+ float: right;
+ width: 110px;
+ margin-right: 16px
+ }
+
+ .rv-root-v2 .rv-top .rv-autoplay span {
+ font-size: 14px;
+ float: right
+ }
+
+ .rv-root-v2 .rv-top .rv-autoplay a {
+ float: right;
+ display: block;
+ width: 32px;
+ height: 18px;
+ padding: 2px;
+ margin-top: 10px;
+ margin-left: 12px;
+ border-radius: 10px;
+ font-size: 0;
+ text-indent: -9999px;
+ cursor: pointer;
+ background-color: #CCC;
+ transition: background .3s ease-out
+ }
+
+ .rv-root-v2 .rv-top .rv-autoplay a i {
+ display: block;
+ width: 18px;
+ height: 18px;
+ border-radius: 50%;
+ background-color: #fff;
+ margin-left: 0;
+ box-shadow: 1px 1px 3px rgba(0, 0, 0, .6);
+ transition: all .3s ease-out
+ }
+
+ .rv-root-v2 .rv-top .rv-autoplay a:hover {
+ background-color: #d9d9d9
+ }
+
+ .rv-root-v2 .rv-top .rv-autoplay a.enabled {
+ background-color: #006cb7
+ }
+
+ .rv-root-v2 .rv-top .rv-autoplay a.enabled i {
+ margin-left: 14px
+ }
+
+ .rv-root-v2 .rv-top .rv-autoplay a.enabled:hover {
+ background-color: #007bd1
+ }
+
+ .rv-root-v2 .rv-top .rv-autoplay a:active i {
+ box-shadow: none
+ }
+
+ .rv-root-v2 .rv-top .rv-title {
+ overflow: hidden
+ }
+
+ .rv-root-v2 .rv-top .rv-title a {
+ display: block;
+ font-size: 18px;
+ font-weight: 400;
+ text-indent: 12px;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ overflow: hidden;
+ color: #000
+ }
+
+ .rv-root-v2 .rv-top .rv-title a:hover {
+ color: #cd0000;
+ text-decoration: underline
+ }
+
+ .rv-root-v2 .rv-middle .rv-player {
+ position: relative;
+ min-height: 360px;
+ padding-bottom: 18px
+ }
+
+ .rv-root-v2 .rv-middle .rv-player .rv-player-adjust-img {
+ width: 100%;
+ visibility: hidden;
+ font-size: 0
+ }
+
+ .rv-root-v2 .rv-middle .rv-player .rv-player-adjust-img img {
+ width: 100%;
+ vertical-align: top;
+ max-width: 2000px!important;
+ min-width: 0!important
+ }
+
+ .rv-root-v2 .rv-middle .rv-player .rv-player-wrap {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ top: 0;
+ left: 0;
+ background-color: #000;
+ box-shadow: inset 0 0 20px rgba(0, 0, 0, .6)
+ }
+
+ .rv-root-v2 .rv-middle .rv-player .rv-player-wrap .rv-player-mod {
+ position: relative;
+ width: 100%;
+ height: 100%
+ }
+
+ .rv-root-v2 .rv-middle .rv-player .rv-player-wrap .rv-player-mod .rv-player-loading {
+ width: 100%;
+ height: 100%;
+ text-align: center;
+ color: #999;
+ font-family: verdana, arial, sans-serif
+ }
+
+ .rv-root-v2 .rv-middle .rv-player .rv-player-wrap .rv-player-mod .tvp_titles {
+ display: none
+ }
+
+ .rv-root-v2 .rv-middle .rv-player .rv-player-wrap .rv-player-mini-ctrl {
+ display: none;
+ position: absolute;
+ right: 0;
+ z-index: 99;
+ bottom: 18px;
+ width: 30px
+ }
+
+ .rv-root-v2 .rv-middle .rv-player .rv-player-wrap .rv-player-mini-ctrl-close,
+ .rv-root-v2 .rv-middle .rv-player .rv-player-wrap .rv-player-mini-ctrl-mute,
+ .rv-root-v2 .rv-middle .rv-player .rv-player-wrap .rv-player-mini-ctrl-resize {
+ display: block;
+ margin-top: 3px;
+ width: 30px;
+ height: 30px;
+ line-height: 30px;
+ background-color: #000;
+ background-color: rgba(0, 0, 0, .6);
+ background-image: url(http://mat1.gtimg.com/news/dc/images/rv_mini_sprites_v2.png);
+ background-repeat: no-repeat;
+ text-align: center
+ }
+
+ .rv-root-v2 .rv-middle .rv-player .rv-player-wrap .rv-player-mini-ctrl-close:hover,
+ .rv-root-v2 .rv-middle .rv-player .rv-player-wrap .rv-player-mini-ctrl-mute:hover,
+ .rv-root-v2 .rv-middle .rv-player .rv-player-wrap .rv-player-mini-ctrl-resize:hover {
+ color: #FFF;
+ background-color: #000;
+ background-color: rgba(0, 0, 0, .9)
+ }
+
+ .rv-root-v2 .rv-middle .rv-player .rv-player-wrap .rv-player-mini-ctrl-mute,
+ .rv-root-v2 .rv-middle .rv-player .rv-player-wrap .rv-player-mini-ctrl-mute.mute-off {
+ background-position: 0 -150px
+ }
+
+ .rv-root-v2 .rv-middle .rv-player .rv-player-wrap .rv-player-mini-ctrl-mute.mute-on {
+ background-position: 0 -180px
+ }
+
+ .rv-root-v2 .rv-middle .rv-player .rv-player-wrap .rv-player-mini-ctrl-close {
+ background-position: 0 0
+ }
+
+ .rv-root-v2 .rv-middle .rv-player .rv-player-wrap .rv-player-mini-ctrl-resize {
+ background-position: 0 -30px
+ }
+
+ .rv-root-v2 .rv-middle .rv-player .rv-player-mini {
+ position: fixed;
+ width: 270px;
+ height: 170px;
+ left: 0;
+ bottom: 0;
+ top: auto;
+ z-index: 99;
+ box-shadow: 0 0 3px rgba(0, 0, 0, .3)
+ }
+
+ .rv-root-v2 .rv-middle .rv-player .rv-player-mini .rv-player-mini-ctrl {
+ display: block
+ }
+
+ @media only screen and (min-width:1300px) {
+ .rv-root-v2 .rv-middle .rv-player .rv-player-mini.rv-player-mini-sp1 {
+ left: 50%;
+ margin-left: -692px
+ }
+ }
+
+ .rv-root-v2 .rv-middle .rv-player .rv-player-mini.rv-player-mini-big {
+ width: 640px;
+ height: 378px
+ }
+
+ .rv-root-v2 .rv-middle .rv-player .rv-player-mini.rv-player-mini-big .rv-player-mini-ctrl-resize {
+ background-position: 0 -60px
+ }
+
+ .rv-root-v2 .rv-middle .rv-playlist {
+ height: 100px;
+ background-color: #2f2f2f
+ }
+
+ .rv-root-v2 .rv-middle .rv-playlist .rv-playlist-ctrl {
+ position: relative;
+ width: 100%;
+ height: 0;
+ z-index: 2
+ }
+
+ .rv-root-v2 .rv-middle .rv-playlist .rv-playlist-ctrl a {
+ display: block;
+ position: absolute;
+ top: 0;
+ width: 17px;
+ height: 100px;
+ line-height: 100px;
+ font-size: 14px;
+ font-weight: 700;
+ font-family: NanumMyeongjo, "\5B8B\4F53", sans-serif;
+ text-align: center;
+ color: #a3a3a3;
+ background-color: #2f2f2f;
+ background-color: rgba(47, 47, 47, .8);
+ cursor: pointer
+ }
+
+ .rv-root-v2 .rv-middle .rv-playlist .rv-playlist-ctrl a:hover {
+ background-color: #494949;
+ background-color: rgba(73, 73, 73, .8)
+ }
+
+ .rv-root-v2 .rv-middle .rv-playlist .rv-playlist-ctrl a.disabled {
+ cursor: not-allowed;
+ color: #505050
+ }
+
+ .rv-root-v2 .rv-middle .rv-playlist .rv-playlist-ctrl a.disabled:hover {
+ background-color: #2f2f2f;
+ background-color: rgba(47, 47, 47, .8);
+ box-shadow: none
+ }
+
+ .rv-root-v2 .rv-middle .rv-playlist .rv-playlist-ctrl .prev {
+ left: 0
+ }
+
+ .rv-root-v2 .rv-middle .rv-playlist .rv-playlist-ctrl .next {
+ right: 0
+ }
+
+ .rv-root-v2 .rv-middle .rv-playlist .rv-playlist-wrap {
+ height: 100px;
+ width: 100%;
+ overflow: hidden;
+ position: relative;
+ z-index: 1
+ }
+
+ .rv-root-v2 .rv-middle .rv-playlist .rv-playlist-wrap .rv-playlist-scroller {
+ height: 130px;
+ width: 100%;
+ overflow-y: hidden;
+ overflow-x: scroll;
+ -webkit-overflow-scrolling: touch
+ }
+
+ .rv-root-v2 .rv-middle .rv-playlist .rv-playlist-wrap .rv-playlist-scroller ol.rv-playlist-list {
+ width: 9999px;
+ padding: 0 17px;
+ list-style: none
+ }
+
+ .rv-root-v2 .rv-middle .rv-playlist .rv-playlist-wrap .rv-playlist-scroller ol.rv-playlist-list li {
+ display: block;
+ float: left
+ }
+
+ .rv-root-v2 .rv-middle .rv-playlist .rv-playlist-wrap .rv-playlist-scroller ol.rv-playlist-list li a {
+ display: block;
+ position: relative;
+ width: 160px;
+ height: 90px;
+ padding: 5px;
+ cursor: pointer
+ }
+
+ .rv-root-v2 .rv-middle .rv-playlist .rv-playlist-wrap .rv-playlist-scroller ol.rv-playlist-list li a img {
+ width: 100%;
+ height: 100%;
+ opacity: 0;
+ transition: opacity .3s ease-out;
+ vertical-align: top
+ }
+
+ .rv-root-v2 .rv-middle .rv-playlist .rv-playlist-wrap .rv-playlist-scroller ol.rv-playlist-list li a div {
+ position: absolute;
+ width: 100%;
+ left: 0;
+ bottom: 0;
+ font-size: 12px;
+ line-height: 18px
+ }
+
+ .rv-root-v2 .rv-middle .rv-playlist .rv-playlist-wrap .rv-playlist-scroller ol.rv-playlist-list li a div span {
+ display: block;
+ height: 18px;
+ margin: 5px;
+ padding: 5px 10px 2px;
+ overflow: hidden;
+ font-family: Arial, sans-serif;
+ color: #ababab;
+ background-color: rgba(0, 0, 0, .8);
+ -ms-filter: "progid:DXImageTransform.Microsoft.gradient(GradientType=1, StartColorStr='#CC000000', EndColorStr='#CC000000')";
+ filter: progid: DXImageTransform.Microsoft.Gradient(GradientType=1, StartColorStr='#CC000000', EndColorStr='#CC000000');
+ -webkit-transition: all .2s ease-out;
+ -moz-transition: all .2s ease-out;
+ -ms-transition: all .2s ease-out;
+ -o-transition: all .2s ease-out;
+ transition: all .2s ease-out
+ }
+
+ .rv-root-v2 .rv-middle .rv-playlist .rv-playlist-wrap .rv-playlist-scroller ol.rv-playlist-list li a div span:not([dummy]) {
+ filter: progid: DXImageTransform.Microsoft.Gradient(enabled='false')
+ }
+
+ .rv-root-v2 .rv-middle .rv-playlist .rv-playlist-wrap .rv-playlist-scroller ol.rv-playlist-list li a.current {
+ background: #101010
+ }
+
+ .rv-root-v2 .rv-middle .rv-playlist .rv-playlist-wrap .rv-playlist-scroller ol.rv-playlist-list li a.current div span {
+ color: #ff6d1a
+ }
+
+ .rv-root-v2 .rv-middle .rv-playlist .rv-playlist-wrap .rv-playlist-scroller ol.rv-playlist-list li a:hover {
+ background: #252525
+ }
+
+ .rv-root-v2 .rv-middle .rv-playlist .rv-playlist-wrap .rv-playlist-scroller ol.rv-playlist-list li a:hover div span {
+ height: 36px
+ }
+
+ @media only screen and (min-width:1260px) {
+ .rv-adjust-wide-article {
+ width: 895px;
+ margin-left: -97px
+ }
+ }
+ </style>
+ </p>
+ <div class="rv-root-v2 rv-js-root">
+ <div class="rv-top">
+ <!--<div class="rv-fold-btn">
+ <a href="javascript:;" target="_self">收起</a>
+ </div>-->
+ <div class="rv-autoplay">
+ <a class="rv-js-autoplay" href="javascript:;" target="_self" bosszone="bofang_button"><i>自动播放开关</i></a>
+ <span>自动播放</span>
+ </div>
+ <h2 class="rv-title">
+ <a href="http://v.qq.com/page/x/m/8/x033633yrm8.html" target="_blank">全民微信时代,用语音功能发60秒是种怎样的体验?</a>
+
+ </h2>
+ </div>
+ <div class="rv-middle">
+ <div class="rv-player" id="rv-player">
+ <div class="rv-player-adjust-img">
+ <!--[if lte IE 9]><img src="http://mat1.gtimg.com/news/dc/images/16x9_adjust_img.png" /><![endif]-->
+ <!--[if !IE]><!-->
+ <div class="mbArticleSharePic">
+ <div class="mbArticleShareBtn"><span>转播到腾讯微博</span></div><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAJAQMAAAAB5D5xAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAADUExURQAAAKd6PdoAAAABdFJOUwBA5thmAAAAC0lEQVQI12NgwAkAABsAAVJE5KkAAAAASUVORK5CYIIvKiAgfHhHdjAwfDUwZDc5YmEzMGM3MDcxY2I5OTIyMTk4MzYyZGRlZmNlICov" /></div>
+ <!--<![endif]-->
+ </div>
+ <div class="rv-player-wrap">
+ <div class="rv-player-mod">
+ <table class="rv-player-loading" border="0">
+ <tbody>
+ <tr>
+ <td>正在加载...</td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div class="rv-player-mini-ctrl">
+ <a href="javascript:;" target="_self" class="rv-player-mini-ctrl-mute" data-action="mute" bosszone="rvideo_fuchuang_mute" title="声音开关"></a>
+ <a href="javascript:;" target="_self" class="rv-player-mini-ctrl-close" data-action="close" bosszone="rvideo_fuchuang_close" title="关闭"></a>
+ <a href="javascript:;" target="_self" class="rv-player-mini-ctrl-resize" data-action="resize" bosszone="rvideo_fuchuang_zhankai" title="调整尺寸"></a>
+ </div>
+ </div>
+ </div>
+ <div class="rv-playlist">
+ <div class="rv-playlist-ctrl">
+ <a class="prev" href="javascript:;" target="_self" bosszone="rvideo_list_forward">&lt;</a>
+ <a class="next" href="javascript:;" target="_self" bosszone="rvideo_list_back">&gt;</a>
+ </div>
+ <div class="rv-playlist-wrap">
+ <div class="rv-playlist-scroller">
+ <ol class="rv-playlist-list rv-cf"></ol>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <script>
+ ! function t(i, e, n) {
+ function o(a, l) {
+ if (!e[a]) {
+ if (!i[a]) {
+ var s = "function" == typeof require & amp; & amp;
+ require;
+ if (!l & amp; & amp; s) return s(a, !0);
+ if (r) return r(a, !0);
+ throw new Error("Cannot find module '" + a + "'")
+ }
+ var c = e[a] = {
+ exports: {}
+ };
+ i[a][0].call(c.exports, function(t) {
+ var e = i[a][1][t];
+ return o(e ? e : t)
+ }, c, c.exports, t, i, e, n)
+ }
+ return e[a].exports
+ }
+ for (var r = "function" == typeof require & amp; & amp; require, a = 0; a & lt; n.length; a++) o(n[a]);
+ return o
+ }({
+ 1: [function(t, i, e) {
+ var n = {};
+ n.modName = "dc_related_video", n.autoplay_cookie = {
+ key: "aboutVideo_v",
+ domain: ".qq.com",
+ path: "/",
+ expires: 90
+ }, n.playing_cookie = {
+ key: "dc_vplaying",
+ domain: ".qq.com",
+ path: "/",
+ expires: function() {
+ return new Date((new Date).getTime() + 72e5)
+ }
+ }, n.mini_unmute = {
+ key: "rv_mini_unmute",
+ domain: ".qq.com",
+ path: "/",
+ expires: 1
+ }, n.qqcomstore = null, n.videos = [], n.automute = !1, window.txPlayer_config = n, i.exports = n
+ }, {}],
+ 2: [function(t, i, e) {
+ var n = t("./config"),
+ o = t("./tools"),
+ r = window.related_video_info,
+ a = t("./inview");
+ o.loadJquery(function(i) {
+ o.debug_log("jquery\u52a0\u8f7d\u5b8c\u6bd5"), a.init(function() {
+ o.debug_log("\u89c6\u9891\u51fa\u73b0\u5728\u7a97\u53e3\u5185");
+ var e = t("./ui");
+ i.getScript("http://vm.gtimg.cn/tencentvideo/txp/js/txplayer.js").done(function() {
+ o.debug_log("txplayer.js\u52a0\u8f7d\u5b8c\u6210\uff0c\u51c6\u5907\u64ad\u653e", r);
+ var a = !0;
+ !0 !== o.playingGlobalSign.isAnyonePlaying() & amp; & amp;
+ "0" !== o.cookie.get(n.autoplay_cookie.key) || (a = !1), e.autoPlaySW.setStatus(a), e.autoPlaySW.bind(function(t) {
+ o.autoPlaySign[t ? "on" : "off"](), t ? s.play() : -1 === s.getPlayerState() ? s.stop() : s.pause()
+ });
+ var l = t("./play"),
+ s = l(r, a);
+ window.v_nomini || e.scrollPlay.init(s, n), s.on("playStateChange", function(t) {
+ 1 == t.state & amp; & amp;
+ i(window).trigger("video:pause", n.modName), t.state & gt;
+ 0 ? o.playingGlobalSign.on() : o.playingGlobalSign.off()
+ }), i(window).on("video:pause", function(t, i) {
+ o.debug_log("\u6682\u505c\u8bf7\u6c42\u6765\u81ea\uff1a ", i), i !== n.modName & amp; & amp;
+ (-1 === s.getPlayerState() ? s.stop() : s.pause())
+ });
+ var c = t("./getVideoList");
+ c(r, s)
+ })
+ })
+ })
+ }, {
+ "./config": 1,
+ "./getVideoList": 3,
+ "./inview": 4,
+ "./play": 5,
+ "./tools": 6,
+ "./ui": 7
+ }],
+ 3: [function(t, i, e) {
+ function n(t, i) {
+ o = i;
+ var e = function(i) {
+ u(t, i)
+ };
+ t.cid & amp; & amp;
+ "null" !== t.cid ? r.getVideoListByCoverId(t.cid, e) : (r.debug_log("getLikeVideoList", c.qq), r.getLikeVideoList(c.qq, t.vid, e))
+ }
+ var o, r = t("./tools"),
+ a = t("./ui"),
+ l = t("./play"),
+ s = t("./inview"),
+ c = {
+ qq: r.cookie.get("o_cookie") || null
+ },
+ u = function(t, i) {
+ r.debug_log("\u83b7\u53d6\u64ad\u653e\u5217\u8868\u6570\u636e", i), i || a.playlist.hide();
+ var e = [];
+ e.push(t), $.each(i, function(i, n) {
+ n.vid !== t.vid & amp; & amp;
+ e.push(n)
+ });
+ var n = "";
+ $.each(e, function(t, i) {
+ i.title & amp; & amp;
+ i.title.replace(/[^\x00-\xff]/gi, "**").length & gt;
+ 40 ? i.stitle = r.cutstr2(i.title, 40) + "..." : i.stitle = i.title || "", n += "&lt;li&gt;", n += " &lt;a data-vid='" + i.vid + "' data-idx='" + t + "' href='" + i.url + "' target='_self' class='" + (0 === t ? "current" : "") + "' bosszone='rvideo_list_title'&gt;", n += " &lt;img src='" + i.pic + "' onload='this.onload=null;this.style.opacity=1;' /&gt;", n += " &lt;div&gt;", n += " &lt;span&gt;" + i.stitle + "&lt;/span&gt;", n += " &lt;/div&gt;", n += " &lt;/a&gt;", n += "&lt;/li&gt;"
+ }), a.dom.$playlist_list.html(n), a.playlist.init();
+ var c = function(t) {
+ if (t) {
+ var i, n;
+ return $.each(e, function(e, o) {
+ return o.vid === t ? (i = o, n = e, !1) : void 0
+ }), i & amp; & amp;
+ (i.idx = n), i
+ }
+ },
+ u = function(t) {
+ 0 & gt;
+ t || t & gt;
+ e.length - 1 || (l(e[t]), a.playlist.setCurrentToIdx(t), a.playlist.scrollToItemIdx(t))
+ };
+ a.dom.$playlist_list.on("click", "a[data-vid]", function(t) {
+ t.preventDefault();
+ var i = $(this).attr("data-vid"),
+ e = c(i);
+ u(e.idx), r.trace.boss2619("user_click", i)
+ }), o.on("playStateChange", function(t) {
+ if (0 == t.state) {
+ var i = o.getVid(),
+ n = c(i),
+ a = n.idx + 1,
+ l = s.inview();
+ r.debug_log("\u64ad\u653e\u5668\u662f\u5426\u53ef\u89c1", l), a & lt;
+ e.length & amp; & amp;
+ l & amp; & amp;
+ (r.debug_log("event: \u64ad\u653e\u4e0b\u4e00\u4e2a"), u(a), r.trace.boss2619("auto_next", i))
+ }
+ })
+ };
+ i.exports = n
+ }, {
+ "./inview": 4,
+ "./play": 5,
+ "./tools": 6,
+ "./ui": 7
+ }],
+ 4: [function(t, i, e) {
+ function n() {
+ var t = $(window).scrollTop(),
+ i = $(".rv-root-v2").offset().top,
+ e = $(window).height();
+ return t + e - 406 & gt; = i & amp; & amp;
+ i + 518 & gt;
+ t
+ }
+ var o = function(t) {
+ function i() {
+ n() & amp; & amp;
+ !e & amp; & amp;
+ (t(), e = !0)
+ }
+ var e = !1;
+ i(), $(window).scroll(function(t) {
+ i()
+ })
+ };
+ i.exports = {
+ init: o,
+ inview: n
+ }
+ }, {}],
+ 5: [function(t, i, e) {
+ function n(t, i) {
+ var e = "tvp-mod-player-" + t.vid;
+ return o.setPlayerModId(e), o.setTitle(t.title, t.url), a ? a.play({
+ vid: t.vid
+ }) : a = new Txplayer({
+ flashvar: r,
+ useFlashVIPLayer: 0,
+ vid: t.vid,
+ containerId: e,
+ videoType: "vod",
+ width: "100%",
+ height: "100%",
+ playerType: "html5hd",
+ autoplay: i
+ }), a
+ }
+ var o = t("./ui"),
+ r = (t("./config"), {
+ searchbar: 1
+ });
+ window.ARTICLE_INFO & amp; & amp;
+ "sports" === window.ARTICLE_INFO.site & amp; & amp;
+ (r.chid = 8);
+ var a;
+ i.exports = n
+ }, {
+ "./config": 1,
+ "./ui": 7
+ }],
+ 6: [function(t, i, e) {
+ var n = t("./config"),
+ o = function(t, i) {
+ var e = document.head || document.getElementsByTagName("head")[0] || document.documentElement,
+ n = document.createElement("script"),
+ o = !1;
+ n.async = !0, n.src = t, n.onload = n.onreadystatechange = function() {
+ o || n.readyState & amp; & amp;
+ !/loaded|complete/.test(n.readyState) || (o = !0, n.onload = n.onreadystatechange = null, n.parentNode & amp; & amp; n.parentNode.removeChild(n), n = null, "function" == typeof i & amp; & amp; i())
+ }, e.insertBefore(n, e.firstChild)
+ },
+ r = function(t) {
+ t = t || function() {};
+ var i = !1;
+ if ("function" == typeof window.jQuery) {
+ var e = window.jQuery().jquery;
+ if ("string" == typeof e) {
+ var n = e.split(".");
+ 3 === n.length & amp; & amp;
+ "1" === n[0] & amp; & amp;
+ parseInt(n[1], 10) & gt;
+ 10 & amp; & amp;
+ (i = !0)
+ }
+ }
+ i ? t(window.jQuery) : o("http://mat1.gtimg.com/libs/jquery/1.12.0/jquery.min.js", function() {
+ t(window.jQuery)
+ })
+ },
+ a = function() {
+ var t = function() {
+ return t.get.apply(t, arguments)
+ },
+ i = t.utils = {
+ isArray: Array.isArray || function(t) {
+ return "[object Array]" === Object.prototype.toString.call(t)
+ },
+ isPlainObject: function(t) {
+ return !!t & amp; & amp;
+ "[object Object]" === Object.prototype.toString.call(t)
+ },
+ toArray: function(t) {
+ return Array.prototype.slice.call(t)
+ },
+ getKeys: Object.keys || function(t) {
+ var i = [],
+ e = "";
+ for (e in t) t.hasOwnProperty(e) & amp; & amp;
+ i.push(e);
+ return i
+ },
+ escape: function(t) {
+ return String(t).replace(/[,;"\\=\s%]/g, function(t) {
+ return encodeURIComponent(t)
+ })
+ },
+ retrieve: function(t, i) {
+ return null === t ? i : t
+ }
+ };
+ return t.defaults = {}, t.expiresMultiplier = 86400, t.set = function(t, e, n) {
+ if (i.isPlainObject(t))
+ for (var o in t) t.hasOwnProperty(o) & amp; & amp;
+ this.set(o, t[o], e);
+ else {
+ n = i.isPlainObject(n) ? n : {
+ expires: n
+ };
+ var r = void 0 !== n.expires ? n.expires : this.defaults.expires || "",
+ a = typeof r;
+ "string" === a & amp; & amp;
+ "" !== r ? r = new Date(r) : "number" === a & amp; & amp;
+ (r = new Date(+new Date + 1e3 * this.expiresMultiplier * r)), "" !== r & amp; & amp;
+ "toGMTString" in r & amp; & amp;
+ (r = ";expires=" + r.toGMTString());
+ var l = n.path || this.defaults.path;
+ l = l ? ";path=" + l : "";
+ var s = n.domain || this.defaults.domain;
+ s = s ? ";domain=" + s : "";
+ var c = n.secure || this.defaults.secure ? ";secure" : "";
+ document.cookie = i.escape(t) + "=" + i.escape(e) + r + l + s + c
+ }
+ return this
+ }, t.remove = function(t) {
+ t = i.isArray(t) ? t : i.toArray(arguments);
+ for (var e = 0, n = t.length; n & gt; e; e++) this.set(t[e], "", -1);
+ return this
+ }, t.empty = function() {
+ return this.remove(i.getKeys(this.all()))
+ }, t.get = function(t, e) {
+ e = e || void 0;
+ var n = this.all();
+ if (i.isArray(t)) {
+ for (var o = {}, r = 0, a = t.length; a & gt; r; r++) {
+ var l = t[r];
+ o[l] = i.retrieve(n[l], e)
+ }
+ return o
+ }
+ return i.retrieve(n[t], e)
+ }, t.all = function() {
+ if ("" === document.cookie) return {};
+ for (var t = document.cookie.split("; "), i = {}, e = 0, n = t.length; n & gt; e; e++) {
+ var o, r, a = t[e].split("=");
+ try {
+ o = decodeURIComponent(a[0])
+ } catch (l) {
+ o = a[0]
+ }
+ try {
+ r = decodeURIComponent(a[1])
+ } catch (l) {
+ r = a[1]
+ }
+ i[o] = r
+ }
+ return i
+ }, t.enabled = function() {
+ if (navigator.cookieEnabled) return !0;
+ var i = "_" === t.set("_", "_").get("_");
+ return t.remove("_"), i
+ }, t
+ }(),
+ l = function(t, i) {
+ for (var e = 0, n = "", o = 0; o & lt; t.length; o++)
+ if (t.charCodeAt(o) & gt; 128 ? e += 2 : e++, n += t.charAt(o), e & gt; = i) return n;
+ return n
+ },
+ s = function(t, i) {
+ var e, n, o, r, a, l, s = c(function() {
+ a = r = !1
+ }, i);
+ return function() {
+ e = this, n = arguments;
+ var c = function() {
+ o = null, a & amp; & amp;
+ (l = t.apply(e, n)), s()
+ };
+ return o || (o = setTimeout(c, i)), r ? a = !0 : (r = !0, l = t.apply(e, n)), s(), l
+ }
+ },
+ c = function(t, i, e) {
+ var n, o;
+ return function() {
+ var r = this,
+ a = arguments,
+ l = function() {
+ n = null, e || (o = t.apply(r, a))
+ },
+ s = e & amp; & amp;
+ !n;
+ return clearTimeout(n), n = setTimeout(l, i), s & amp; & amp;
+ (o = t.apply(r, a)), o
+ }
+ },
+ u = function() {
+ if (-1 !== location.search.indexOf("debugv") & amp; & amp; window.console) {
+ var t = Array.prototype.slice.call(arguments);
+ t.unshift("[related_video_log]"), console.log(t)
+ }
+ },
+ d = function(t, i) {
+ return i = i || $.noop, "string" != typeof t ? void i(null) : void $.ajax({
+ method: "GET",
+ url: "http://data.video.qq.com/fcgi-bin/data",
+ data: {
+ tid: "25",
+ idlist: t,
+ appid: "10001009",
+ appkey: "c5a3e1529a7ba805",
+ otype: "json"
+ },
+ dataType: "jsonp",
+ cache: !0,
+ scriptCharset: "utf-8"
+ }).done(function(t) {
+ if (!t || t.errorno) return void i(null);
+ var e = [],
+ n = t.results[0].fields,
+ o = n.c_vids || n.c_vclips || [];
+ $.each(o, function(t, i) {
+ e.push({
+ vid: i.c_vid,
+ title: i.c_title,
+ pic: i.c_pic_160_90,
+ url: i.c_play_url
+ })
+ }), i(e)
+ }).fail(function() {
+ i(null)
+ })
+ },
+ p = function(t, i, e) {
+ return e = e || $.noop, i ? (t = t || "", void $.ajax({
+ method: "GET",
+ url: "http://like.video.qq.com/fcgi-bin/like",
+ data: {
+ msgtype: "122",
+ uin: t,
+ id: i,
+ playright: "2",
+ pidx: "0",
+ size: "11",
+ otype: "json",
+ tablist: "9"
+ },
+ dataType: "jsonp",
+ cache: !0,
+ scriptCharset: "utf-8"
+ }).done(function(t) {
+ if (!t || t.errmsg || !t.tablist) return void e(null);
+ var i = [];
+ $.each(t.tablist[0].cover_info, function(t, e) {
+ i.push({
+ vid: e.id,
+ title: e.title,
+ pic: e.picurl,
+ url: e.playurl
+ })
+ }), e(i)
+ }).fail(function() {
+ e(null)
+ })) : void e(null)
+ },
+ f = {
+ _configName: "autoplay_cookie",
+ _config: null,
+ _set: function(t) {
+ this._config = n[this._configName], a.set(this._config.key, t, {
+ expires: this._config.expires,
+ domain: this._config.domain,
+ path: this._config.path
+ })
+ },
+ get: function() {
+ this._config = n[this._configName];
+ var t = a.get(this._config.key);
+ return t
+ },
+ on: function() {
+ this._set("1")
+ },
+ off: function() {
+ this._set("0")
+ }
+ },
+ y = {
+ on: function() {
+ window.dc_playing_sign || (window.dc_playing_sign = {}), window.dc_playing_sign[n.modName] = !0
+ },
+ off: function() {
+ window.dc_playing_sign || (window.dc_playing_sign = {}), window.dc_playing_sign[n.modName] = !1
+ },
+ isAnyonePlaying: function() {
+ if (window.dc_playing_sign) {
+ for (var t in window.dc_playing_sign)
+ if (t !== n.modName & amp; & amp; window.dc_playing_sign.hasOwnProperty(t) & amp; & amp; window.dc_playing_sign[t]) return !0;
+ return !1
+ }
+ return !1
+ }
+ },
+ g = {
+ boss2619: function(t, i) {
+ var e = $.param({
+ BossId: "2619",
+ CheckSum: "1312852225",
+ sIp: "",
+ iQQ: a.get("o_cookie") || "",
+ sOp: t || "",
+ sDomain: window.location.hostname || "",
+ sUrl: window.location.href || "",
+ sRef: window.document.referrer || "",
+ vid: i || "",
+ _dc: "" + Math.random()
+ });
+ (new Image).src = "http://btrace.qq.com/kvcollect?" + e
+ }
+ };
+ i.exports = {
+ getScript: o,
+ loadJquery: r,
+ cookie: a,
+ cutstr2: l,
+ throttle: s,
+ debounce: c,
+ debug_log: u,
+ getVideoListByCoverId: d,
+ getLikeVideoList: p,
+ autoPlaySign: f,
+ playingGlobalSign: y,
+ trace: g
+ }
+ }, {
+ "./config": 1
+ }],
+ 7: [function(t, i, e) {
+ var n = t("./tools"),
+ o = t("./config"),
+ o = {};
+ o.mini_unmute = {
+ key: "rv_mini_unmute",
+ domain: ".qq.com",
+ path: "/",
+ expires: 1
+ };
+ var r = {};
+ r.$root = $(".rv-js-root"), r.$title = r.$root.find(".rv-title a"), r.$autoplay_sw = r.$root.find(".rv-js-autoplay"), r.$player_wrap = r.$root.find(".rv-player-wrap"), r.$player_mod = r.$player_wrap.find(".rv-player-mod"), r.$player_mini_ctrl = r.$player_wrap.find(".rv-player-mini-ctrl"), r.$playlist_node = r.$root.find(".rv-playlist"), r.$playlist_scol = r.$playlist_node.find(".rv-playlist-scroller"), r.$playlist_list = r.$playlist_node.find("ol.rv-playlist-list"), r.$playlist_ctrl = r.$playlist_node.find(".rv-playlist-ctrl a"), r.$playlist_prev = r.$playlist_ctrl.filter(".prev"), r.$playlist_next = r.$playlist_ctrl.filter(".next");
+ var a = function() {
+ return {
+ width: r.$player_mod.width(),
+ height: r.$player_mod.height()
+ }
+ };
+ e.setPlayerModId = function(t) {
+ r.$player_mod.attr("id", t)
+ }, e.setTitle = function(t, i) {
+ return r.$title.html(t).attr("href", i)
+ };
+ var l = function() {
+ var t = "enabled",
+ i = function() {
+ r.$autoplay_sw.attr("bosszone", function() {
+ return n() ? "bofang_button_close" : "bofang_button_open"
+ })
+ },
+ e = function(e) {
+ r.$autoplay_sw[e ? "addClass" : "removeClass"](t), i()
+ },
+ n = function() {
+ return r.$autoplay_sw.hasClass(t)
+ },
+ o = function(e) {
+ var o = r.$autoplay_sw;
+ o.on("click", function() {
+ o.toggleClass(t), "function" == typeof e & amp; & amp;
+ e.call(null, n()), i()
+ })
+ };
+ return {
+ bind: o,
+ setStatus: e,
+ getStatus: n,
+ updateBosszone: i
+ }
+ }();
+ e.autoPlaySW = l;
+ var s = function() {
+ var t, i, e, o, a, l, s = function() {
+ f(), r.$playlist_next.on("click", function() {
+ p("forward")
+ }), r.$playlist_prev.on("click", function() {
+ p("backward")
+ }), r.$playlist_scol.on("scroll", n.throttle(function() {
+ var i = r.$playlist_scol.scrollLeft(),
+ e = "disabled";
+ 0 === i || i === a || 0 & gt; = a ? (0 === i & amp; & amp; r.$playlist_prev.addClass(e), (i === a || 0 & gt; = a) & amp; & amp; r.$playlist_next.addClass(e)) : r.$playlist_ctrl.removeClass(e), -1 !== navigator.appVersion.indexOf("MSIE 7.") & amp; & amp;
+ t.css("visibility", "inherit").css("visibility", "visible")
+ }, 50)), r.$playlist_scol.trigger("scroll")
+ },
+ c = function(t) {
+ r.$playlist_scol.stop().animate({
+ scrollLeft: parseInt(t, 10)
+ }, 500)
+ },
+ u = function(n) {
+ if (!(0 & gt; n || n & gt; i - 1)) {
+ var o = r.$playlist_scol;
+ $item = t.filter(":eq(" + n + ")"), c(o.scrollLeft() + $item.position().left - o.width() / 2 + e / 2), l = n
+ }
+ },
+ d = function(i) {
+ var e = "current";
+ t.find("&gt; a." + e).removeClass(e), t.filter(":eq(" + i + ")").find("&gt; a").addClass(e)
+ },
+ p = function(t) {
+ var i, n = r.$playlist_scol,
+ o = n.scrollLeft(),
+ l = Math.round(.7 * n.width());
+ "forward" === t ? i = o + l : "backward" === t & amp; & amp;
+ (i = o - l), e & gt;
+ i ? i = 0 : i & gt;
+ a - e & amp; & amp;
+ (i = a), c(i)
+ },
+ f = function() {
+ t = r.$playlist_list.find("&gt; li"), i = t.length, e = t.filter(":eq(0)").outerWidth(!0), o = r.$playlist_scol.width() / e, r.$playlist_list.css("width", i * e), a = r.$playlist_list.outerWidth(!0) - r.$playlist_scol.width()
+ };
+ return {
+ init: s,
+ setCurrentToIdx: d,
+ scrollToItemIdx: u,
+ forward: function() {
+ p("forward")
+ },
+ backward: function() {
+ p("backward")
+ },
+ hide: function() {
+ return r.$playlist_node.slideUp(300)
+ },
+ update: f
+ }
+ }();
+ e.playlist = s;
+ var c = function() {
+ var t, i = !1,
+ e = function() {
+ var t = {};
+ t.top = r.$root.offset().top, t.btm = t.top + r.$root.height();
+ var i = {
+ height: $(window).height(),
+ scrollTop: $(window).scrollTop()
+ },
+ e = t.top & gt; = i.scrollTop & amp; & amp;
+ i.scrollTop + i.height & gt; = t.top, n = t.btm & gt; = i.scrollTop & amp; & amp;
+ i.scrollTop + i.height & gt; = t.btm, o = t.top & lt; = i.scrollTop & amp; & amp;
+ i.scrollTop + i.height & lt; = t.btm;
+ return !!(e || n || o)
+ },
+ l = function() {
+ var t = $("#Main-Article-QQ");
+ if (t.length & gt; 0) {
+ var i = t.offset(),
+ e = t.width();
+ return 2 * i.left + e === $(window).width() ? e : !1
+ }
+ return !1
+ },
+ s = function(n) {
+ var o = i ? !0 : e();
+ if (!(!0 === t & amp; & amp; !0 === o || !1 === t & amp; & amp; !1 === o)) {
+ if (r.$player_wrap.css("visibility", "hidden").toggleClass("rv-player-mini", !o), o) r.$player_wrap.css({
+ "margin-left": "",
+ left: ""
+ }), n.unMute(), d(n);
+ else {
+ if (window.ARTICLE_INFO & amp; & amp; 1 === window.ARTICLE_INFO.isUnique) r.$player_wrap.addClass("rv-player-mini-sp1");
+ else {
+ var a = l();
+ if (a) {
+ var s, u, p = r.$player_wrap.width(),
+ y = ($(window).width() - a) / 2 - 10 & gt; = p;
+ y ? (s = 0 - a / 2 - r.$player_wrap.width() - 10, u = "50%") : (s = 0, u = 0), r.$player_wrap.css({
+ "margin-left": s,
+ left: u
+ })
+ }
+ }
+ "1" !== f.get() & amp; & amp;
+ (n.mute(), d(n))
+ }
+ c(n), r.$player_wrap.css("visibility", "visible"), t = o
+ }
+ },
+ c = function(t) {
+ var i = a().height;
+ t.resize({
+ height: i
+ })
+ },
+ u = r.$player_mini_ctrl.find("a[data-action=mute]"),
+ d = function(t) {
+ o.mute = !!t.isMuted(), u.removeClass("mute-off mute-on").addClass(t.isMuted() ? "mute-on" : "mute-off")
+ },
+ p = function(t) {
+ var e = function() {
+ s(t)
+ };
+ $(window).scroll(e), $(window).resize(e), r.$player_mini_ctrl.on("click", "a[data-action=close]", function(e) {
+ e.preventDefault(), i = !0, s.apply(this)(), t.pause()
+ }), r.$player_mini_ctrl.on("click", "a[data-action=resize]", function(i) {
+ i.preventDefault(), r.$player_wrap.toggleClass("rv-player-mini-big"), c(t)
+ }), d(t), u.click(function() {
+ t.isMuted() ? (t.unMute(), f.on()) : (t.mute(), f.off()), u.removeClass("mute-off mute-on").addClass(t.isMuted() ? "mute-on" : "mute-off")
+ })
+ },
+ f = {
+ _configName: "mini_unmute",
+ _config: null,
+ _set: function(t) {
+ this._config = o[this._configName], n.cookie.set(this._config.key, t, {
+ expires: this._config.expires,
+ domain: this._config.domain,
+ path: this._config.path
+ })
+ },
+ get: function() {
+ return this._config = o[this._configName], n.cookie.get(this._config.key)
+ },
+ on: function() {
+ this._set("1")
+ },
+ off: function() {
+ this._set("0")
+ }
+ };
+ return {
+ detectVisible: e,
+ init: p
+ }
+ }();
+ e.scrollPlay = c, e.dom = r
+ }, {
+ "./config": 1,
+ "./tools": 6
+ }]
+ }, {}, [2]);
+ </script>
+ <iframe src="http://v.qq.com/video/playview.html?vid=x033633yrm8" style="display:none;" height="0" width="0"></iframe>
+
+ <!-- /相关视频 -->
+
+
+
+
+
+ <!--[if !IE]>|xGv00|c0e16790cb5208f9e99fb07f7649212b<![endif]-->
+
+ <p></p>
+ <p style="TEXT-INDENT: 2em"><strong>【美国The Next Web作品的中文相关权益归腾讯公司独家所有。未经授权,不得转载、摘编等。】</strong></p>
+ <div id="tipsWBzf" style="width: 59px; height: 22px; position: absolute; visibility: hidden; text-decoration: none; z-index: 899; cursor: pointer;"><span style="position:relative;"><a bosszone="huaciZB" href="javascript:void(0)" style="position:absolute;left:0;top:0;z-index:900;display:block;width:79px;height:25px;background:url(http://mat1.gtimg.com/news/dc/icon_huaci_zb.gif) no-repeat;" title="转播至微博"></a></span></div>
+ </div>
+ </div>
+ <div class="ft">
+ <div class="QQeditor">[责任编辑:alonliu]</div>
+ <div class="correlation-Article-QQ">
+ <div class="isCommt"><a href="#" id="cmt_2">我要评论(<em id="comNum2">0</em>)</a></div>
+ <style>
+ #vote {
+ font-size: 14px;
+ font-family: "Microsoft Yahei";
+ display: none;
+ margin-top: 20px;
+ height: 30px;
+ }
+
+ #vID {
+ float: left;
+ width: 410px;
+ font-size: 14px;
+ color: #5a5a5a;
+ }
+
+ #vArea {
+ float: right;
+ width: 207px;
+ }
+
+ #vArea a {
+ display: inline-block;
+ width: 67px;
+ text-align: center;
+ line-height: 24px;
+ color: #000;
+ background: url(http://mat1.gtimg.com/finance/Tammy/diceng/v_bg.png) repeat-x;
+ height: 24px;
+ }
+
+ #vArea a:hover {
+ background: url(http://mat1.gtimg.com/finance/Tammy/diceng/v_bg2.png) repeat-x;
+ height: 24px;
+ border: #ababab solid 1px;
+ }
+
+ #vArea a:hover {
+ text-decoration: none;
+ }
+
+ #high {
+ width: 67px;
+ border: #cccccc solid 1px;
+ }
+
+ #normal {
+ width: 72px;
+ border: #cccccc solid 1px;
+ border-left: #fff solid 1px;
+ }
+
+ #Irrelevant {
+ width: 70px;
+ border: #cccccc solid 1px;
+ border-left: #fff solid 1px;
+ }
+
+ #vArea span {
+ color: #4f86af;
+ font-size: 14px;
+ }
+
+ #vArea a {
+ cursor: pointer;
+ }
+ </style>
+ <script src="http://mat1.gtimg.com/finance/js/st/p/quotpage/getName_v20130618142048.js"></script>
+ <div id="vote" class="clearfix">
+ <div id="vID">您认为这篇文章与"<span id="test">新一网(08008.HK)</span>"相关度高吗?</div>
+ <div id="vArea" class="clearfix"><a id="high" count="2">高</a><a id="normal" count="1">一般</a><a id="Irrelevant" count="0">不相关</a>
+ <!--<span>感谢您的反馈!</span>--></div>
+ <script type="text/javascript">
+ (function(f, a) {
+ var e = document,
+ b = e.getElementsByTagName("head")[0] || e.documentElement;
+ var d = function(h, j) {
+ var i = e.createElement("script");
+ i.type = "text/javascript";
+ i.src = h;
+ var g;
+ i.onload = i.onreadystatechange = function() {
+ if (!g & amp; & amp;
+ (!this.readyState || this.readyState === "loaded" || this.readyState === "complete")) {
+ g = true;
+ if (j) {
+ j()
+ }
+ j = i.onload = i.onreadystatechange = null;
+ if (b & amp; & amp; i.parentNode) {
+ b.removeChild(i)
+ }
+ }
+ };
+ b.appendChild(i)
+ };
+ var c = function(g, h) {
+ g = "s_" + g.replace(/\.[^\.]+$/, "").replace(/[\.\-]/g, "__");
+ d("http://qt.gtimg.cn/q=" + g, function() {
+ var i = f["v_" + g];
+ if (i) {
+ i = i.split("~");
+ h(i[1])
+ }
+ })
+ };
+ if (a) {
+ window[a] = c
+ }
+ return c
+ })(this, "QQFIN_getName");
+
+
+
+ (function() {
+ var txt;
+
+ var obj = {};
+ //var stockURL="http://finance.qq.com/a/20130423/005484.htm?highlight=宁波联合&amp;stockcode=sh600051&amp;version=1#highlight=宁波联合";
+ //var stockURL="http://finance.qq.com/a/20130423/005484.htm";
+ var stockURL = window.location.href;
+ var stockIDs = stockURL.replace(/[?#]/gi, '&amp;').split("&amp;");
+ for (var i = 0; i & lt; stockIDs.length; i++) {
+ var a = stockIDs[i].split("=");
+ obj[a[0]] = a[1]
+ }
+ QQFIN_getName(obj["stockcode"], function(name) {
+ txt = name;
+ document.getElementById('test').innerHTML = txt + '(' + obj.stockcode + ')';
+ });
+ if (!obj["stockcode"] || !obj["version"]) {
+ document.getElementById("vote").style.display = "none";
+ } else {
+ document.getElementById("vote").style.display = "block";
+ var att;
+ var P = document.getElementById('vArea');
+ var list = P.getElementsByTagName('a');
+ for (var i = 0, len = list.length; i & lt; len; i++) {
+ var el = list[i];
+ el.onclick = function() {
+ att = parseInt(this.getAttribute('count'), 10);
+ document.getElementById("vArea").innerHTML = "&lt;span&gt;感谢您的反馈!&lt;/span&gt;"
+ s = new Image(1, 1);
+ s.src = "http://btrace.qq.com/collect?sIp=&amp;iQQ=" + getCookie1('uin') + "&amp;sBiz=&amp;sOp=&amp;iSta=&amp;iTy=1813&amp;iFlow=&amp;version=" + obj.version + "&amp;stockcode=" + obj.stockcode + "&amp;news=" + ARTICLE_INFO.id + "&amp;score=" + att;
+ }
+ };
+
+ function getCookie1(uin) {
+ var arr = document.cookie.split(';');
+ for (var i = 0; i & lt; arr.length; i++) {
+ if (uin == arr[i].split('=')[0].replace(/^\s*|\s*$/, '')) {
+ return parseInt(arr[i].split('=')[1].substring(1));
+ }
+ }
+ }
+
+ }
+ }())
+ </script>
+ </div>
+
+
+
+
+
+ <div id="tag_about"></div>
+
+
+ <script>
+ var g_official_account = 'qqtech';
+ </script>
+ <style>
+ #fmbloginfo,
+ #fmblogpop {
+ display: none;
+ }
+
+ .Tool-Article-QQ li {
+ position: relative;
+ }
+ </style>
+ <div class="Tool-Article-QQ cf" id="Tool-Article-QQ">
+
+ <div class="shareBtn h-shareBtn clearfix">
+ <div style="float:left;font-size: 14px;line-height: 27px;margin-right: 10px;">分享到: </div>
+ <div class="shareBtn-bd" style="float:left">
+ <ul class="shareBtn24">
+ <li><a href="javascript:void(0)" id="tmblogbt" class="s_weibo" bosszone="tmblog" alt="腾讯微博" title="腾讯微博" onclick="share2weibo.showPopup(this)">腾讯微博</a></li>
+ <li><a href="javascript:void(0)" class="s_qzone" bosszone="tqzone" onclick="share2qzone.showPopup(this)" alt="QQ空间" title="QQ空间">QQ空间</a></li>
+ <li><a href="javascript:void(0)" class="s_qq" bosszone="tqq" onclick="share2qq.showPopup(this)" alt="QQ好友" title="QQ好友">QQ好友</a></li>
+ <li><a href="javascript:void(0)" class="s_sina" bosszone="tsina" onclick="share2sina()" alt="新浪微博" title="新浪微博">新浪微博</a></li>
+ <li><a href="javascript:void(0)" class="s_ewm" bosszone="scan" alt="二维码" title="查看本文二维码" id="s_ewm">二维码</a></li>
+ <li><a href="javascript:void(0)" class="s_in" bosszone="tmlinkin" alt="领英分享" title="领英分享" data-node="shareLinkedIn">领英分享</a></li>
+ </ul>
+ </div>
+ </div>
+ </div>
+
+ <!-- 正文下广告 -->
+ <div class="ad-box ad-cnt-1">
+ <!--F_Z_Width1_div AD begin...."l=F_Z_Width1&log=off"-->
+ <div id="F_Z_Width1" style="width: 640px; height: 90px; display: block; position: relative;" class="l_qq_com" adconfig_lview="l.qq.com" adconfig_charset="gbk" adconfig_lview_template="//l.qq.com/lview?c=www&amp;loc={loc}" oid="2940207" display="third_party_script"><iframe src="//wa.gtimg.com/website/201610/jdhj_FZW_20161025102555.html?tclick=http%3A%2F%2Fc.l.qq.com%2Flclick%3Foid%3D2940207%26cid%3D1630355%26loc%3DF_Z_Width1%26click_data%3DdXNlcl9pbmZvPW9CM2pnVGc5RXgtXw%3D%3D%26soid%3DvgqjdmocWCKZrgDemgPRJ4fbAZve%26chl%3D13%26index%3D1%26page_type%3D2%26aver%3D0%26dtype%3D0" scrolling="no" marginwidth="0" marginheight="0" style="width:640px;height:90px;" frameborder="0"></iframe>
+ <div style="position: absolute; left: 0px; bottom: 0px; width: 26px; height: 16px; z-index: 12; background: transparent url(&quot;//ra.gtimg.com/web/res/icon/leftbottom_new.png&quot;) no-repeat scroll right top;"></div>
+ </div>
+ <!--F_Z_Width1 AD end -->
+ <!--[if !IE]>|xGv00|0465a81e1ed4117e717b8bd08107345a<![endif]-->
+ </div>
+ <!--[if !IE]>|xGv00|fbe148cba98afb599c2ec94c0e76d531<![endif]-->
+ <!--[if !IE]>|xGv00|0250f539d28fa7465a912366b513f302<![endif]-->
+ </div>
+ <!--main1-->
+ <!--inmain-->
+ <!--[if !IE]>|xGv00|34d857579e493799827ff492d8815349<![endif]-->
+ <!--[if !IE]>|xGv00|5761a355ac3b5471248e28ae5d7331e4<![endif]-->
+ </div>
+ </div>
+ <!--main2-->
+ <!--[if !IE]>|xGv00|7fa10ec151564ea7adca7543f65a53d2<![endif]-->
+ <script>
+ document.domain = 'qq.com';
+ cmt_site = 'tech';
+ cmt_id = 1576450358;
+ cmt_is_group = 0;
+ cmt_count_id = 'comment_count|comment_count2';
+ </script>
+ <!-- 新版评论 -->
+ <div id="tag_cmt" style="top:0"></div>
+ <iframe scrolling="no" id="commentIframe" style="width:640px;height:300px; overflow:hidden; margin-bottom:30px" frameborder="no"></iframe>
+ <script>
+ var registerCoralEvent = {
+ code: 1,
+ listHiden: ARTICLE_INFO.site.search(/news|finance|view/) == -1 ? 0 : 1,
+ loginEvent: function() {
+ //document.getElementById('onekey').onclick();
+ userLogin();
+ },
+ publicLogined: function(uin, nick, headUrl) {
+ var _ifr = document.getElementById('commentIframe');
+ if (typeof _ifr.contentWindow.publicLogined == 'function') document.getElementById('commentIframe').contentWindow.publicLogined(uin, nick, headUrl);
+ },
+ publicLogout: function() {
+ var _ifr = document.getElementById('commentIframe');
+ if (typeof _ifr.contentWindow.publicLogined == 'function') document.getElementById('commentIframe').contentWindow.publicLogout();
+ }
+ }
+
+
+ function crossAsynJson(url, fun, cb, charset) {
+ var script = document.createElement("script"),
+ head = document.getElementsByTagName('head')[0];
+ window[fun] = function(i) {
+ window[fun] = undefined;
+ try {
+ delete window[fun]
+ } catch (k) {}
+ cb(i);
+
+ head & amp; & amp;
+ setTimeout(function() {
+ head.removeChild(script)
+ }, 5)
+ };
+ charset & amp; & amp;
+ script.setAttribute('charset', charset);
+ script.setAttribute('src', url);
+ head.appendChild(script)
+ }
+
+ if (cmt_id & gt; 1e9) {
+
+ var cmt_ifr_url = 'http://coral.qq.com/article/' + cmt_id + '/commentnum?callback=_cbSum&amp;source=1&amp;t=' + Math.random();
+ crossAsynJson(cmt_ifr_url, '_cbSum', function(data) {
+ if (arguments[0].errCode == 0) {
+
+ document.getElementById("cmt_1").href = 'http://coral.qq.com/' + cmt_id;
+ document.getElementById("top_count").innerHTML = arguments[0].data.commentnum; //总贴数
+
+ }
+
+
+ });
+ }
+
+
+ var ifr_cmt = UI.G('commentIframe'),
+ ifr_cmt_status = 0,
+ uin, nick, Face;
+
+
+ var loadIfra = function() {
+ ifr_cmt_status = 1;
+ ifr_cmt.style.display = 'block';
+ ifr_cmt.src = 'http://www.qq.com/coral/coralBeta3/coralMainDom3.0.htm';
+
+ if (ifr_cmt.attachEvent) {
+ ifr_cmt.attachEvent("onload", function() {
+ if (ifr_cmt_status & amp; & amp; document.getElementById('commentIframe') & amp; & amp; nick) {
+ registerCoralEvent.publicLogined(uin, nick, Face);
+ }
+ });
+ } else {
+ ifr_cmt.onload = function() {
+ if (ifr_cmt_status & amp; & amp; document.getElementById('commentIframe') & amp; & amp;  nick) {
+ registerCoralEvent.publicLogined(uin, nick, Face);
+ }
+ };
+ }
+ }
+
+ UI.EA(window, 'load', function() {
+ //参数设置
+ uin = MI.AccountInfo.uin || (UI.cookie("uin") & amp; & amp; UI.cookie("uin").substring(1)) || '', nick = MI.S('account_mbnick_' + uin) || '', Face = 'http://mat1.gtimg.com/news/dc/images/user.png';
+
+ var winH = UI.windowHeight(),
+ ifrH = UI.getY(ifr_cmt);
+
+ if (ifrH & lt; winH) {
+
+ loadIfra();
+ }
+
+ function commentNumber() {
+ var infoBg = document.getElementById('infoCommBg');
+ var cnNumber = document.getElementById('top_count');
+ var numbers = Number(cnNumber.innerHTML);
+ if (numbers & gt; 0 & amp; & amp; numbers & lt; = 99) {
+ infoBg.className = 'infoComm_B';
+ return;
+ }
+ if (numbers & gt; = 100 & amp; & amp; numbers & lt; = 299) {
+ infoBg.className = 'infoComm_C';
+ return;
+ }
+ if (numbers & gt; = 300 & amp; & amp; numbers & lt; = 499) {
+ infoBg.className = 'infoComm_D';
+ return;
+ }
+ if (numbers & gt; = 500) {
+ infoBg.className = 'infoComm_E';
+ return;
+ }
+ }
+ commentNumber()
+ });
+
+ UI.EA(window, 'scroll', function() {
+
+ var t = UI.scrollY();
+ //推荐浮层
+ var winH = UI.windowHeight(),
+ ifrH = UI.getY(ifr_cmt);
+ if (!ifr_cmt_status & amp; & amp; t + winH + 500 & gt; ifrH) {
+ loadIfra();
+ }
+ });
+ </script>
+ <!--[if !IE]>|xGv00|96f6659f7c9c6f7997bbb88552d69215<![endif]-->
+
+
+ <!--[if !IE]>|xGv00|3371fee675c4e0a4f4350f3eae7aa07e<![endif]-->
+ <!--挑战编辑部-->
+
+
+ <div class="moreBtn moreBtnA">
+ <h2><a href="#" target="_blank" id="moreComment" bosszone="commore">更多评论</a></h2>
+ </div>
+ <!--[if !IE]>|xGv00|c11ec3164eceddb89333194174c2b701<![endif]-->
+ <!--[if !IE]>|xGv00|e6d087a7dc5ee0c3595492964218b5a2<![endif]-->
+ <script type="text/javascript">
+ var whatCatalog = "web"
+ </script>
+ <!--js1-->
+ <script>
+ try {
+ QosS.topSpan("news_bottom", 200);
+ } catch (e) {}
+ </script>
+ <!--ol20130819-->
+ <!--pgv 20160801 by 39815-->
+ <script charset="gbk" src="http://pingjs.qq.com/ping.js"></script>
+
+ <script>
+ ! function(t, e) {
+ "use strict";
+
+ function a() {
+ var t, e, a = ("" + p.catalog_full).replace(/-/g, ".").replace(/_/g, "-");
+ p.topic & amp; & amp;
+ p.topic.name & amp; & amp;
+ p.topic.name.length & gt;
+ 0 ? (t = "L.", e = "Z." + a + "." + p.topic.name) : (t = "L." + a, e = "Z.");
+ var n = "W." + p.type,
+ o = "M." + p.tpl.type + p.tpl.stype,
+ i = "P." + ("" + p.site).replace(/_/g, "-"),
+ c = "F." + f,
+ l = t + "_" + e + "_" + n + "_" + o + "_" + i + "_" + c;
+ l & amp; & amp;
+ r({
+ pgUserType: l
+ })
+ }
+
+ function n(t) {
+ o(e, "click", function(e) {
+ var a = e.target;
+ "img" === a.tagName & amp; & amp;
+ (a = a.parentNode);
+ var n = a.tagName.toLowerCase(),
+ o = a.getAttribute("href");
+ if (!o || o.indexOf("qqcom_pgv_from=") & gt; - 1) return !1;
+ if ("a" === n & amp; & amp; a.hostname & amp; & amp; a.hostname.indexOf("qq.com") & gt; - 1) {
+ var r = o + (a.search ? "&amp;" : "?") + "qqcom_pgv_from=" + t;
+ a.setAttribute("href", r)
+ }
+ })
+ }
+
+ function o(a, n, o) {
+ var r = function(a) {
+ return a = a || t.event, a.target || (a.target = a.srcElement || e), 3 === a.target.nodeType & amp; & amp;
+ (a.target = a.target.parentNode), a
+ };
+ return a.addEventListener ? a.addEventListener(n, function(t) {
+ o.call(t.currentTarget, r(t))
+ }, !1) : a.attachEvent("on" + n, function(t) {
+ o.call(a, r(t))
+ }), !0
+ }
+ if (!t || !t.location || "function" != typeof t.pgvMain) return !1;
+ var r = function() {
+ var e = arguments;
+ setTimeout(function() {
+ t.pgvMain.apply(this, e)
+ }, 0)
+ },
+ i = location.search.replace(/adtag=client\.qq\.\d+_\.0/i, "from=tips"),
+ c = ["aio", "tips"],
+ f = "def";
+ location.search.indexOf("qqcom_pgv_from=") & gt; - 1 & amp; & amp;
+ (f = location.host + location.pathname + location.search);
+ var p = t.ARTICLE_INFO || null,
+ l = p & amp; & amp;
+ p.catalog_full;
+ if (l)
+ for (var g = 0; g & lt; c.length; g += 1)
+ if (i.indexOf(c[g]) & gt; - 1) {
+ n(c[g]);
+ break
+ }
+ l & amp; & amp;
+ a(), l || ("undefined" != typeof whatCatalog & amp; & amp;
+ (t.pvCSTM = t.whatCatalog), r({
+ pgUserType: "F." + f
+ }))
+ }(window, document);
+ </script>
+ <!--/pgv 20160801-->
+ <!-- 视频来源ptag -->
+ <script src="http://mat1.gtimg.com/v/ptag/ptag_1.2.js" async="true"></script>
+ <!--[if !IE]>|xGv00|f3e03201190b3625764e435221a2d6a1<![endif]-->
+ <!--[if !IE]>|xGv00|e495268dae03726664c77551e8df25e2<![endif]-->
+ <!--[if !IE]>|xGv00|d9b659574fdddcc561d144559cab7281<![endif]-->
+ <!--[if !IE]>|xGv00|17533da954b5ad55f4f12502751b7ccc<![endif]-->
+ </div>
+ <div class="side" id="sideBars">
+ <!-- 科技视频 -->
+ <!--include virtual="/clear_article_qq/clear_sidebar_article_qq/video_mod.htm"-->
+
+ <!-- 栏目精粹 -->
+ <style type="text/css">
+ .video-air-mod {
+ margin: 10px auto;
+ }
+
+ .video-air-mod .hd {
+ border-bottom: 1px #d1d1d1 solid;
+ height: 28px;
+ position: relative;
+ margin-bottom: 18px;
+ overflow: visible;
+ }
+
+ .video-air-mod .hd h2 {
+ color: #000;
+ font-family: "\5FAE\8F6F\96C5\9ED1";
+ font-size: 18px;
+ height: 25px;
+ width: 83px;
+ position: absolute;
+ top: 3px;
+ left: 0;
+ border-bottom: 1px #636363 solid;
+ }
+
+ .video-air-mod .bd {
+ width: 300px;
+ overflow: hidden;
+ }
+
+ .video-air-mod .bd ul {
+ width: 320px;
+ }
+
+ .video-air-mod .bd li {
+ width: 140px;
+ float: left;
+ padding-bottom: 10px;
+ margin-right: 20px;
+ text-align: left;
+ font-size: 12px;
+ color: #333;
+ position: relative;
+ }
+
+ .video-air-mod .bd li img {
+ display: block;
+ margin-bottom: 5px;
+ width: 140px;
+ height: 80px;
+ }
+
+ .video-air-mod .bd li a {
+ font-size: 12px;
+ color: #333;
+ }
+
+ .video-air-mod .bd li a:hover {
+ color: #c00;
+ }
+ </style>
+ <div class="video-air-mod mod-side mar-b-18" bosszone="techaio_video">
+ <div class="hd">
+ <h2>栏目精粹</h2>
+ </div>
+ <div class="bd">
+ <ul class="piclist clearfix">
+ <li bosszone="vnews3">
+ <!-- 自媒体 -->
+ <a target="_blank" href="http://tech.qq.com/a/20161027/007068.htm"><img src="http://img1.gtimg.com/tech/pics/hv1/251/244/2150/139866221.jpg" alt="Apple Watch销量大跌72%:背后有哪些原因?" />Apple Watch销量大跌72%:背后有哪些原因?</a>
+ <!--[if !IE]>|xGv00|c021e6526540052884c5e0e108da0156<![endif]-->
+ </li>
+ <li bosszone="vnews1">
+ <!-- 好多娱 -->
+ <a target="_blank" href="http://tech.qq.com/a/20160829/003655.htm"><img src="http://img1.gtimg.com/tech/pics/hv1/235/52/2121/137931520.png" alt="从电视到互联网:湖南广电能否再次崛起?" />从电视到互联网:湖南广电能否再次崛起?</a>
+ <!--[if !IE]>|xGv00|0e3a52331183a2fd936225bd7ea93705<![endif]-->
+ </li>
+ <li bosszone="vnews4">
+ <!-- VR次元 -->
+ <a target="_blank" href="http://tech.qq.com/a/20161025/023092.htm"><img src="http://img1.gtimg.com/tech/pics/hv1/118/127/2146/139576153.png" alt="暴风魔镜在“激进”的路上摔了一跤" />暴风魔镜在“激进”的路上摔了一跤</a>
+ <!--[if !IE]>|xGv00|39f2a0bd07781032f6fd2b66d818e745<![endif]-->
+ </li>
+ <li bosszone="vnews2">
+ <!-- 深网 -->
+ <a target="_blank" href="http://tech.qq.com/original/sw/i27.html"><img src="http://img1.gtimg.com/ninja/1/2016/10/ninja147760781030421.jpg" alt="58赶集为何驶入新的赛道?" />58赶集为何驶入新的赛道?</a>
+ <!--[if !IE]>|xGv00|8b3c63786e14ee69065e7f0f928db804<![endif]-->
+ </li>
+ </ul>
+ </div>
+ </div>
+ <!--[if !IE]>|xGv00|54bff80637809ae774f0810fa4bffe41<![endif]-->
+
+ <!--14.12.10新增广告_擎天柱广告-->
+ <div class="article_ad mar-b-10">
+ <!--F_Rectangle_N_div AD begin...."l=F_Rectangle_N&log=off"-->
+ <div id="F_Rectangle_N" style="width: 300px; height: 600px; display: block; position: relative;" class="l_qq_com" adconfig_lview="l.qq.com" adconfig_charset="gbk" adconfig_lview_template="//l.qq.com/lview?c=www&amp;loc={loc}" oid="2989443" display="third_party_script"><iframe src="//wa.gtimg.com/website/201606/tbzg_FRN_20160616120512.html?tclick=http%3A%2F%2Fc.l.qq.com%2Flclick%3Foid%3D2989443%26cid%3D1453491%26loc%3DF_Rectangle_N%26click_data%3DdXNlcl9pbmZvPW9CM2pnVGc5RXgtXw%3D%3D%26soid%3DvgqjdmocWCKZrgDemgSR3SmhAZve%26chl%3D13%26index%3D1%26page_type%3D2%26dtype%3D0" scrolling="no" marginwidth="0" marginheight="0" style="width:300px;height:600px;" frameborder="0"></iframe>
+ <div style="position: absolute; left: 0px; bottom: 0px; width: 26px; height: 16px; z-index: 12; background: transparent url(&quot;//ra.gtimg.com/web/res/icon/leftbottom_new.png&quot;) no-repeat scroll right top;"></div>
+ </div>
+ <!--F_Rectangle_N AD end -->
+ <!--[if !IE]>|xGv00|06c8fe2898bcb36e5bd668b9d4843466<![endif]-->
+ </div>
+ <!--[if !IE]>|xGv00|c48037564e9c9240f1cd28d314f4b278<![endif]-->
+
+ <!--热门评论-->
+ <style>
+ .place-Article-QQ {
+ width: 300px;
+ margin: 0 auto 0px;
+ }
+
+ .place-Article-QQ .bd {
+ border: none;
+ }
+
+ .place-Article-QQ .hd {
+ background: none;
+ height: auto;
+ }
+
+ .place-Article-QQ .hd h2 {
+ font-family: 微软雅黑;
+ font-size: 20px;
+ color: #000;
+ float: none;
+ padding-left: 0;
+ }
+
+ .borderHd {
+ background: #d1d1d1;
+ height: 1px;
+ overflow: hidden;
+ }
+
+ .borderHdN {
+ background: #636363;
+ height: 1px;
+ overflow: hidden;
+ }
+
+ #rightList .commentHd {
+ height: auto;
+ }
+
+ .conUse {
+ margin-top: 15px;
+ padding-bottom: 0px;
+ border-bottom: 1px dotted #b8b9b9;
+ overflow: hidden;
+ }
+
+ .commentHd .userPic {
+ float: left;
+ overflow: hidden;
+ margin-right: 15px;
+ margin-top: 4px
+ }
+
+ .commentHd .userInfo {
+ float: left;
+ overflow: hidden;
+ padding-left: 12px;
+ clear: right
+ }
+
+ .commentHd .userPic img {
+ border-radius: 5px
+ }
+
+ .commentHd .userName {
+ font-size: 14px;
+ font-weight: bold;
+ padding: 0 5px 3px 0px;
+ color: #455c85;
+ line-height: 19px;
+ height: 19px;
+ display: block
+ }
+
+ .commentHd .userName a {
+ margin-right: 10px;
+ color: #666;
+ }
+
+ .commentHd .userName a:hover {
+ color: #cc0000
+ }
+
+ .commentHd span {
+ float: left
+ }
+
+ .commentHd .ucontent {
+ font-size: 14px;
+ color: #222;
+ line-height: 24px
+ }
+
+ .commentHd .ucontent a {
+ color: #666;
+ font-weight: 800;
+ }
+
+ .commentBd {
+ color: #8c8d8e;
+ margin-top: 10px;
+ height: 30px
+ }
+
+ .commentBd p.postInfo {
+ height: 24px;
+ line-height: 24px;
+ overflow: visible;
+ }
+
+ .commentBd p.postInfo a {
+ float: right;
+ padding-right: 15px
+ }
+
+ .commentBd p.postInfo .upNum {
+ color: #8c8d8e;
+ font-weight: 800;
+ padding-left: 20px;
+ background: url(http://mat1.gtimg.com/digi/2012/shuma2012/backbg.png) 0px -47px no-repeat;
+ position: relative
+ }
+
+ .commentBd p.postInfo .upNum span {
+ position: absolute;
+ left: 13px;
+ bottom: 18px;
+ color: #ff9000;
+ font-family: Arial;
+ font-weight: 800;
+ font-size: 11px;
+ filter: alpha(opacity=0);
+ opacity: 0
+ }
+
+ .commentBd p.postInfo .upNum:hover {
+ background-position: 0px -72px;
+ color: #ff9000
+ }
+
+ .commentBd p.postInfo .zhuanbo {
+ background: url(http://mat1.gtimg.com/digi/2012/shuma2012/backbg.png) 0px -98px no-repeat;
+ width: 15px;
+ height: 20px;
+ text-indent: -10000px
+ }
+
+ .commentBd p.postInfo .zhuanbo:hover {
+ background-position: 0 -122px
+ }
+
+ .commentBd p.postInfo .pinglun {
+ background: url(http://mat1.gtimg.com/digi/2012/shuma2012/backbg.png) 0px -18px no-repeat;
+ width: 15px;
+ height: 20px;
+ text-indent: -10000px;
+ padding-right: 0px
+ }
+
+ .commentBd p.postInfo .pinglun:hover {
+ background-position: 0 5px
+ }
+
+ .userTime {
+ display: inline-block;
+ font-size: 12px;
+ color: #8d8d8d;
+ padding: 0 3px 0 0;
+ line-height: 20px;
+ height: 20px;
+ *margin-top: 0px;
+ vertical-align: top;
+ }
+
+ .userTime a {
+ color: #8c8d8e
+ }
+
+ .uesrUp {
+ font-size: 12px;
+ display: inline-block;
+ line-height: 20px;
+ color: #8c8d8e;
+ font-weight: bold;
+ margin-left: 10px
+ }
+
+ .commentCon {
+ font-size: 14px;
+ color: #222
+ }
+
+ .commentCon p {
+ padding: 12px 0px 0px 0px;
+ clear: both;
+ line-height: 26px
+ }
+
+ p.fromComment {
+ padding-top: 5px;
+ font-size: 12px;
+ line-height: 20px;
+ color: #8c8d8e;
+ margin-top: -30px
+ }
+
+ .commentCon p.fromComment a:hover {
+ color: #cc0000
+ }
+
+ .fromComment span {
+ color: #8d8d8d;
+ }
+
+ .fromComment a,
+ .fromComment a:visited,
+ .fromComment a:link,
+ .fromComment a:hover {
+ color: #8c8d8e;
+ }
+
+ .newspl1 .plDinfo .commt-sub {
+ margin-right: 58px
+ }
+
+ .hotA li {
+ padding: 0px;
+ width: 300px;
+ padding-bottom: 14px;
+ margin-top: 15px
+ }
+
+ .hotA li .pica {
+ float: left;
+ width: 92px;
+ margin-top: 4px
+ }
+
+ .hotA li .pica img {
+ border: 1px solid #e1e1e1
+ }
+
+ .hotA li .infoo {
+ float: right;
+ width: 195px;
+ display: inline
+ }
+
+ .hotA li .infoo a {
+ float: none;
+ width: auto;
+ display: block;
+ font-size: 14px;
+ color: #333;
+ line-height: 24px
+ }
+
+ .hotA li .infoo a:hover {
+ color: #cc0000
+ }
+
+ .hotA li .infoo span {
+ color: #8d8d8d;
+ margin-top: 2px;
+ display: block
+ }
+
+ .shareBtn {
+ float: right;
+ background: url(http://mat1.gtimg.com/digi/dc_new/icon_share.png) no-repeat 0 2px;
+ display: inline-block;
+ padding: 0 20px 20px;
+ }
+
+ .page-Article-QQ span {
+ background: #f6b433;
+ width: 30px;
+ height: 30px;
+ background: #f6b433;
+ line-height: 30px;
+ font-size: 14px
+ }
+
+ .page-Article-QQ a {
+ background: none;
+ border: 1px solid #dedede;
+ width: 28px;
+ height: 28px;
+ line-height: 28px;
+ font-size: 14px;
+ color: #000
+ }
+
+ .page-Article-QQ span.next,
+ .page-Article-QQ a.next {
+ background: none;
+ width: 60px;
+ height: 30px;
+ line-height: 30px
+ }
+
+ .page-Article-QQ span.next {
+ border: 1px solid #dedede;
+ }
+
+ .last {
+ border: none
+ }
+
+ .hotA {
+ margin-bottom: 10px;
+ margin-top: 10px
+ }
+
+ #changeName span.userTime a {
+ color: #666
+ }
+
+ #changeName span.userTime a:hover {
+ color: #cc0000
+ }
+
+ #hot_area,
+ #latest_area {
+ display: none
+ }
+
+ #pop_rightreply {
+ width: 630px
+ }
+
+ #rightList .bordernone {
+ border: none
+ }
+ </style>
+
+
+ <div bosszone="cardTop" class="mod-right place-Article-QQ" id="soHot" style="display:none;margin-top:10px">
+ <div class="hd">
+ <h2>热门评论</h2>
+ <div class="borderHd">
+ <div class="borderHdN"></div>
+ </div>
+ </div>
+ <!-- /hd -->
+
+ <style>
+ #rightList a.shafas {
+ font-size: 14px;
+ display: block;
+ color: #333;
+ margin-top: 20px;
+ padding: 20px 20px 20px 40px;
+ background: url(http://mat1.gtimg.com/digi/2012/shuma2013/shafa.png) 0px 14px no-repeat;
+ display: none;
+ float: left;
+ cursor: pointer
+ }
+
+ #rightList a.shafas:hover {
+ color: #cc0000;
+ text-decoration: none
+ }
+
+ #rightList .commentBd {
+ margin-top: 0px;
+ padding-top: 10px
+ }
+
+ #rightList .commentHd .ucontent {
+ cursor: pointer
+ }
+
+ #rightList .conUse span.dot {
+ background: url(http://mat1.gtimg.com/digi/2012/shuma2013/xialasanjiao.gif) center 2px no-repeat;
+ height: 10px;
+ line-height: 48px;
+ display: none;
+ margin-top: -30px;
+ overflow: hidden
+ }
+ </style>
+
+
+ <div class="bd" id="comment-side-link">
+
+ <div id="rightList">
+
+ <a class="shafas">暂无热评,快来抢沙发&gt;&gt;</a>
+
+ </div>
+
+ </div>
+ <!-- /bd -->
+ </div>
+
+ <!--[if !IE]>|xGv00|d9ef1944a413e87b2ae2ff9e4c858578<![endif]-->
+
+ <!--小小说广告-->
+ <!--include virtual="/clear_article_qq/clear_ad_article_qq/ad_xxskj.htm"-->
+
+ <!--苹果WWDC广告-->
+ <!--include virtual="/clear_article_qq/clear_sidebar_article_qq/towwdc.htm"-->
+
+ <!--编辑推荐-->
+ <div class="mod-right place-Article-QQ hotA" bosszone="bjRE">
+ <div class="hd">
+ <h2>推荐阅读</h2>
+ <div class="borderHd">
+ <div class="borderHdN"></div>
+ </div>
+ </div>
+ <!-- /hd -->
+
+ <div class="bd" id="comment-side-link">
+ <ul bosszone="bjRE">
+ <li>
+ <a class="pica" target="_blank" href="/a/20161025/023092.htm"><img src="http://img1.gtimg.com/tech/pics/hv1/118/127/2146/139576153.png" height="67" width="90" /></a>
+ <div class="infoo"><a target="_blank" href="/a/20161025/023092.htm">暴风魔镜在“激进”的路上摔了一跤</a></div>
+ </li>
+ <li>
+ <a class="pica" target="_blank" href="/a/20161018/038534.htm"><img src="http://img1.gtimg.com/tech/pics/hv1/227/246/2143/139411532.jpg" height="67" width="90" /></a>
+ <div class="infoo"><a target="_blank" href="/a/20161018/038534.htm">想走进《西部世界》的“世界”吗?HBO用VR带你穿越</a></div>
+ </li>
+ <li>
+ <a class="pica" target="_blank" href="/a/20161020/005869.htm"><img src="http://img1.gtimg.com/tech/pics/hv1/122/246/2143/139411427.jpg" height="67" width="90" /></a>
+ <div class="infoo"><a target="_blank" href="/a/20161020/005869.htm">最爱炫技的广告人,现在对VR的态度也变得谨慎起来</a></div>
+ </li>
+ <li>
+ <a class="pica" target="_blank" href="/a/20160912/039978.htm"><img src="http://img1.gtimg.com/tech/pics/hv1/173/56/2128/138387653.png" height="67" width="90" /></a>
+ <div class="infoo"><a target="_blank" href="/a/20160912/039978.htm">它可能是目前最逼真的VR历史纪录片 我们离“战争”是如此近</a></div>
+ </li>
+ <li style="border:none">
+ <a class="pica" target="_blank" href="/a/20160829/003655.htm"><img src="http://img1.gtimg.com/tech/pics/hv1/235/52/2121/137931520.png" height="67" width="90" /></a>
+ <div class="infoo"><a target="_blank" href="/a/20160829/003655.htm">从电视到互联网:湖南广电能否再次崛起?</a></div>
+ </li>
+ </ul>
+ <!--[if !IE]>|xGv00|e5af464b992c60232bd5310f3e985f31<![endif]-->
+ </div>
+ </div>
+ <!--[if !IE]>|xGv00|570c54769afa8f59709d9d19ecf5dacc<![endif]-->
+
+ <style type="text/css">
+ .yxtj-mod .hd {
+ font-family: '微软雅黑', '黑体', Tahoma, Verdana, "宋体";
+ font-size: 18px;
+ color: #000;
+ line-height: 29px;
+ border-bottom: 1px solid #D1D1D1;
+ overflow: visible;
+ margin-bottom: 20px;
+ }
+
+ .yxtj-mod .hd h2 {
+ width: 83px;
+ border-bottom: 1px solid #636363;
+ margin-bottom: -1px;
+ }
+
+ .yxtj-mod dl {
+ margin-bottom: 15px;
+ clear: both;
+ overflow: hidden;
+ border-bottom: 1px dotted #DCDCDC;
+ padding-bottom: 14px;
+ zoom: 1;
+ }
+
+ .yxtj-mod dl dt {
+ float: left;
+ margin-right: 15px;
+ }
+
+ .yxtj-mod a {
+ color: #333;
+ }
+
+ .yxtj-mod a:hover {
+ color: #cc0000;
+ }
+ </style>
+ <!--游戏推荐-->
+ <!--include virtual="/c/yxtjMod.htm"-->
+
+ <!--快报-->
+ <style type="text/css">
+ .right-kb-mod .hd {
+ border-bottom: 1px solid #D1D1D1;
+ padding-bottom: 5px;
+ }
+
+ .right-kb-mod .hd h2,
+ .right-kb-mod .hd h2 strong a {
+ font: 18px/20px '\5FAE\8F6F\96C5\9ED1'!important;
+ }
+
+ .right-kb-mod .txt {
+ display: block!important;
+ height: auto!important;
+ padding-left: 0!important;
+ white-space: normal!important;
+ }
+
+ .right-kb-mod .bd .txt p a,
+ .right-kb-mod .bd .list li a {
+ font-size: 12px!important;
+ }
+ </style>
+ <!-- 快报模块 -->
+ <style type="text/css">
+ .right-kb-mod {
+ width: 300px;
+ margin: 0 auto;
+ padding: 15px 0 20px;
+ display: none
+ }
+
+ #kbContB {
+ display: none;
+ }
+
+ .right-kb-mod .hd {
+ margin: 0 auto 18px;
+ }
+
+ .right-kb-mod .hd h2 {
+ font: 16px/18px '\5FAE\8F6F\96C5\9ED1';
+ color: #a6a6a6;
+ position: relative;
+ }
+
+ .right-kb-mod .hd h2 strong {
+ margin-right: 8px
+ }
+
+ .right-kb-mod .hd h2 strong a {
+ font: 16px/18px '\5FAE\8F6F\96C5\9ED1';
+ color: #399deb;
+ }
+
+ .right-kb-mod .hd h2 #kbBtn {
+ width: 12px;
+ height: 12px;
+ background: url(http://mat1.gtimg.com/www/images/dc/kbSxBtn.png) no-repeat 0 0;
+ _background: none;
+ _filter: progid: DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=scale, src="http://mat1.gtimg.com/www/images/dc/kbSxBtn.png");
+ position: absolute;
+ top: 4px;
+ right: 0;
+ font: 12px/500px 'arial';
+ overflow: hidden;
+ cursor: pointer;
+ }
+
+ .right-kb-mod .bd .pt {
+ height: 72px;
+ overflow: hidden;
+ margin-bottom: 8px;
+ }
+
+ .right-kb-mod .bd .pic {
+ float: left;
+ margin-right: 15px;
+ width: 108px;
+ }
+
+ .right-kb-mod .bd .txt {
+ width: 176px;
+ float: left;
+ }
+
+ .right-kb-mod .bd .txt p a {
+ font: 600 14px/24px '\5B8B\4F53';
+ color: #3b639f;
+ }
+
+ .right-kb-mod .bd .txt p a:hover {
+ color: #cd0000;
+ }
+
+ .right-kb-mod .bd .list li {
+ float;
+ left;
+ height: 28px;
+ overflow: hidden;
+ }
+
+ .right-kb-mod .bd .list li a {
+ font: 14px/28px '\5B8B\4F53';
+ color: #555;
+ }
+
+ .right-kb-mod .bd .list li a:hover {
+ color: #cd0000;
+ }
+
+ .right-kb-mod .hd h2 .kbxzBtn {
+ position: absolute;
+ top: 0;
+ right: 0;
+ }
+
+ .right-kb-mod .hd h2 .kbxzBtn a {
+ color: #399de9;
+ font: 600 14px/18px 'arial', '\5B8B\4F53';
+ padding-left: 17px;
+ background: url(http://mat1.gtimg.com/www/images/dc/kbxzIcon.png) no-repeat 0 2px;
+ }
+ </style>
+ <div class="right-kb-mod" id="kbMod">
+ <div class="hd">
+ <h2><strong><a href="http://kb.qq.com" target="_blank" bosszone="kuaibao_rukou">快报</a></strong><span class="kbxzBtn"><a href="http://kuaibao.qq.com/" target="_blank" bosszone="kuaibao_download">下载快报APP</a></span></h2>
+ </div>
+ <div class="bd" bosszone="kuaibao_titles">
+ <div id="kbContA">
+ <div class="pt clearfix">
+ <div class="pic">
+ <a href="http://kb.qq.com/article.htm?id=20160530A02TGB00&amp;commentid=1417406250" target="_blank"><img alt="彭德怀有没有打过金日成耳光?" src="http://inews.gtimg.com/newsapp_ls/0/325115313_150120/0" height="70" width="108" /></a>
+ </div>
+ <div class="txt">
+ <p><a href="http://kb.qq.com/article.htm?id=20160530A02TGB00&amp;commentid=1417406250" target="_blank">彭德怀有没有打过金日成耳光?</a></p>
+ </div>
+ </div>
+ <div class="list clearfix">
+ <ul>
+ <li><a target="_blank" href="http://kb.qq.com/article.htm?id=20160530A00V1D00&amp;commentid=1417170599">看了这些通信人工资单,你还熬得下去吗?</a></li>
+ <li><a target="_blank" href="http://kb.qq.com/article.htm?id=20160530A02P7M00&amp;commentid=1417392893">红军长征:中共能突围因国民党“放水</a></li>
+ <li><a target="_blank" href="http://kb.qq.com/article.htm?id=20160530A02OYM00&amp;commentid=1417391812">华为Mate 8成功的内外因素是什么?</a></li>
+ <li><a target="_blank" href="http://kb.qq.com/article.htm?id=20160530A02PFS00&amp;commentid=1417393827">【微资讯】新鲜 | 全球首个大型科幻主题公园落户贵阳!带你看看到底有多炫?</a></li>
+ <li><a target="_blank" href="http://kb.qq.com/article.htm?id=20160530A02MUC00&amp;commentid=1417383105">5.30非农来袭白银何故暴跌,多单被套何解?</a></li>
+ <li><a target="_blank" href="http://kb.qq.com/article.htm?id=20160530A00NYQ00&amp;commentid=1417143252">手机九大反人类设计,不仅仅是脑残可以解释的</a></li>
+ <li><a target="_blank" href="http://kb.qq.com/article.htm?id=20160530A02L1800&amp;commentid=1417376478">你们语音控制算神马,谷歌让你还可以手势控制!</a></li>
+ <li><a target="_blank" href="http://kb.qq.com/article.htm?id=20160530A02LK500&amp;commentid=1417378248">宋美龄美丽聪明气质雍容华贵,但有个不良嗜好却让蒋介石深恶痛绝</a></li>
+ <li><a target="_blank" href="http://kb.qq.com/article.htm?id=20160530A02ISH00&amp;commentid=1417369573">突破盘局: 大盘将迎真正的机遇!</a></li>
+ </ul>
+ </div>
+ </div>
+ <!--[if !IE]>|xGv00|a1702efa5f8ca0dc2ccb35820f1b7058<![endif]-->
+ </div>
+ </div>
+ <!--[if !IE]>|xGv00|18343840b22a73cfb670078ae17bf71a<![endif]-->
+
+ <!--热评文章-->
+ <style>
+ .place-Article-QQ .bd {
+ border: none;
+ }
+
+ .place-Article-QQ .hd {
+ background: none;
+ height: auto;
+ }
+
+ .place-Article-QQ .hd h2 {
+ font-family: 微软雅黑;
+ color: #000;
+ float: none;
+ }
+
+ .borderHd {
+ background: #d1d1d1;
+ height: 1px;
+ overflow: hidden;
+ }
+
+ .borderHdN {
+ background: #636363;
+ height: 1px;
+ overflow: hidden;
+ width: 83px;
+ }
+ </style>
+ <div class="mod-right place-Article-QQ rdwpTitle" bosszone="hotArticle" style="margin-top:10px">
+ <div class="hd">
+ <h2>热评文章</h2>
+ <div class="borderHd">
+ <div class="borderHdN"></div>
+ </div>
+ </div>
+ <div id="tabBody" class="bd">
+ <ol class="" bosszone="hotcommNews"></ol>
+ <!--[if !IE]>|xGv00|de79eeaafa5e08cda7222d9a2e5599d5<![endif]-->
+
+ </div>
+ </div>
+ <!--[if !IE]>|xGv00|3d8ff6fbc5522e28865fff280d0535d4<![endif]-->
+
+ <!--14.12.10新增广告_右边竖栏广告-->
+ <div class="article_ad mar-b-10">
+ <!--$loc$_div AD begin...."l=$loc$&log=off"-->
+ <div id="QQcom_all_Rectangle:1" data-loc="QQcom_all_Rectangle" data-index="1" style="height: 250px; display: block; width: 300px; position: relative;" class="l_qq_com" adconfig_lview="l.qq.com" adconfig_charset="gbk" adconfig_lview_template="//l.qq.com/lview?c=www&amp;loc={loc}" oid="2994193" display="banner">
+ <a href="http://c.l.qq.com/lclick?oid=2994193&amp;cid=1647731&amp;loc=QQcom_all_Rectangle&amp;click_data=dXNlcl9pbmZvPW9CM2pnVGc5RXgtXw==&amp;soid=vgqjdmocWCKZrgDemgJRgmarAZve&amp;chl=13&amp;index=1&amp;page_type=2&amp;dtype=0" target="_blank" style="display:block;cursor:pointer;width:300px;height:250px;background-image:url(//wa.gtimg.com/website/201611/Ozdxmz_QaR_20161108101016.jpg);background-size:300px 250px;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='//wa.gtimg.com/website/201611/Ozdxmz_QaR_20161108101016.jpg',sizingMethod='scale');"></a>
+ <a class="absolute a_cover" href="http://c.l.qq.com/lclick?oid=2994193&amp;cid=1647731&amp;loc=QQcom_all_Rectangle&amp;click_data=dXNlcl9pbmZvPW9CM2pnVGc5RXgtXw==&amp;soid=vgqjdmocWCKZrgDemgJRgmarAZve&amp;chl=13&amp;index=1&amp;page_type=2&amp;dtype=0&amp;k=DeepMind%E6%96%B0%E7%94%B5%E8%84%91%E5%B7%B2%E5%8F%AF%E5%88%A9%E7%94%A8%E8%AE%B0%E5%BF%86%E8%87%AA%E5%AD%A6%20%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD%E8%BF%88%E4%B8%8A%E6%96%B0%E5%8F%B0%E9%98%B6&amp;t=DeepMind%E6%96%B0%E7%94%B5%E8%84%91%E5%B7%B2%E5%8F%AF%E5%88%A9%E7%94%A8%E8%AE%B0%E5%BF%86%E8%87%AA%E5%AD%A6%20%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD%E8%BF%88%E4%B8%8A%E6%96%B0&amp;r=&amp;s=" target="_blank" rel="nofollow" style="position:absolute;width:300px;height:250px;left:0px;top:0px;cursor:pointer;z-index:10;background-color:#fff;filter:alpha(opacity=0);opacity:0;"></a>
+ <div style="position: absolute; left: 0px; bottom: 0px; width: 26px; height: 16px; z-index: 12; background: transparent url(&quot;//ra.gtimg.com/web/res/icon/leftbottom_new.png&quot;) no-repeat scroll right top;"></div>
+ </div>
+ <!--$loc$ AD end -->
+ <!--[if !IE]>|xGv00|c5668531d36ed7899852180841ca2aa2<![endif]-->
+ </div>
+ <!--[if !IE]>|xGv00|4d3fc8408e6802f62101cf9079687da7<![endif]-->
+ <!--[if !IE]>|xGv00|2b3d5c8d8abf1f7950eb4fb0b25937df<![endif]-->
+ <!--sidebar2-->
+
+ <!--[if !IE]>|xGv00|1ab27528bd99a6235a4d95c5dc5c9ee8<![endif]-->
+ <!--sidebar3-->
+ <!--[if !IE]>|xGv00|fa368e6102a8f35aaafe5625caf65a66<![endif]-->
+ </div>
+ </div>
+ </div>
+ <!--14.12.10新增广告_底通广告-->
+ <div class="article_ad ad-foot bottomAds">
+ <!--$loc$_div AD begin...."l=$loc$&log=off"-->
+ <div id="QQcom_all_Width1:2" data-loc="QQcom_all_Width1" data-index="2" style="height: 90px; display: block; width: 1000px; position: relative;" class="l_qq_com" adconfig_lview="l.qq.com" adconfig_charset="gbk" adconfig_lview_template="//l.qq.com/lview?c=www&amp;loc={loc}" oid="1801700001" display="banner"><object id="auto_gen_4" data="//swa.gtimg.com/web/snswin/2016/04/21/20/727068.swf" style="outline:none;width:1000px;height:90px;"><param name="allowscriptaccess" value="never" /><param name="wmode" value="opaque" /><param name="quality" value="high" /><param name="flashvars" value="adlink=http%3A%2F%2Fc.l.qq.com%2Flclick%3Floc%3DQQcom_all_Width1%26click_data%3DdXNlcl9pbmZvPW9CM2pnVGc5RXgtXyZjbGlja19leHRzPVJWaFVQV0l5Ykd0UVZHTjNUVlJOZDA1RVZUVk9VMXA2WWpKc2ExQlZTa1pOUlVaQ1RYcGpNazVyUlhoUmVsVTBUV3BKTlU5VlJrWk5SRUpGVWxSc1FrMTZUVzFpUnpscVlWZFJPVlZXUm1waU1qRm1XVmQ0YzFneFpIQmFTRkp2VFZFOVBRPT0mcGN0cj05NTcmYXZlcj05MDEwMDImcHJpPVJLYXYzc0JWTnljL2xibUdqdFFJdzhzMGkyWkxaWUNWJmJ0cHJpPWFlais1aWNxQ3prcUJSSGRaR3crZFVDZlZtT2VURTlRJnByaTE9TFBUa3gwZDJrcjNrNUJmSmpXZ3RkZ3BrV1RpZjJ0WEQmYmlkcGFyYTE9MS4wMDAwMDAmcHJpbW9kPTImYmlkbW9kPTEmcHJpMj02V2dVSmdVRTFVVG1iZVYxQzJiZ3dBSnpMUC95Z0NlSw%3D%3D%26oid%3D1801700001%26soid%3DvgqjdmocWCKZrgDemjM7i9k0AZve%26dtype%3D0%26pctr%3D957%26aver%3D901002%26btoid%3D701304595%26pri%3DRKav3sBVNyc%2FlbmGjtQIw8s0i2ZLZYCV%26btpri%3Daej%2B5icqCzkqBRHdZGw%2BdUCfVmOeTE9Q%26index%3D2%26page_type%3D2%26chl%3D13&amp;ime=true&amp;setFocus=crystal.ime.setFocus&amp;swfid=auto_gen_4" /><param name="type" value="application/x-shockwave-flash" /></object>
+ <a class="absolute a_cover" href="http://c.l.qq.com/lclick?loc=QQcom_all_Width1&amp;click_data=dXNlcl9pbmZvPW9CM2pnVGc5RXgtXyZjbGlja19leHRzPVJWaFVQV0l5Ykd0UVZHTjNUVlJOZDA1RVZUVk9VMXA2WWpKc2ExQlZTa1pOUlVaQ1RYcGpNazVyUlhoUmVsVTBUV3BKTlU5VlJrWk5SRUpGVWxSc1FrMTZUVzFpUnpscVlWZFJPVlZXUm1waU1qRm1XVmQ0YzFneFpIQmFTRkp2VFZFOVBRPT0mcGN0cj05NTcmYXZlcj05MDEwMDImcHJpPVJLYXYzc0JWTnljL2xibUdqdFFJdzhzMGkyWkxaWUNWJmJ0cHJpPWFlais1aWNxQ3prcUJSSGRaR3crZFVDZlZtT2VURTlRJnByaTE9TFBUa3gwZDJrcjNrNUJmSmpXZ3RkZ3BrV1RpZjJ0WEQmYmlkcGFyYTE9MS4wMDAwMDAmcHJpbW9kPTImYmlkbW9kPTEmcHJpMj02V2dVSmdVRTFVVG1iZVYxQzJiZ3dBSnpMUC95Z0NlSw==&amp;oid=1801700001&amp;soid=vgqjdmocWCKZrgDemjM7i9k0AZve&amp;dtype=0&amp;pctr=957&amp;aver=901002&amp;btoid=701304595&amp;pri=RKav3sBVNyc/lbmGjtQIw8s0i2ZLZYCV&amp;btpri=aej+5icqCzkqBRHdZGw+dUCfVmOeTE9Q&amp;index=2&amp;page_type=2&amp;chl=13&amp;k=DeepMind%E6%96%B0%E7%94%B5%E8%84%91%E5%B7%B2%E5%8F%AF%E5%88%A9%E7%94%A8%E8%AE%B0%E5%BF%86%E8%87%AA%E5%AD%A6%20%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD%E8%BF%88%E4%B8%8A%E6%96%B0%E5%8F%B0%E9%98%B6&amp;t=DeepMind%E6%96%B0%E7%94%B5%E8%84%91%E5%B7%B2%E5%8F%AF%E5%88%A9%E7%94%A8%E8%AE%B0%E5%BF%86%E8%87%AA%E5%AD%A6%20%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD%E8%BF%88%E4%B8%8A%E6%96%B0&amp;r=&amp;s=" target="_blank" rel="nofollow" style="position:absolute;width:1000px;height:90px;left:0px;top:0px;cursor:pointer;z-index:10;background-color:#fff;filter:alpha(opacity=0);opacity:0;"></a>
+ <div class="absolute" style="position:absolute;width:18px;height:18px;right:0px;bottom:0px;cursor:pointer;z-index:20;background:url(//ra.gtimg.com/web/privacy/white_icon.png) no-repeat;"></div>
+ <div class="absolute" style="position:absolute;width:24px;height:16px;left:26px;bottom:0px;cursor:pointer;display:none;z-index:20;background:url(//ra.gtimg.com/web/res/icon/report_default_new.png) no-repeat top;"></div>
+ <div style="position: absolute; left: 0px; bottom: 0px; width: 26px; height: 16px; z-index: 12; background: transparent url(&quot;//ra.gtimg.com/web/res/icon/leftbottom_new.png&quot;) no-repeat scroll right top;"></div>
+ </div>
+ <!--$loc$ AD end -->
+ <!--[if !IE]>|xGv00|eded8eb1ca1e76d5e657a1d335d69103<![endif]-->
+ </div>
+ <!--[if !IE]>|xGv00|aa6d4f8aca299c517bb2801b4307d648<![endif]-->
+
+ <script>
+ var NavNoticeSiteName = ["sports", "2016"];
+ </script>
+ <script src="http://mat1.gtimg.com/www/chrometips/notification2016_v0909.js"></script>
+ <!--[if !IE]>|xGv00|ba9d9a58380d050d565c8deaad2bd7ec<![endif]-->
+ <style>
+ .tcopyright {
+ width: 960px;
+ margin: 0 auto;
+ padding: 8px 0;
+ font-size: 12px;
+ line-height: 28px;
+ color: #333;
+ text-align: center;
+ overflow: hidden;
+ clear: both;
+ }
+
+ .tcopyright .en {
+ font-family: Arial;
+ }
+
+ .tcopyright a {
+ color: #333;
+ text-decoration: none;
+ }
+
+ .tcopyright a:hover {
+ color: #bd0a01;
+ text-decoration: underline;
+ }
+ </style>
+ <div id="tcopyright" class="tcopyright" bosszone="footer" role="contentinfo">
+ <div>
+ <a href="http://www.tencent.com/" target="_blank" rel="nofollow">关于腾讯</a> | <a href="http://www.tencent.com/index_e.shtml" target="_blank" rel="nofollow">About Tencent</a> | <a href="http://www.qq.com/contract.shtml" target="_blank" rel="nofollow">服务协议</a> | <a href="http://www.qq.com/privacy.htm" target="_blank" rel="nofollow">隐私政策</a> | <a href="http://open.qq.com/" target="_blank" rel="nofollow">开放平台</a> | <a href="http://www.tencentmind.com/" target="_blank" rel="nofollow">广告服务</a> | <a href="http://hr.tencent.com/" target="_blank" rel="nofollow">腾讯招聘</a> | <a href="http://gongyi.qq.com/" target="_blank" rel="nofollow">腾讯公益</a> | <a href="http://service.qq.com/" target="_blank" rel="nofollow">客服中心</a> | <a href="http://news.qq.com/zt2014/2014qtnews/ccybspxd.htm%0A" target="_blank" rel="nofollow">举报中心</a> | <a href="http://www.qq.com/map/" target="_blank" rel="nofollow">网站导航</a>
+ </div>
+ <div class="en">Copyright © 1998 - 2016 Tencent. All Rights Reserved</div>
+ <div>
+ <a href="http://www.tencent.com/" target="_blank" rel="nofollow">腾讯公司</a> <a href="http://www.tencent.com/zh-cn/le/copyrightstatement.shtml" target="_blank" rel="nofollow">版权所有</a>
+ </div>
+ </div>
+ <!--[if !IE]>|xGv00|b6614ae390f3ba6a8cbcc269055b42da<![endif]-->
+
+ <a name="bottom"></a>
+
+
+ <div id="pop_rightreply" style="display:none;position:absolute;z-index:89;">
+ <div class="cf plArea newplArea listArea">
+ <div class="hd" style="position:relative">
+ <div class="closebtn" style="right:1px;top:19px"><a id="pop_reply_close1" href="javascript:void(0)">关闭按钮</a></div>
+ <span id="pop1_reply_logout" class="login">
+ <img src="http://mat1.gtimg.com/digi/2012/shuma2013/imgf.png" />
+ <a id="pop_login_link1" href="javascript:void(0);" class="logoA"><strong>登录</strong></a>
+ </span>
+ <span id="pop_reply_login1" class="login" style="display:none">
+ </span>
+ </div>
+ <div class="plDinfo" id="reply_bottom">
+ <div class="list-wraper">
+ <textarea autocomplete="off" name="content" accesskey="4" id="pop1_content" title="请输入评论内容"></textarea>
+ <div class="face" style="display:none">
+ <div class="sendList"><a class="txt" href="#" title="表情" tabindex="3"><em class="sico ico_face"></em>表情</a></div>
+ <div class="sendList"><a class="txt" href="#" title="@朋友帐号就可以提到他" tabindex="3"><em class="sico ico_at"></em>朋友</a></div>-
+ </div>
+ </div>
+ <div class="commt-sub" id="p_login_btn">
+ <a href="javascript:void(0)" class="submit" id="pop1_post_btn"></a>
+ <span class="fontsline">还能输入<strong id="pop1_reply_charleft">140</strong>字</span>
+ <span class="tips" style="display:none">请输入内容!</span>
+ </div>
+ </div>
+ </div>
+ <div class="sucssTip" style="display:none">
+ <span>评论成功!</span>
+ </div>
+ </div>
+
+ <div id="mask" class="layoutBg" style="width:100%;height:100%;position:absolute;top:0;left:0;z-index:88;display:none;background:#000;filter:alpha(opacity=30);opacity:0.30;-moz-opacity:0.3;"></div>
+
+
+ <style>
+ /* sprite */
+
+ .shareBtn-bd a,
+ .scrollBtn a,
+ .hot-voting-con,
+ .hot-voting,
+ #cmt_post_btn,
+ #topPic_close,
+ .cmt-share-btn label {
+ background: url(http://mat1.gtimg.com/news/dc/images/s_gallery_2012110702.png) no-repeat 0 0;
+ display: inline-block
+ }
+
+ .scrollBtn a,
+ .scrollBtn a:link,
+ .scrollBtn a:visited,
+ .scrollBtn a:hover {
+ color: #fff
+ }
+ /* 侧边栏滚动工具条 S */
+
+ .ff-t {
+ font-family: Tahoma
+ }
+
+ .scrollBtn {
+ position: fixed;
+ width: 54px;
+ _position: absolute;
+ right: 25px;
+ bottom: 45px
+ }
+
+ .scrollBtn-tips {
+ width: 54px;
+ height: 22px;
+ background: #f69b02;
+ color: #fff;
+ text-align: center;
+ margin-bottom: 5px;
+ line-height: 22px;
+ cursor: pointer
+ }
+
+ .scrollBtn li {
+ float: left;
+ height: 54px;
+ margin-bottom: 5px;
+ overflow: hidden
+ }
+
+ .scrollBtn a {
+ display: block;
+ width: 54px;
+ height: 54px;
+ overflow: hidden;
+ color: #fff;
+ filter: Alpha(Opacity=60);
+ opacity: 0.6;
+ -moz-transition: opacity 0.5s ease;
+ -webkit-transition: opacity 0.5s ease;
+ -o-transition: opacity 0.5s ease;
+ transition: opacity 0.5s ease;
+ text-align: center
+ }
+
+ .scrollBtn a:hover {
+ text-decoration: none
+ }
+
+ .scrollBtn a:hover {
+ filter: Alpha(Opacity=100);
+ opacity: 1
+ }
+
+ .scrollBtn a b {
+ display: none
+ }
+
+ .sB-comment a {
+ background-position: 0 -353px;
+ padding-top: 34px;
+ padding-bottom: 3px;
+ height: 17px
+ }
+
+ .sB-share a {
+ background-position: 0 -412px
+ }
+
+ .sB-goTop {
+ display: none
+ }
+
+ .sB-goTop a {
+ background-position: 0 -471px
+ }
+ /* 侧边栏滚动工具条 E */
+
+ @media only screen and (-webkit-min-device-pixel-ratio: 2),
+ only screen and (min-device-pixel-ratio: 2) {
+ .scrollBtn a {
+ background: url(http://mat1.gtimg.com/www/retina/dp/siderbar_tool_2x.png) no-repeat;
+ background-size: 172px 54px;
+ }
+ .sB-comment a {
+ background-position: 0 0;
+ }
+ .sB-share a {
+ background-position: -59px 0;
+ }
+ .sB-goTop a {
+ background-position: -118px 0;
+ }
+ }
+
+ .sB-home a {
+ background: url(http://mat1.gtimg.com/news/dc/images/backtohome.png) no-repeat 0 0;
+ }
+ </style>
+
+ <!-- 滚动侧边栏 S-->
+ <style>
+ @media only screen and (-webkit-min-device-pixel-ratio: 2),
+ only screen and (min-device-pixel-ratio: 2) {
+ .scrollBtn a {
+ background: url(http://mat1.gtimg.com/www/retina/dp/siderbar_tool_2x.png) no-repeat;
+ background-size: 172px 54px;
+ }
+ .sB-comment a {
+ background-position: 0 0;
+ }
+ .sB-share a {
+ background-position: -59px 0;
+ }
+ .sB-goTop a {
+ background-position: -118px 0;
+ }
+ }
+
+ .sB-home a {
+ background: url(http://mat1.gtimg.com/news/dc/images/backtohome.png) no-repeat 0 0;
+ }
+
+ #goHome {
+ background-image: none;
+ background-color: #2d96e9;
+ }
+
+ #goHome b {
+ display: block;
+ font: 14px/20px "微软雅黑";
+ width: 2.5em;
+ text-align: center;
+ margin: 8px auto;
+ cursor: pointer
+ }
+ /*用户反馈*/
+
+ .sB-feedback a {
+ background: url(http://mat1.gtimg.com/www/images/dc/yhfkBg.png) no-repeat 0 -176px;
+ }
+
+ @media only screen and (-webkit-min-device-pixel-ratio: 2),
+ only screen and (min-device-pixel-ratio: 2) {
+ .sB-feedback a {
+ background-size: 54px 166px;
+ background-position: 0 -113px;
+ }
+ }
+ </style>
+ <div class="scrollBtn" id="scrollBtn">
+ <ul class="clearfix">
+ <li class="sB-home" onclick="registerZone2({bossZone:'backhome',url:''},1);"><a href="http://www.qq.com" class="ff-t" id="goHome" title="返回首页" target="_blank"><b>返回首页</b></a></li>
+ <li class="sB-feedback" bosszone="tSupport"><a href="http://support.qq.com/write.shtml?fid=1182&amp;ADPUBNO=" class="ff-t" title="用户反馈" target="_blank"><b>用户反馈</b></a></li>
+ <li class="sB-comment" bosszone="tComm"><a href="#tag_cmt" class="ff-t" id="goCmt" title="网友评论"><b>评论</b><span id="cmtNum2"></span></a></li>
+ <li class="sB-share" bosszone="tRnews"><a href="#tag_about" id="goAbout" title="热门推荐"><b>相关链接</b></a></li>
+ <li class="sB-goTop" id="goTop" bosszone="backTop" title=""><a href="javascript:void(0)" title="返回顶部"><b>返回顶部</b></a></li>
+ </ul>
+ </div>
+ <!-- 滚动侧边栏 E-->
+ <!--[if !IE]>|xGv00|9204f2dd9b6369eeb3aea819398af6b8<![endif]-->
+ <!--[if !IE]>|xGv00|dc92135e2407dafa58a46a5f97e6cc5d<![endif]-->
+ <!--js2-->
+ <script>
+ /*
+ 文章末尾加icon
+ */
+ (function() {
+ var TrimLeft = function(str) {
+ var whitespace = '\t\r\n  ';
+ while (str.length & gt; 0 & amp; & amp; whitespace.indexOf(str.substr(0, 1)) != -1) {
+ str = str.substr(1);
+ }
+ return str;
+ };
+
+ var TrimRight = function(str) {
+ var whitespace = '\t\r\n  ';
+ while (str.length & gt; 0 & amp; & amp; whitespace.lastIndexOf(str.substr(str.length - 1, 1)) != -1) {
+ str = str.substr(0, str.length - 1);
+ }
+ return str;
+ };
+
+ var Trim = function(str) {
+ return TrimLeft(TrimRight(str));
+ };
+
+ var GetLastAvaNode = function(nodes) {
+ for (var i = nodes.length - 1; i & gt; = 0; --i) {
+ var itemNode = nodes[i];
+ if (itemNode.nodeName != "#text")
+ return itemNode;
+ else {
+ if (Trim(itemNode.nodeValue) != "")
+ return itemNode;
+ else {
+ continue;
+ }
+ }
+ }
+ return null;
+ };
+
+ var contentEleObj = document.getElementById('Cnt-Main-Article-QQ');
+
+ if (contentEleObj.childNodes.length & gt; 0) {
+ var lastEleObj = contentEleObj.children[contentEleObj.children.length - 1];
+ if (lastEleObj.tagName.toLowerCase() == "p") {
+ var avaNode = GetLastAvaNode(lastEleObj.childNodes);
+ if (avaNode & amp; & amp; avaNode.nodeName == "#text" & amp; & amp; Trim(avaNode.nodeValue).length & gt; 15) {
+ var iconEleObj = document.createElement("img");
+ iconEleObj.src = "http://www.qq.com/favicon.ico";
+ iconEleObj.width = "16";
+ iconEleObj.height = "16";
+ var linkEleObj = document.createElement("a");
+ linkEleObj.href = "http://www.qq.com/?pref=article";
+ linkEleObj.target = "_blank";
+ linkEleObj.alt = "点击进入腾讯首页";
+ linkEleObj.title = "点击进入腾讯首页";
+ linkEleObj.id = "backqqcom";
+ //linkEleObj.setAttribute('bossZone','backqqcom');
+
+ linkEleObj.style.cssText = ";white-space:nowrap;";
+ var textEleObj = document.createElement("span");
+ textEleObj.innerHTML = "返回腾讯网首页&gt;&gt;";
+ textEleObj.style.cssText = ";padding-left:5px; font-size:14px;";
+ textEleObj.bossZone = "backqqcom";
+ linkEleObj.appendChild(iconEleObj);
+ lastEleObj.appendChild(linkEleObj);
+ linkEleObj.appendChild(textEleObj);
+ linkEleObj.onclick = function() {
+ registerZone2({
+ bossZone: 'backqqcom',
+ url: 'http://www.qq.com/?pref=article'
+ }, 1)
+ }
+
+ }
+ }
+ }
+
+ })();
+ </script>
+ <!--[if !IE]>|xGv00|70c0114cfac220df837dd63bae805f58<![endif]-->
+ <!--include virtual="/public/final09/comm_js.htm" -->
+ <script>
+ /*是否有滚动图*/
+ TencentArticl.isSild = false;
+ </script>
+ <script>
+ crystal.request();
+ </script>
+
+
+
+ <script src="http://mat1.gtimg.com/news/dc/js/share/mi.Portal_v1.0.3.js" charset="utf-8"></script>
+
+ <script src="http://mat1.gtimg.com/news/dc/js/share/share_1.2.0.js"></script>
+ <script>
+ //分享下
+ ! function() {
+ var ewmSrc = '';
+ //从接口获取二维码图片地址
+ var get_code_2 = function(callback, qqurl) {
+ var url = qqurl || ARTICLE_INFO.article_url;
+ window.twocodecallback = callback;
+ var d1 = $.ajax({
+ url: 'http://news.open.qq.com/qrcode/gen.php',
+ data: {
+ url: url
+ },
+ dataType: 'jsonp',
+ jsonpCallback: 'twocodecallback'
+ });
+ };
+
+ $('#shareBtn').hover(function(e) {
+ $(this).addClass('showItem');
+ }, function(e) {
+ $(this).removeClass('showItem');
+ });
+ //文章标题后分享显示
+ $('#shareBtn').hover(function() {
+ $(this).addClass('showItem');
+ }, function() {
+ $(this).removeClass('showItem');
+ })
+ //文章标题后分享&gt;二维码
+ $('#shareWx').hover(function() {
+ //console.log(ewmSrc);
+ if (ewmSrc) {
+ $('#shareWx .ewmBox img').attr('src', ewmSrc);
+ $('#shareWx .ewmBox').show();
+ } else {
+ get_code_2(function(d) {
+ ewmSrc = d.url;
+ $('#shareWx .ewmBox img').attr('src', d.url);
+ $('.ewmBox', '#shareWx').show();
+ });
+ }
+ }, function() {
+ $(this).find('.ewmBox').hide();
+ });
+ //文章结尾微信二维码
+ $('#s_ewm').click(function(e) {
+ e.stopPropagation();
+ var pos = $(this).offset();
+ if ($('#pop_two_code').length == 0) {
+ $('body').append('&lt;div id="pop_two_code" class="pop_two_code"&gt;' +
+ '&lt;div class="pop_close"&gt;&lt;/div&gt;' +
+ '&lt;div class="down_arrow"&gt;&lt;/div&gt;' +
+ '&lt;img src=""&gt;' +
+ '&lt;p&gt;扫一扫,用手机看新闻!&lt;br&gt;用微信扫描还可以&lt;br&gt;分享至好友和朋友圈&lt;/p&gt;' +
+ '&lt;/div&gt;');
+ }
+ var pop = $('#pop_two_code');
+ pop.css({
+ left: pos.left - 241,
+ top: pos.top - 126
+ })
+
+ if (ewmSrc) {
+ $('#pop_two_code img').attr('src', ewmSrc);
+ pop.show();
+ } else {
+ get_code_2(function(d) {
+ $('#pop_two_code img').attr('src', d.url);
+ pop.show();
+ });
+ }
+ });
+ //关闭,点击其他地方关闭
+ $(document).on('click', function(e) {
+ var notobj = $('#pop_two_code');
+ if (notobj.length == 1) {
+ if ($.contains(notobj.get(0), e.target)) {
+ if (e.target == notobj.find('.pop_close').get(0)) $('#pop_two_code').hide();
+ } else {
+ $('#pop_two_code').hide();
+ }
+ }
+ });
+ }();
+
+ $('[data-node="shareLinkedIn"]').bind('click', function(e) {
+
+ var shareUrl = 'http://www.linkedin.com/shareArticle?mini=true&amp;ro=true&amp;title=' + encodeURIComponent(ARTICLE_INFO.title) + '&amp;url=' + encodeURIComponent(ARTICLE_INFO.article_url) + '&amp;summary=&amp;source=&amp;armin=armin';
+ window.open(shareUrl, "shareLinkedIn", "height=480,width=608,top=100,left=200,toolbar=no,menubar=no,resizable=yes,location=yes,status=no");
+
+ });
+ </script>
+
+
+
+ <!--转播到微博-->
+ <script type="text/javascript">
+ function crossAsynJson(url, func, call, charset) {
+ var script = document.createElement("script"),
+ head = document.getElementsByTagName("head")[0];
+ window[func] = function(data) {
+ window[func] = undefined;
+ try {
+ delete window[func];
+ } catch (e) {}
+ call(data);
+ if (head) {
+ setTimeout(function() {
+ head.removeChild(script);
+ }, 5);
+ }
+ }
+ if (charset) {
+ script.setAttribute("charset", charset);
+ }
+ script.setAttribute("type", "text/javascript");
+ script.src = url;
+ head.appendChild(script);
+ }
+
+ function getUrlReaplece() {
+ var nowUrl = window.location.href;
+ if (nowUrl.toString().indexOf("_") & gt; 0) {
+ nowUrl = nowUrl.toString().split("_")[0] + ".htm";
+ if (nowUrl.toString().indexOf("?") & gt; 0) {
+ nowUrl = nowUrl.toString().split("?")[0];
+ if (nowUrl.toString().indexOf("#") & gt; 0) {
+ nowUrl = nowUrl.toString().split("#")[0];
+ }
+ }
+ } else {
+ if (nowUrl.toString().indexOf("?") & gt; 0) {
+ nowUrl = nowUrl.toString().split("?")[0];
+ } else {
+ if (nowUrl.toString().indexOf("#") & gt; 0) {
+ nowUrl = nowUrl.toString().split("#")[0];
+ }
+ }
+ }
+ return nowUrl.toString();
+ }
+
+ crossAsynJson('http://mb.data.rms.qq.com/output.php?url=' + getUrlReaplece() + '&amp;callback=fmbInfoJsonCallback', 'callback', function(json) {
+ if (json.Fname !== '') {
+ document.getElementById("fmbloginfo").className = "lastfmblog";
+
+ document.getElementById("fmbloginfo").innerHTML = "&lt;a target='_blank' href='" + json.Furl + "?pref=qqcom.zjzb'&gt;" + json.Fname + "&lt;/a&gt;&lt;span&gt;已转播&lt;/span&gt;";
+
+ document.getElementById("tmblogbt").className = "tmblog_act";
+ }
+ }, 5000, 'utf-8');
+
+ _MUI.ready(function() {
+ //_MI.ShareArticle.build('tmblogbt','qqcom.dp.tmblog');
+ //_MI.ShareArticle.build('tmblogbt1','qqcom.dp.tmblog1');
+ //_MI.ShareArticle.build('MIcblog','qqcom.dp.tmbloghdend');
+ WBwd("Cnt-Main-Article-QQ");
+ window.onload = setTimeout(function() {
+ _MI.ShareArticlePic.build('Cnt-Main-Article-QQ', 'qqcom.dp.sharepic');
+ }, 1000)
+ })
+ </script>
+
+ <!--[if !IE]>|xGv00|012a457a47759c0a8d47b20a0f530c66<![endif]-->
+ <script type="text/javascript">
+ _MUI.EA(document, 'keydown', function(e) {
+ var isAlt = false,
+ is2 = false,
+ is3 = false,
+ e = _MUI.E(e);
+ if (e.alt) {
+ isAlt = true
+ }
+ if (e.key == 50) {
+ is2 = true
+ }
+ if (e.key == 51) {
+ is3 = true
+ }
+ if (isAlt & amp; & amp; is2) {
+ document.getElementById('smnav').setAttribute('title', '导航,您可以通过上下键来选择导航');
+ rwAccess_2();
+ }
+ if (isAlt & amp; & amp; is3) {
+ document.getElementById('Cnt-Main-Article-QQ').parentNode.setAttribute('title', '正文,您可以通过上下键来阅读内容');
+ rwAccess_3();
+ }
+ });
+
+ function rwAccess_2() {
+ var iurl = 'http://btrace.qq.com/collect?sIp=&amp;iQQ=&amp;sBiz=&amp;sOp=accesskey2&amp;iSta=&amp;iTy=1617&amp;iFlow=&amp;iSite=' + escape(location.hostname) + '&amp;sUrl=&amp;sRefer=&amp;sLink=&amp;iUseragent=&amp;iScreen=&amp;iRes1=&amp;iRes2=&amp;iRes3=&amp;iRes4=' + Math.random();
+ rwImage_2 = new Image(1, 1);
+ rwImage_2.src = iurl;
+
+ }
+
+ function rwAccess_3() {
+ var iurl = 'http://btrace.qq.com/collect?sIp=&amp;iQQ=&amp;sBiz=&amp;sOp=accesskey3&amp;iSta=&amp;iTy=1617&amp;iFlow=&amp;iSite=' + escape(location.hostname) + '&amp;sUrl=&amp;sRefer=' + escape(document.referrer) + '&amp;sLink=&amp;iUseragent=' + navigator.userAgent + '&amp;iScreen=' + screen.width + '*' + screen.height + '&amp;iRes1=&amp;iRes2=&amp;iRes3=&amp;iRes4=' + Math.random();
+ rwImage_3 = new Image(1, 1);
+ rwImage_3.src = iurl;
+
+ }
+ </script>
+ <script>
+ //底部工具 S
+ var T = 92,
+ statu1 = 0,
+ t = 0,
+ tt = null,
+ isArea = 0,
+ isRec = false,
+ navVar = false,
+ goTop = qq.G("goTop"),
+ ie6 = qq.B.ie6,
+ temp, g_tcbd_cfr = {},
+ userLoginStatus = 0,
+ clickStu = false,
+ accessPlayer, Face, nick;
+
+ var timer_scroll = null;
+
+ function windowScroll(pos, fun) {
+ var speed = 0;
+ clearInterval(timer_scroll);
+ timer_scroll = setInterval(function() {
+ speed = (pos - qq.scrollY()) / 5;
+ speed = speed & gt;
+ 0 ? Math.ceil(speed) : Math.floor(speed);
+ if (qq.scrollY() == pos) {
+ clearInterval(timer_scroll);
+ fun & amp; & amp;
+ fun()
+ } else {
+ qq.scrollTo(0, qq.scrollY() + speed);
+ }
+ }, 10);
+ }
+
+ qq.EA(window, 'scroll', function() {
+ //返回顶部按钮
+ qq.scrollY() & gt;
+ 400 ? goTop.style.display = "block" : goTop.style.display = "none";
+ //推荐浮层
+ if (ie6) {
+ ie6Fixed('scrollBtn', 400);
+ }
+ });
+ qq.G('goTop') & amp; & amp;
+ qq.EA(qq.G('goTop'), 'click', function() {
+ windowScroll(0);
+ return false
+ });
+ //ie6 scrollBtn Fixed
+ function ie6Fixed(obj, posT) {
+ qq.G(obj).style.top = document.documentElement.scrollTop + document.body.scrollTop + posT + "px";
+ }
+ //相关视频
+ if (!qq.G('listvideoN')) {
+ try {
+ var t, videoPlayer, videoPlayer, _vIn, _vOut, showVideoPic;
+ qq.EA(qq.G('relInfo'), 'click', function() {
+ showVideo(1);
+ var video = qq.G('relVideo'),
+ txt = qq.G('relInfo');
+ txt.style.display = 'none';
+ //qq.hideOpacity(txt, 200, 50);
+ qq.showOpacity(video, 200, 20);
+ //qq.animate(txt.style, "height", 105, 0, 10);
+ qq.animate(video.style, "height", 0, 548, 50);
+ //qq.animate(video.style, "width", 0, 640, 200);
+
+ });
+
+ function showVideo(autoplay) {
+ qq.getScript('http://qzs.qq.com/tencentvideo_v1/js/tvp/tvp.player.js', function() {
+ videoInfo = new tvp.VideoInfo();
+ videoInfo.setVid(flash_vid);
+ videoInfo.setTitle(flash_title);
+ videoPlayer = new tvp.Player(640, 518);
+ // if(t) videoPlayer.setHistoryStart(t)
+ videoPlayer.setCurVideo(videoInfo);
+ //player.addParam("flashskin","http://imgcache.qq.com/minivideo_v1/vd/res/skins/TencentPlayerMiniSkin.swf");
+ videoPlayer.addParam('autoplay', autoplay);
+ videoPlayer.addParam("adplay", 0);
+ videoPlayer.addParam("pic", flash_pic);
+ videoPlayer.addParam("wmode", "transparent");
+ videoPlayer.write("mod_player");
+
+
+ }, 'utf-8', true);
+ accessPlayer = 1;
+ if (qq.G('focusHub')) {
+ qq.G('focusHub').focus();
+ }
+ }
+ qq.EA(qq.G('v_colse'), 'click', function() {
+
+ videoPlayer.pause();
+ qq.G('relVideo').style.display = 'none';
+ qq.G('relInfo').style.display = 'block';
+ qq.G('relInfo').style.height = '105px';
+ qq.showOpacity(qq.G('relInfo'), 200, 50);
+ });
+ qq.EA(qq.G('relInfo'), 'mouseover', function() {
+ qq.addClass(qq.G('relInfo'), 'relStatus');
+ });
+ qq.EA(qq.G('relInfo'), 'mouseout', function() {
+ qq.removeClass(qq.G('relInfo'), 'relStatus');
+ });
+ if (qq.G('moreTvBtn') & amp; & amp; qq.G('moreTv')) {
+
+ var mbtn = qq.G('moreTvBtn'),
+ mList = qq.G('moreTv')
+
+ qq.EA(qq.G('relVideo'), 'mousemove', function() {
+ mbtn.style.visibility = 'visible';
+ });
+ qq.EA(qq.G('relVideo'), 'mouseout', function() {
+ mbtn.style.visibility = 'hidden';
+ });
+
+ qq.EA(mbtn, 'mouseover', function(e) {
+ clearTimeout(_vOut);
+ if (!_vIn) {
+ qq.animate(qq.G('moreTv').style, 'right', -339, 0, 50);
+ mbtn.style.visibility = 'hidden';
+ _vIn = true, _vOut = null;
+ }
+ });
+ qq.EA(mList, 'mouseover', function(e) {
+ clearTimeout(_vOut);
+ });
+ qq.EA(mList, 'mouseout', function(e) {
+ clearTimeout(_vOut);
+ _vOut = setTimeout(function() {
+ qq.animate(mList.style, 'right', 0, -339, 50);
+ mbtn.style.visibility = 'hidden';
+ }, 500);
+ _vIn = false;
+ });
+ qq.B.ie6 & amp; & amp;
+ qq.each(qq.GT(mList, 'li'), function(a, b) {
+ a.onmouseover = function() {
+ this.className = 'hover';
+ }
+ a.onmouseout = function() {
+ this.className = '';
+ }
+ });
+ }
+
+ qq.EA(window, 'load', function() {
+ var video = qq.G('relVideo'),
+ txt = qq.G('relInfo');
+ if (showVideoPic) {
+ video.style.cssText = 'width:640px; height:548px; display:block';
+ txt.style.cssText = 'height:0';
+ showVideo(0);
+ } else {
+ video.style.cssText = 'height:0; display:none';
+ txt.style.cssText = 'height:105px; display:block';
+ }
+ });
+
+ } catch (e) {}
+ }
+ </script>
+ <!--F_RM1_div AD begin...."l=F_RM1&log=off"-->
+ <div id="F_RM1" style="width:1px;height:1px;display:none;margin:0 auto;" class="l_qq_com" adconfig_lview="l.qq.com" adconfig_charset="gbk" adconfig_lview_template="//l.qq.com/lview?c=www&amp;loc={loc}" oid="1" display="null"></div>
+ <!--F_RM1 AD end -->
+ <!--[if !IE]>|xGv00|5fda91c0c1c50b3bccc6167b4442f2e0<![endif]-->
+ <!--chg20110812 js1.0.4 byAustin-->
+ <script>
+ var SCRIPT_TIMEOUT = 20000;
+ var QVPL_PATH = "http://mat1.gtimg.com/www/html5js/QVPL1.0.4.js";
+
+ function loadHelper(jsurl) {
+ var oScriptEl, oTimeoutHDL, oHead;
+ oScriptEl = document.createElement("script");
+ oScriptEl.type = "text/javascript";
+ oScriptEl.language = "javascript";
+ oScriptEl.src = jsurl;
+ oScriptEl.onreadystatechange = doCallback;
+
+ oScriptEl.onload = function() {
+ this.readyState = "complete";
+ doCallback();
+ if (typeof(lianbo) == "object") {
+ lianbo.init(window.QVPL);
+ }
+ };
+
+ oTimeoutHDL = window.setTimeout(doError, SCRIPT_TIMEOUT);
+ document.getElementsByTagName("head")[0].appendChild(oScriptEl);
+
+ function doCallback() {
+ if (oScriptEl.readyState == "complete" || oScriptEl.readyState == "loaded") {
+ oScriptEl.onload = oScriptEl.onreadystatechange = new Function();
+ window.clearTimeout(oTimeoutHDL);
+ }
+ };
+
+ function doError() {
+ oScriptEl.parentNode.removeChild(oScriptEl);
+ };
+ }
+
+ loadHelper(QVPL_PATH);
+ </script>
+ <!--[if !IE]>|xGv00|5995073237d8e5e398160263691fadb1<![endif]-->
+
+ <script>
+ //20120423
+
+ if (document.addEventListener)
+ document.addEventListener("click", registerZone2, false);
+ else if (document.attachEvent)
+ document.attachEvent("onclick", registerZone2);
+ var gImage;
+
+ //取自定义属性
+ function registerZone2(ev, clickType) {
+ var loopTryNum = 10;
+ var bossID = 1408; //451;
+
+ try {
+ //qq
+ var a = document.cookie.match(new RegExp('(^|)o_cookie=([^;]*)(;|$)'));
+ var iQQ = (a == null ? "" : unescape(a[2]));
+ var purl = '';
+ var zoneId = '';
+
+ if (typeof clickType == 'undefined') {
+ var ev = window.event || ev;
+ var et = ev.srcElement || ev.target;
+ var type = et.tagName;
+ if (type != "A" & amp; & amp; type != "IMG") {
+ return true;
+ }
+
+ if (type == "A") {
+ purl = et.href;
+ } else if (type == "IMG") {
+ purl = et.parentNode.href;
+ }
+
+ //pseudo attr
+ for (var i = loopTryNum - 1, tagNode = et; i & gt; = 0; i--, tagNode = tagNode.parentNode) {
+ if (tagNode.attributes['bossZone']) {
+ zoneId = tagNode.attributes['bossZone'].nodeValue;
+ } else if (tagNode.attributes['bosszone']) {
+ zoneId = tagNode.attributes['bosszone'].nodeValue;
+ } else if (tagNode.attributes['BossZone']) {
+ zoneId = tagNode.attributes['BossZone'].nodeValue;
+ } else if (tagNode.attributes['Bosszone']) {
+ zoneId = tagNode.attributes['Bosszone'].nodeValue;
+ }
+
+ if (zoneId) break;
+ }
+ if (!zoneId) return;
+ } else {
+ zoneId = ev.bossZone;
+ purl = ev.url;
+ }
+
+ //site
+ var localUrl = location.href;
+ var site = localUrl.substring(7, localUrl.indexOf('.qq.com'));
+ site = site.substr(site.lastIndexOf('.') + 1);
+
+ var iurl = 'http://btrace.qq.com/collect?sIp=&amp;iQQ=' + iQQ + '&amp;sBiz=qq.com&amp;sOp=' + zoneId + '&amp;iSta=&amp;iTy=' + bossID + '&amp;iFlow=&amp;site=' + site +
+ '&amp;sUrl=' + escape(purl) + '&amp;sLocalUrl=' + escape(location.href) + '&amp;articleType=' + '&amp;tmplType=' + ARTICLE_INFO.type + '&amp;' + Math.random();
+ gImage = new Image(1, 1);
+ gImage.src = iurl;
+ } catch (e) {}
+ }
+
+ /* boss function */
+ function ExposureBoss(id, name) {
+ var a = document.cookie.match(new RegExp('(^|)o_cookie=([^;]*)(;|$)'));
+ var iQQ = (a == null ? "" : unescape(a[2]));
+ var iurl = 'http://btrace.qq.com/collect?sIp=&amp;iQQ=' + iQQ + '&amp;sBiz=' + (arguments[2] ? arguments[2] : '') + '&amp;sOp=' + name + '&amp;iSta=&amp;iTy=' + id + '&amp;iFlow=&amp;sUrl=' + escape(location.href) + '&amp;iBak=&amp;sBak=&amp;ran=' + Math.random();
+ gImage = new Image(1, 1);
+ gImage.src = iurl;
+ }
+
+ /**
+ *曝光码
+ */
+
+ var BOSS = BOSS || {};
+
+ BOSS.Exposure = function(obj, sOp, sBiz) {
+ var _this = this;
+ this.obj = obj;
+ this.sOp = sOp;
+ this.sBiz = sBiz || '';
+ this.top = qq.getY(this.obj);
+ this.addEvent();
+ }
+
+ BOSS.Exposure.prototype = {
+ bossId: 1604,
+ winH: qq.windowHeight(),
+ addEvent: function() {
+ var _this = this;
+ qq.EA(window, 'scroll', function() {
+ var t = qq.scrollY();
+ if (t & gt;
+ (_this.top - _this.winH + 50) & amp; & amp; !_this.obj.show) {
+ _this.obj.show = true;
+ ExposureBoss(_this.bossId, _this.sOp, _this.sBiz);
+ }
+ });
+ }
+ };
+
+ !(function() {
+ var about = qq.GC(qq.G('C-Main-Article-QQ'), '.about-read')[0],
+ hd = qq.GC(about, '.hd')[0],
+ bd = qq.GC(about, '.bd')[0];
+ var keyword = qq.GT(hd, 'span'),
+ i = 0;
+
+ //相关内容曝光
+ if (bd.children.length & gt; 0) {
+ new BOSS.Exposure(bd, 'EXrNews');
+ }
+
+ //关键词曝光
+ if (keyword.length & gt; 0) {
+ new BOSS.Exposure(hd, 'EXkeyword');
+ }
+
+ //相关视频list曝光
+ if (qq.G('aboutVideoTjlist') & amp; & amp; qq.G('aboutVideoTjlist').getElementsByTagName('li').length & gt; 0) {
+ new BOSS.Exposure(qq.G('aboutVideoTjlist'), 'EXrNews_video');
+ }
+
+ //频道视频
+ if (qq.G('videoModBJ')) {
+ new BOSS.Exposure(qq.G('videoModBJ'), qq.G('videoModBJ').getAttribute('bossName'));
+ }
+
+ })()
+ </script>
+ <!--[if !IE]>|xGv00|76895b9b802c17e8d1bf28bcb513ad11<![endif]-->
+ <script>
+ try {
+ QosS.endCheck();
+ } catch (e) {}
+ </script>
+ <script>
+ //QQ浏览器合作推广
+ (function() {
+ var coo_qqBrowser = document.getElementById('coo_qqBrowser');
+ var updateBtn = coo_qqBrowser.getElementsByTagName('a');
+ var closeBtn = coo_qqBrowser.getElementsByTagName('em');
+ var isLocalStorage = (typeof localStorage == 'undefined' ? false : true);
+
+ var os = {};
+ var init = function() {
+ var ua = window.navigator.userAgent;
+ var isQQBrowser = ua.indexOf('QQBrowser') & gt; - 1; //判断是否是QQ浏览器
+ if (isQQBrowser) {
+ return;
+ }
+ if (isLocalStorage) {
+ var coo_qqBrowser = localStorage.getItem('coo_qqBrowser');
+ if (coo_qqBrowser) {
+ return;
+ }
+ }
+
+ var isWin = (navigator.platform === "Win32") || (navigator.platform === "Windows");
+ !os.winxp & amp; & amp;
+ (os.winxp = isWin & amp; & amp;
+ (ua.indexOf("Windows NT 5.1") & gt; - 1 || ua.indexOf("Windows XP") & gt; - 1) || false);
+ !os.win7 & amp; & amp;
+ (os.win7 = isWin & amp; & amp;
+ (ua.indexOf("Windows NT 6.1") & gt; - 1 || ua.indexOf("Windows 7") & gt; - 1) || false);
+ !os.win8 & amp; & amp;
+ (os.win8 = isWin & amp; & amp;
+ (ua.indexOf("Windows NT 6.2") & gt; - 1 || ua.indexOf("Windows 8") & gt; - 1) || false);
+
+ var str, urls;
+ if (os.win7) {
+ str = '已针对Windows 7 系统优化,上网提速200%,打开多网页不卡顿';
+ urls = 'http://dldir1.qq.com/invc/tt/QQBrowser_Setup_TxwWin7.exe';
+ C.showText(str, urls);
+ } else if (os.winxp) {
+ str = '您的 XP 系统已停止更新,升级浏览器防止系统漏洞,保障上网安全';
+ urls = 'http://dldir1.qq.com/invc/tt/QQBrowser_Setup_TxwXP.exe';
+ C.showText(str, urls);
+ } else if (os.win8) {
+ str = '针对Windows 8 系统升级,全面拦截各种广告,上网提速200%';
+ urls = 'http://dldir1.qq.com/invc/tt/QQBrowser_Setup_TxwWin8.exe';
+ C.showText(str, urls);
+ } else {
+ str = '电脑登录微信无需扫码,浏览QQ空间提速 5 倍';
+ urls = 'http://dldir1.qq.com/invc/tt/QQBrowser_Setup_Txw.exe';
+ C.showText(str, urls);
+ }
+
+ bind();
+ };
+ var C = {
+ 'showText': function(str, url) {
+ var cooCon = coo_qqBrowser.getElementsByTagName('span');
+ cooCon[0].innerHTML = str;
+ updateBtn[0].setAttribute('href', url);
+ coo_qqBrowser.style.display = 'block';
+ ExposureBoss(1604, 'qqbrowsercop', 'dc');
+ },
+ 'close': function(sop) {
+ coo_qqBrowser.parentNode.removeChild(coo_qqBrowser);
+ isLocalStorage & amp; & amp;
+ localStorage.setItem('coo_qqBrowser', 1);
+ sop & amp; & amp;
+ registerZone2({
+ bossZone: sop,
+ url: ''
+ }, 1);
+ }
+ };
+ var bindFunc = {
+ 'update': function(e) {
+ var sop;
+ if (os.win7) {
+ sop = 'QQwin7';
+ } else if (os.winxp) {
+ sop = 'QQwinxp';
+ } else if (os.win8) {
+ sop = 'QQwin8';
+ } else {
+ sop = 'QQelse';
+ }
+ C.close(sop);
+ },
+ 'close': function(e) {
+ var sop;
+ if (os.win7) {
+ sop = 'QQwin7close';
+ } else if (os.winxp) {
+ sop = 'QQwinxpclose';
+ } else if (os.win8) {
+ sop = 'QQwin8close';
+ } else {
+ sop = 'QQelseclose';
+ }
+ C.close(sop);
+ }
+ };
+ var bind = function() {
+ updateBtn[0].onclick = bindFunc['update'];
+ closeBtn[0].onclick = bindFunc['close'];
+ };
+
+
+ init();
+
+ })();
+
+ //微信分享修复
+ function pageShareWX() {
+ qq.getScript("http://mat1.gtimg.com/tech/js/tangent/sharewx_v1.0.0.js", function() {
+ sharewx(opt)
+ }, "utf-8")
+ }
+ </script>
+
+
+ <!-- 调研广告代码 -->
+ <!--tech_f_mwb_div AD begin...."l=tech_f_mwb&log=off"-->
+ <div id="tech_f_mwb" style="width: 1px; height: 1px; overflow: hidden; display: block; position: relative;" class="l_qq_com" adconfig_lview="l.qq.com" adconfig_charset="gbk" adconfig_lview_template="//l.qq.com/lview?c=www&amp;loc={loc}" oid="100" display="auto"><object id="auto_gen_5" data="//ra.gtimg.com/web/default_fodders/300x250_1.swf?v=20130124" style="outline:none;width:1px;height:1px;"><param name="allowscriptaccess" value="always" /><param name="wmode" value="opaque" /><param name="quality" value="high" /><param name="scale" value="exactfit" /><param name="flashvars" value="ime=true&amp;setFocus=crystal.ime.setFocus&amp;swfid=auto_gen_5" /><param name="type" value="application/x-shockwave-flash" /></object></div>
+ <!--tech_f_mwb AD end -->
+ <!--[if !IE]>|xGv00|b56be811670d6b843d1850a37eb359c8<![endif]-->
+ <!--[if !IE]>|xGv00|eb9b7592e9b0df8c2c340b640f4c26bf<![endif]-->
+ <!--[if !IE]>|xGv00|d7fafb4b3c987150d198b9340c82e8f0<![endif]-->
+
+
+
+ <iframe style="display: none;" id="proxy_ifrm" src="http://radio.t.qq.com/proxy.html"></iframe><input id="auto_gen_1" value="" style="position:absolute;left:-1000px;top:50px;width:10px;z-index:-1;cursor:none;" type="text" />
+ <div id="rsDetector" style="display: block; width: 1px; height: 1px; position: relative; font-size: 0px;"><object id="auto_gen_2" data="//ra.gtimg.com/web/res/loadTimer.swf" style="outline:none;width:1px;height:1px;"><param name="allowscriptaccess" value="always" /><param name="wmode" value="opaque" /><param name="quality" value="high" /><param name="flashvars" value="res=http%3A%2F%2Fswa.gtimg.com%2Fweb%2Fsnswin%2F2016%2F09%2F02%2F10%2F1238620.swf&amp;callb=crystal.resourceSpeedCallback&amp;timeout=6000&amp;ime=true&amp;setFocus=crystal.ime.setFocus&amp;swfid=auto_gen_2" /><param name="type" value="application/x-shockwave-flash" /></object></div>
+</body>
+
+</html>
+<!--[if !IE]>|xGv00|c2108ceaed886252e3e2ccad931aa182<![endif]-->
diff --git a/test/test-pages/remove-extra-brs/expected.html b/test/test-pages/remove-extra-brs/expected.html
index f8f8a6c..f731d75 100644
--- a/test/test-pages/remove-extra-brs/expected.html
+++ b/test/test-pages/remove-extra-brs/expected.html
@@ -1,16 +1,11 @@
-<div>
- <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
- tempor incididunt ut labore et dolore magna aliqua.</p>
- <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>
- </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
+<div id="readability-page-1" class="page">
+ <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>
+ </div>
+</div> \ No newline at end of file
diff --git a/test/test-pages/remove-extra-paragraphs/expected.html b/test/test-pages/remove-extra-paragraphs/expected.html
index a7c6318..ba61869 100644
--- a/test/test-pages/remove-extra-paragraphs/expected.html
+++ b/test/test-pages/remove-extra-paragraphs/expected.html
@@ -1,23 +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>
-
+
</div> \ No newline at end of file
diff --git a/test/test-pages/remove-script-tags/expected.html b/test/test-pages/remove-script-tags/expected.html
index 769cc06..2bc8824 100644
--- a/test/test-pages/remove-script-tags/expected.html
+++ b/test/test-pages/remove-script-tags/expected.html
@@ -13,7 +13,7 @@
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-brs/expected.html b/test/test-pages/replace-brs/expected.html
index ba2d4fd..56e36a4 100644
--- a/test/test-pages/replace-brs/expected.html
+++ b/test/test-pages/replace-brs/expected.html
@@ -1,14 +1,14 @@
<div><p>
- Lorem ipsum</p><p>dolor sit</p><p>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
+ Lorem ipsum<br></br>dolor sit</p><p>amet, consectetur adipisicing elit, sed do eiusmod<br></br>
+ tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,<br></br>
+ quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo</p><p>
+ consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse<br></br>
+ cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non<br></br>
proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
</p></div><div><p>
- Tempor</p><p>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
+ Tempor</p><p>incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,<br></br>
+ quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo<br></br>
+ consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse</p><p>
+ cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non<br></br>
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-brs/source.html b/test/test-pages/replace-brs/source.html
index e1d2e78..2283d65 100644
--- a/test/test-pages/replace-brs/source.html
+++ b/test/test-pages/replace-brs/source.html
@@ -8,19 +8,19 @@
<article>
<h1>Lorem</h1>
<div>
- Lorem ipsum<br/>dolor sit<br/> <br/><br/>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
+ Lorem ipsum<br/>dolor sit<br/> <br/><br/>amet, consectetur adipisicing elit, sed do eiusmod<br/>
+ tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,<br/>
+ quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo<br/> <br/>
+ consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse<br/>
+ cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non<br/>
proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
</div>
<h2>Foo</h2>
<div>
- Tempor<br/><br/>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
+ Tempor<br/><br/>incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,<br/>
+ quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo<br/>
+ consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse<br/><br/>
+ cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non<br/>
proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
</div>
</article>
diff --git a/test/test-pages/replace-font-tags/expected.html b/test/test-pages/replace-font-tags/expected.html
index 9d6025c..a36b1a2 100644
--- a/test/test-pages/replace-font-tags/expected.html
+++ b/test/test-pages/replace-font-tags/expected.html
@@ -1,6 +1,5 @@
<article>
- <p>
- <span face="Arial" size="2">Lorem ipsum dolor</span> sit amet, consectetur adipisicing elit, sed do eiusmod
+ <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
diff --git a/test/test-pages/rtl-1/source.html b/test/test-pages/rtl-1/source.html
index 597c427..f92ede1 100644
--- a/test/test-pages/rtl-1/source.html
+++ b/test/test-pages/rtl-1/source.html
@@ -10,7 +10,7 @@
<main>
<article>
<h1>Lorem</h1>
- <p>
+ <p>f
Lorem ipsum dolor sit amet.
</p>
<p>
diff --git a/test/test-pages/simplyfound-1/expected.html b/test/test-pages/simplyfound-1/expected.html
index 55b74a9..838d7a6 100644
--- a/test/test-pages/simplyfound-1/expected.html
+++ b/test/test-pages/simplyfound-1/expected.html
@@ -1,18 +1,18 @@
<div>
<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 &amp; 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/social-buttons/expected.html b/test/test-pages/social-buttons/expected.html
index 6d135be..84b1d41 100644
--- a/test/test-pages/social-buttons/expected.html
+++ b/test/test-pages/social-buttons/expected.html
@@ -11,7 +11,7 @@
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>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
diff --git a/test/test-pages/table-style-attributes/expected.html b/test/test-pages/table-style-attributes/expected.html
index c1f0a1a..48d1851 100644
--- a/test/test-pages/table-style-attributes/expected.html
+++ b/test/test-pages/table-style-attributes/expected.html
@@ -1,55 +1,44 @@
-<div>
- <p>
- <span size="+3"><b>linux usability
- <span size="4"><br></br>...or, why do I bother.</span></b></span><br></br> © 2002, 2003
- <a href="mailto:/dev/[email protected]?subject=Please%20delete%20this%20message%20without%20reading%20it.">Jamie Zawinski</a> </p>
-
-
+<div id="readability-page-1" class="page">
+ <p> <span size="+3"><b>linux usability
+ <span size="4"><br/>...or, why do I bother.</span></b>
+ </span><br/> © 2002, 2003 <a href="mailto:/dev/[email protected]?subject=Please%20delete%20this%20message%20without%20reading%20it.">Jamie Zawinski</a> </p>
<div>
- <table><tbody><tr><td>
+ <table>
+ <tbody>
+ <tr>
+ <td>
<p> In December 2002, I tried to install some software on my computer. The experience was, shall we say, less than pleasant. On many levels. I wrote about my experience, as I so often do. </p>
<p> Then in January, the jackasses over at Slashdot <a href="http://slashdot.org/article.pl?sid=03/01/24/1440207">posted</a> a link to it, calling it a "review" of Linux video software. I guess you could consider it a review, if you were to squint at it just right. But really what it is is a <i>rant</i> about how I had an evening stolen from me by crap software design. It is a flame about the pathetic state of Linux usability in general, and the handful of video players I tried out in particular. It makes no attempt to be balanced or objective or exhaustive. It is a description of my experience. Perhaps your experience was different. Good for you. </p>
<p> So of course that day I got hundreds of emails about it. Every Linux apologist in the world wanted to make sure I was fully informed of their opinion. The replies were roughly in the following groups: </p>
-
- <ul><li> "Right on! I had exactly the same experience! Thank you for putting it into words." <i>(This was about 1/3 of the replies.)</i>
-
- </li>
- <li> "You're clearly an idiot, Linux is too sophisticated for you, you clearly are incapable of understanding anything, you should go back to kindergarten and/or use a Mac." <i>(Oddly, all of these messages used the word</i> `clearly' <i>repeatedly.)</i>
-
- </li>
- <li> "If you don't like it, fix it yourself."
-
- </li>
- <li> "Netscape sucks! XEmacs sucks! You suck! I never liked you anyway! And you swear too much!"
-
- </li>
- <li> "How dare you criticize someone else's work! You got it for free! You should be on your knees thanking them for wasting your time!"
-
- </li>
- <li> "While you have some valid complaints, I'm going to focus on this one inconsequential error you made in your characterization of one of the many roadblocks you encountered. You suck!"
-
- </li>
- <li> "It's your fault for using Red Hat! You should be using Debian/<wbr></wbr>Mandrake/<wbr></wbr>Gentoo instead!"
-
- </li>
+ <ul>
+ <li> "Right on! I had exactly the same experience! Thank you for putting it into words." <i>(This was about 1/3 of the replies.)</i> </li>
+ <li> "You're clearly an idiot, Linux is too sophisticated for you, you clearly are incapable of understanding anything, you should go back to kindergarten and/or use a Mac." <i>(Oddly, all of these messages used the word</i> `clearly' <i>repeatedly.)</i> </li>
+ <li> "If you don't like it, fix it yourself." </li>
+ <li> "Netscape sucks! XEmacs sucks! You suck! I never liked you anyway! And you swear too much!" </li>
+ <li> "How dare you criticize someone else's work! You got it for free! You should be on your knees thanking them for wasting your time!" </li>
+ <li> "While you have some valid complaints, I'm going to focus on this one inconsequential error you made in your characterization of one of the many roadblocks you encountered. You suck!" </li>
+ <li> "It's your fault for using Red Hat! You should be using Debian/<wbr/>Mandrake/<wbr/>Gentoo instead!" </li>
<li> "Red Hat 7.2 is totally obsolete! It's almost 14 months old! What were you expecting!" </li>
- </ul><p> While I am flattered that so many logorrheic Linux fanboys are sufficiently interested in my opinions and experiences to share their deeply heartfelt views with me, you can all rest assured that: </p>
-
- <ul><ul type="A"><li> I've heard it before; and </li>
+ </ul>
+ </td>
+ <td>
+ <p> While I am flattered that so many logorrheic Linux fanboys are sufficiently interested in my opinions and experiences to share their deeply heartfelt views with me, you can all rest assured that: </p>
+ <ul>
+ <ul type="A">
+ <li> I've heard it before; and </li>
<li> I didn't care the first time. </li>
- </ul></ul><p> So please. Don't bother sending me any more mail about this. It's a near certainty that I will just delete it unread, so you might as well not waste your time. Feel free to call me names on your own web page if you feel the need to get it out of your system. But kindly stay out of my inbox.
-
-
- </p>
+ </ul>
+ </ul>
+ <p> So please. Don't bother sending me any more mail about this. It's a near certainty that I will just delete it unread, so you might as well not waste your time. Feel free to call me names on your own web page if you feel the need to get it out of your system. But kindly stay out of my inbox. </p>
</td>
- </tr></tbody></table></div>
-
- <p>
- <span size="+3"><b>that said...</b></span>
- </p>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <p> <span size="+3"><b>that said...</b></span> </p>
<p> I understand that one can play videos on one's computer. I understand these videos come in many different formats. Every now and then I try to figure out what the Done Thing is, as far as playing movies on one's Linux machine. </p>
-
- <ul> (Really my eventual goal is to be able to <i>create</i> video on Linux, but I figured I'd start small, and see if I could just get <i>playback</i> working before trying something that is undoubtedly ten thousand times harder.) </ul><p> I finally found <a href="http://mirrors.sctpc.com/dominik/linux/pkgs/mplayer/">RPMs</a> of <a href="http://www.mplayerhq.hu/">mplayer</a> that would consent to install themselves on a Red Hat 7.2 machine, and actually got it to play some videos. Amazing. But it's a total pain in the ass to use due to rampant "themeing." <i>Why do people do this?</i> They map this stupid shaped window with no titlebar (oh, sorry, your choice of a dozen stupidly-shaped windows without titlebars) all of which use fonts that are way too small to read. But, here's the best part, there's no way to raise the window to the top. So if another window ever gets on top of it, well, sorry, you're out of luck. And half of the themes always map the window at the very bottom of the
+ <ul> (Really my eventual goal is to be able to <i>create</i> video on Linux, but I figured I'd start small, and see if I could just get <i>playback</i> working before trying something that is undoubtedly ten thousand times harder.) </ul>
+ <p> I finally found <a href="http://mirrors.sctpc.com/dominik/linux/pkgs/mplayer/">RPMs</a> of <a href="http://www.mplayerhq.hu/">mplayer</a> that would consent to install themselves on a Red Hat 7.2 machine, and actually got it to play some videos. Amazing. But it's a total pain in the ass to use due to rampant "themeing." <i>Why do people do this?</i> They map this stupid shaped window with no titlebar (oh, sorry, your choice of a dozen stupidly-shaped windows without titlebars) all of which use fonts that are way too small to read. But, here's the best part, there's no way to raise the window to the top. So if another window ever gets on top of it, well, sorry, you're out of luck. And half of the themes always map the window at the very bottom of the
<nobr>screen --</nobr> conveniently <i>under</i> my panel where I can't reach it. </p>
<p> Resizing the window changes the aspect ratio of the video! Yeah, I'm sure someone has <i>ever</i> wanted that. </p>
<p> It moves the mouse to the upper left corner of every dialog box it creates! Which is great, because that means that when it gets into this cute little state of popping up a blank dialog that says "Error" five times a second, you can't even move the mouse over to another window to kill the program, you have to log in from another machine. </p>
@@ -62,39 +51,39 @@ RPMs</a>, and it sucks about the same as mplayer, and in about the same ways, th
<p> Then I checked out <a href="http://www.dtek.chalmers.se/groups/dvd/">Ogle</a> again, and it hasn't been updated since the last time I tried, six months ago. It's a pretty decent DVD player, if you have the physical DVD. It does on-screen menus, and you can click on them with the mouse. But I don't need a DVD player (I have a hardware DVD player that works just fine.) It can't, as far as I can tell, play anything but actual discs. </p>
<p> Oh, and even though I have libdvdcss installed (as evidenced by the fact that Ogle actually works) Xine won't play the same disc that Ogle will play. It seems to be claiming that the CSS stuff isn't installed, which it clearly is. </p>
<p> An idiocy that all of these programs have in common is that, in addition to opening a window for the movie, and a window for the control panel, they <i>also</i> spray a constant spatter of curses crud on the terminal they were started from. I imagine at some point, there was some user who said, ``this program is pretty nice, but you know what it's missing? It's missing a lot of pointless chatter about what plugins and fonts have been loaded!'' </p>
-
- <hr></hr><b>And here's the Random Commentary section:</b>
-
+ <hr/> <b>And here's the Random Commentary section:</b>
<blockquote> <b><a href="http://www.lazycat.org/">Makali</a> wrote:</b>
<ul><i>
Whenever a programmer thinks, "Hey, skins, what a cool idea", their
computer's speakers should create some sort of cock-shaped soundwave
and plunge it repeatedly through their skulls.
- </i></ul><p> I am fully in support of this proposed audio-cock technology. </p>
+ </i></ul>
+ <p> I am fully in support of this proposed audio-cock technology. </p>
<p><b>Various people wrote:</b> </p>
<ul><i>
You shouldn't even bother compiling the GUI into mplayer!
- </i></ul><p> So I should solve the problem of ``crappy GUI'' by replacing it with ``no GUI at all?'' I should use the program only from the command line, or by memorizing magic keystrokes? Awesome idea. </p>
+ </i></ul>
+ <p> So I should solve the problem of ``crappy GUI'' by replacing it with ``no GUI at all?'' I should use the program only from the command line, or by memorizing magic keystrokes? Awesome idea. </p>
<p><b>Various other people wrote:</b> </p>
<ul><i>
You didn't try <a href="http://www.videolan.org/vlc/">vlc</a>!
- </i></ul><p> True, I hadn't. Now I have. It has an overly-complicated UI, (the Preferences panel is a festival of overkill) but at least it uses standard menus and buttons, so it doesn't make you want to claw your eyes out immediately. But, it can only play a miniscule number of video formats, so it's mostly useless. <i>*plonk*</i> </p>
+ </i></ul>
+ <p> True, I hadn't. Now I have. It has an overly-complicated UI, (the Preferences panel is a festival of overkill) but at least it uses standard menus and buttons, so it doesn't make you want to claw your eyes out immediately. But, it can only play a miniscule number of video formats, so it's mostly useless. <i>*plonk*</i> </p>
<p><b>Someone else wrote:</b> </p>
<ul><i>
Have you considered changing distributions?
- </i></ul><p> Yes, every single time I try something like this, I very seriously consider <a href="http://fakehost/test/../gruntle/bittybox.html">getting a Mac</a>. </p>
+ </i></ul>
+ <p> Yes, every single time I try something like this, I very seriously consider <a href="http://fakehost/gruntle/bittybox.html">getting a Mac</a>. </p>
<p> Really the only thing that's stopping me is that I fear the <a href="http://www.xemacs.org/">Emacs situation</a>. </p>
<p> (By which I mean, ``Lack of a usable version thereof.'' No, running RMSmacs inside a terminal window doesn't qualify. Nor does running an X server on the Mac: if I were going to switch, why in the world would I continue inflicting the X Windows Disaster on myself? Wouldn't getting away from that be the <i>whole
point?</i>) </p>
-
- <ul><span size="-1"> (I understand there is an almost-functional Aqua version of <a href="http://fakehost/test/../hacks/why-cooperation-with-rms-is-impossible.mp3">
+ <ul> <span size="-1"> (I understand there is an almost-functional Aqua version of <a href="http://fakehost/hacks/why-cooperation-with-rms-is-impossible.mp3">
RMSmacs</a> now. I'll probably check it out at some point, but the problem with <i><a href="http://fakehost/test/lemacs.html">me</a></i> switching from XEmacs to RMSmacs is that it would probably result in another <a href="http://slashdot.org/article.pl?sid=03/01/24/1440207">
- Slashdork</a> post, meaning I'd wake up to another 150+ poorly spelled flames in my inbox... I'm hoping for a Aquafied XEmacs, but I know that's not likely to happen any time soon.)</span>
- </ul><p> By the way, the suggestion to switch Linux distrubutions in order to get a single app to work might sound absurd at first. And that's because <a href="http://fakehost/test/linux.html">it is</a>. But I've been saturated with Unix-peanut-gallery effluvia for so long that it no longer even surprises me when every
+ Slashdork</a> post, meaning I'd wake up to another 150+ poorly spelled flames in my inbox... I'm hoping for a Aquafied XEmacs, but I know that's not likely to happen any time soon.)</span> </ul>
+ <p> By the way, the suggestion to switch Linux distrubutions in order to get a single app to work might sound absurd at first. And that's because <a href="http://fakehost/test/linux.html">it is</a>. But I've been saturated with Unix-peanut-gallery effluvia for so long that it no longer even surprises me when every
<nobr>question --</nobr> no matter how
<nobr>simple --</nobr> results in someone suggesting that you either A) patch your kernel or B) change distros. It's inevitable and inescapable, like Hitler. </p>
</blockquote>
-
- <hr></hr>
- <p> <a href="http://fakehost/test/../"><img alt="[ up ]" onmouseout="this.src=&quot;../compass1.gif&quot;" onmouseover="this.src=&quot;../compass2.gif&quot;" src="http://fakehost/test/../compass1.gif"></img></a> </p>
+ <hr/>
+ <p> <a href="http://fakehost/"><img alt="[ up ]" src="http://fakehost/compass1.gif" onmouseover="this.src=&quot;../compass2.gif&quot;" onmouseout="this.src=&quot;../compass1.gif&quot;"/></a> </p>
</div> \ No newline at end of file
diff --git a/test/test-pages/table-style-attributes/source.html b/test/test-pages/table-style-attributes/source.html
index 4b7196b..0e20275 100644
--- a/test/test-pages/table-style-attributes/source.html
+++ b/test/test-pages/table-style-attributes/source.html
@@ -66,6 +66,8 @@
</li>
<li> "Red Hat 7.2 is totally obsolete! It's almost 14 months old! What were you expecting!" </li>
</ul>
+ </td>
+ <td bgcolor="#FEFFE6">
<p> While I am flattered that so many logorrheic Linux fanboys are sufficiently interested in my opinions and experiences to share their deeply heartfelt views with me, you can all rest assured that: </p>
<p></p>
<ul>
diff --git a/test/test-pages/tmz-1/expected.html b/test/test-pages/tmz-1/expected.html
index 2c23788..48f65bd 100644
--- a/test/test-pages/tmz-1/expected.html
+++ b/test/test-pages/tmz-1/expected.html
@@ -1,36 +1,18 @@
-<div id="post-2015_02_26_lupita-nyongo-pearl-dress-stolen-oscars">
- <p>
- <h2>Lupita Nyong'o</h2>
-
- <h4>$150K Pearl Oscar Dress ... STOLEN!!!!</h4>
-
- </p>
- <h5>
- 2/26/2015 7:11 AM PST BY TMZ STAFF
- </h5>
-
- <div itemprop="articleBody">
- <p><span>EXCLUSIVE</span>
- </p>
- <p>
- <img alt="0225-lupita-nyongo-getty-01" src="http://ll-media.tmz.com/2015/02/26/0225-lupita-nyongo-getty-4.jpg"></img><strong>Lupita Nyong</strong>'<strong>o</strong>'s now-famous Oscar dress
- -- adorned in pearls -- was stolen right out of her hotel room ... TMZ
- has learned.</p>
- <p>Law enforcement sources tell TMZ ... the dress was taken out of Lupita's
- room at The London West Hollywood. The dress is made of pearls ... 6,000
- white Akoya pearls. It's valued at $150,000.</p>
- <p>Our sources say Lupita told cops it was taken from her room sometime between
- 8 AM and 9 PM Wednesday ... while she was gone.  </p>
- <p>We're told there is security footage that cops are looking at that could
- catch the culprit right in the act. </p>
- <p>
- <img alt="update_graphic_red_bar" src="http://ll-media.tmz.com/2013/11/20/update-graphic-red-bar.jpg"></img><strong>12:00 PM PT</strong> -- Sheriff's deputies were at The London Thursday
- morning.  We know they were in the manager's office and we're told
- they have looked at security footage to determine if they can ID the culprit.</p>
- <p>
- <img alt="0226-SUB-london-hotel-swipe-tmz-02" src="http://ll-media.tmz.com/2015/02/26/0226-sub-london-hotel-swipe-tmz-11.jpg"></img></p> <a name="continued"></a>
-
-
- </div>
-
- </div> \ No newline at end of file
+<div id="readability-page-1" class="page">
+ <div id="post-2015_02_26_lupita-nyongo-pearl-dress-stolen-oscars">
+ <p>
+ <h2>Lupita Nyong'o</h2>
+ <h4>$150K Pearl Oscar Dress ... STOLEN!!!!</h4>
+ </p>
+ <h5> 2/26/2015 7:11 AM PST BY TMZ STAFF </h5>
+ <div itemprop="articleBody">
+ <p><span>EXCLUSIVE</span> </p>
+ <p> <img alt="0225-lupita-nyongo-getty-01" src="http://ll-media.tmz.com/2015/02/26/0225-lupita-nyongo-getty-4.jpg" /><strong>Lupita Nyong</strong>'<strong>o</strong>'s now-famous Oscar dress -- adorned in pearls -- was stolen right out of her hotel room ... TMZ has learned.</p>
+ <p>Law enforcement sources tell TMZ ... the dress was taken out of Lupita's room at The London West Hollywood. The dress is made of pearls ... 6,000 white Akoya pearls. It's valued at $150,000.</p>
+ <p>Our sources say Lupita told cops it was taken from her room sometime between 8 AM and 9 PM Wednesday ... while she was gone. &nbsp;</p>
+ <p>We're told there is security footage that cops are looking at that could catch the culprit right in the act.&nbsp;</p>
+ <p> <img alt="update_graphic_red_bar" src="http://ll-media.tmz.com/2013/11/20/update-graphic-red-bar.jpg" /><strong>12:00 PM PT</strong> -- Sheriff's deputies were at The London Thursday morning. &nbsp;We know they were in the manager's office and we're told they have looked at security footage to determine if they can ID the culprit.</p>
+ <p> <img alt="0226-SUB-london-hotel-swipe-tmz-02" src="http://ll-media.tmz.com/2015/02/26/0226-sub-london-hotel-swipe-tmz-11.jpg" /> </p>
+ </div>
+ </div>
+</div> \ No newline at end of file
diff --git a/test/test-pages/tumblr/expected.html b/test/test-pages/tumblr/expected.html
index ad7a7d8..ab9d11b 100644
--- a/test/test-pages/tumblr/expected.html
+++ b/test/test-pages/tumblr/expected.html
@@ -1,11 +1,11 @@
<div>
<div id="posts">
-
-
+
+
<div>
<h3><a href="http://mcupdate.tumblr.com/post/96439224994/minecraft-18-the-bountiful-update">Minecraft 1.8 - The Bountiful Update</a></h3>
- <p>+ Added Granite, Andesite, and Diorite stone blocks, with smooth versions<br></br>+ Added Slime Block<br></br>+ Added Iron Trapdoor<br></br>+ Added Prismarine and Sea Lantern blocks<br></br>+ Added the Ocean Monument<br></br>+ Added Red Sandstone<br></br>+ Added Banners<br></br>+ Added Armor Stands<br></br>+ Added Coarse Dirt (dirt where grass won’t grow)<br></br>+ Added Guardian mobs, with item drops<br></br>+ Added Endermite mob<br></br>+ Added Rabbits, with item drops<br></br>+ Added Mutton and Cooked Mutton<br></br>+ Villagers will harvest crops and plant new ones<br></br>+ Mossy Cobblestone and Mossy Stone Bricks are now craftable<br></br>+ Chiseled Stone Bricks are now craftable<br></br>+ Doors and fences now come in all wood type variants<br></br>+ Sponge block has regained its water-absorbing ability and becomes wet<br></br>+ Added a spectator game mode (game mode 3)<br></br>+ Added one new achievement<br></br>+ Added “Customized” world type<br></br>+ Added hidden “Debug Mode” world type<br></br>+ Worlds can now have a world barrier<br></br>+ Added @e target selector for Command Blocks<br></br>+ Added /blockdata command<br></br>+ Added /clone command<br></br>+ Added /execute command<br></br>+ Added /fill command<br></br>+ Added /particle command<br></br>+ Added /testforblocks command<br></br>+ Added /title command<br></br>+ Added /trigger command<br></br>+ Added /worldborder command<br></br>+ Added /stats command<br></br>+ Containers can be locked in custom maps by using the “Lock” data tag<br></br>+ Added logAdminCommands, showDeathMessages, reducedDebugInfo, sendCommandFeedback, and randomTickSpeed game rules<br></br>+ Added three new statistics<br></br>+ Player skins can now have double layers across the whole model, and left/right arms/legs can be edited independently<br></br>+ Added a new player model with smaller arms, and a new player skin called Alex?<br></br>+ Added options for configuring what pieces of the skin that are visible<br></br>+ Blocks can now have custom visual variations in the resource packs<br></br>+ Minecraft Realms now has an activity chart, so you can see who has been online<br></br>+ Minecraft Realms now lets you upload your maps<br></br>* Difficulty setting is saved per world, and can be locked if wanted<br></br>* Enchanting has been redone, now costs lapis lazuli in addition to enchantment levels<br></br>* Villager trading has been rebalanced<br></br>* Anvil repairing has been rebalanced<br></br>* Considerable faster client-side performance<br></br>* Max render distance has been increased to 32 chunks (512 blocks)<br></br>* Adventure mode now prevents you from destroying blocks, unless your items have the CanDestroy data tag<br></br>* Resource packs can now also define the shape of blocks and items, and not just their textures<br></br>* Scoreboards have been given a lot of new features<br></br>* Tweaked the F3 debug screen<br></br>* Block ID numbers (such as 1 for stone), are being replaced by ID names (such as minecraft:stone)<br></br>* Server list has been improved<br></br>* A few minor changes to village and temple generation<br></br>* Mob heads for players now show both skin layers<br></br>* Buttons can now be placed on the ceiling<br></br>* Lots and lots of other changes<br></br>* LOTS AND LOTS of other changes<br></br>- Removed Herobrine</p>
+ <div><p>+ Added Granite, Andesite, and Diorite stone blocks, with smooth versions<br></br>+ Added Slime Block<br></br>+ Added Iron Trapdoor<br></br>+ Added Prismarine and Sea Lantern blocks<br></br>+ Added the Ocean Monument<br></br>+ Added Red Sandstone<br></br>+ Added Banners<br></br>+ Added Armor Stands<br></br>+ Added Coarse Dirt (dirt where grass won’t grow)<br></br>+ Added Guardian mobs, with item drops<br></br>+ Added Endermite mob<br></br>+ Added Rabbits, with item drops<br></br>+ Added Mutton and Cooked Mutton<br></br>+ Villagers will harvest crops and plant new ones<br></br>+ Mossy Cobblestone and Mossy Stone Bricks are now craftable<br></br>+ Chiseled Stone Bricks are now craftable<br></br>+ Doors and fences now come in all wood type variants<br></br>+ Sponge block has regained its water-absorbing ability and becomes wet<br></br>+ Added a spectator game mode (game mode 3)<br></br>+ Added one new achievement<br></br>+ Added “Customized” world type<br></br>+ Added hidden “Debug Mode” world type<br></br>+ Worlds can now have a world barrier<br></br>+ Added @e target selector for Command Blocks<br></br>+ Added /blockdata command<br></br>+ Added /clone command<br></br>+ Added /execute command<br></br>+ Added /fill command<br></br>+ Added /particle command<br></br>+ Added /testforblocks command<br></br>+ Added /title command<br></br>+ Added /trigger command<br></br>+ Added /worldborder command<br></br>+ Added /stats command<br></br>+ Containers can be locked in custom maps by using the “Lock” data tag<br></br>+ Added logAdminCommands, showDeathMessages, reducedDebugInfo, sendCommandFeedback, and randomTickSpeed game rules<br></br>+ Added three new statistics<br></br>+ Player skins can now have double layers across the whole model, and left/right arms/legs can be edited independently<br></br>+ Added a new player model with smaller arms, and a new player skin called Alex?<br></br>+ Added options for configuring what pieces of the skin that are visible<br></br>+ Blocks can now have custom visual variations in the resource packs<br></br>+ Minecraft Realms now has an activity chart, so you can see who has been online<br></br>+ Minecraft Realms now lets you upload your maps<br></br>* Difficulty setting is saved per world, and can be locked if wanted<br></br>* Enchanting has been redone, now costs lapis lazuli in addition to enchantment levels<br></br>* Villager trading has been rebalanced<br></br>* Anvil repairing has been rebalanced<br></br>* Considerable faster client-side performance<br></br>* Max render distance has been increased to 32 chunks (512 blocks)<br></br>* Adventure mode now prevents you from destroying blocks, unless your items have the CanDestroy data tag<br></br>* Resource packs can now also define the shape of blocks and items, and not just their textures<br></br>* Scoreboards have been given a lot of new features<br></br>* Tweaked the F3 debug screen<br></br>* Block ID numbers (such as 1 for stone), are being replaced by ID names (such as minecraft:stone)<br></br>* Server list has been improved<br></br>* A few minor changes to village and temple generation<br></br>* Mob heads for players now show both skin layers<br></br>* Buttons can now be placed on the ceiling<br></br>* Lots and lots of other changes<br></br>* LOTS AND LOTS of other changes<br></br>- Removed Herobrine</p></div>
</div>
-
+
</div>
</div> \ 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 1853a35..7df295b 100644
--- a/test/test-pages/wapo-1/expected.html
+++ b/test/test-pages/wapo-1/expected.html
@@ -18,7 +18,7 @@
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"> <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 channel="wp.com"> <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
@@ -47,8 +47,8 @@
said the U.S. government was willing to assist Tunisian authorities in
the investigation.</p>
<div>
-
- <p> <span>Gunmen in military uniforms stormed Tunisia's national museum, killing at least 19 people, most of them foreign tourists. (Reuters)</span>
+
+ <p><span>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
@@ -59,7 +59,7 @@
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"> <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 channel="wp.com"> <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
@@ -69,8 +69,8 @@
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"> <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 channel="wp.com"> <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>
@@ -85,8 +85,8 @@
fire for what many Tunisians saw as a failure to crack down on Islamist
extremists.</p>
<div>
- <span>Map: Flow of foreign fighters to Syria</span>
- </div>
+ <p><span>Map: Flow of foreign fighters to Syria</span>
+ </p></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
@@ -112,8 +112,7 @@
<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>
- <img 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><img 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></p>
<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>
@@ -128,18 +127,18 @@
<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 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 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 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 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/wapo-2/expected.html b/test/test-pages/wapo-2/expected.html
index 2f540e2..e267459 100644
--- a/test/test-pages/wapo-2/expected.html
+++ b/test/test-pages/wapo-2/expected.html
@@ -1,4 +1,6 @@
-<article><p>President Obama told the U.N. General Assembly 18 months ago that he would
+<div> <a name="1c164a7079bfe20ebd611d79f96418b5a225cbc6"></a>
+ <p><img data-hi-res-src="https://img.washingtonpost.com/rf/image_1484w/2010-2019/WashingtonPost/2015/03/18/National-Economy/Images/Nic6429750-1140.jpg?uuid=zLIZQs2KEeSip5UXo6cFBg" data-low-res-src="https://img.washingtonpost.com/rf/image_400w/2010-2019/WashingtonPost/2015/03/18/National-Economy/Images/Nic6429750-1140.jpg?uuid=zLIZQs2KEeSip5UXo6cFBg" src="https://img.washingtonpost.com/rf/image_400w/2010-2019/WashingtonPost/2015/03/18/National-Economy/Images/Nic6429750-1140.jpg?uuid=zLIZQs2KEeSip5UXo6cFBg"></img><br></br><span>Israeli Prime Minister Benjamin Netanyahu reacts as he visits the Western Wall in Jerusalem on March 18 following his party's victory in Israel's general election. (Thomas Coex/AFP/Getty Images)</span>
+ </p></div><article><p>President Obama told the U.N. General Assembly 18 months ago that he would
seek “real breakthroughs on these two issues — Iran’s nuclear program and
­Israeli-Palestinian peace.”</p>
<p>But <a href="http://www.washingtonpost.com/world/netanyahu-sweeps-to-victory-in-israeli-election/2015/03/18/af4e50ca-ccf2-11e4-8730-4f473416e759_story.html" title="www.washingtonpost.com">Benjamin Netanyahu’s triumph</a> in Tuesday’s
@@ -17,8 +19,8 @@
<p>Aside from Russian President Vladi­mir Putin, few foreign leaders so brazenly
stand up to Obama and even fewer among longtime allies.</p>
<div>
-
- <p> <span>Israeli Prime Minister Benjamin Netanyahu pledged to form a new governing coalition quickly after an upset election victory that was built on a shift to the right. (Reuters)</span>
+
+ <p><span>Israeli Prime Minister Benjamin Netanyahu pledged to form a new governing coalition quickly after an upset election victory that was built on a shift to the right. (Reuters)</span>
</p>
</div>
<p>In the past, Israeli leaders who risked damaging the country’s most important
@@ -46,7 +48,7 @@
<p>Earnest added that Netan­yahu’s election-eve disavowal of a two-state
solution for Israelis and Palestinians would force the administration to
reconsider its approach to peace in the region.</p>
-
+
<p>Over the longer term, a number of analysts say that Obama and Netan­yahu
will seek to play down the friction between them and point to areas of
continuing cooperation on military and economic issues.</p>
@@ -92,9 +94,8 @@
because it can’t pay wages anymore.</p>
<p>“That could be an issue forced onto the agenda about the same time as
a potential nuclear deal.”</p>
-
- </article><div><a href="http://www.washingtonpost.com/people/steven-mufson"><img src="http://img.washingtonpost.com/wp-apps/imrs.php?src=http://www.washingtonpost.com/blogs/wonkblog/files/2014/07/mufson_steve.jpg&amp;h=180&amp;w=180"></img></a>
- <p>Steven Mufson covers the White House. Since joining The Post, he has covered
+
+ </article><div><p><a href="http://www.washingtonpost.com/people/steven-mufson"><img src="http://img.washingtonpost.com/wp-apps/imrs.php?src=http://www.washingtonpost.com/blogs/wonkblog/files/2014/07/mufson_steve.jpg&amp;h=180&amp;w=180"></img></a></p><p>Steven Mufson covers the White House. Since joining The Post, he has covered
economics, China, foreign policy and energy.</p>
-
+
</div> \ No newline at end of file
diff --git a/test/test-pages/webmd-1/expected.html b/test/test-pages/webmd-1/expected.html
index 6f773fe..9fb196d 100644
--- a/test/test-pages/webmd-1/expected.html
+++ b/test/test-pages/webmd-1/expected.html
@@ -1,13 +1,13 @@
<div id="textArea">
-
-
-
-
-
-
-
+
+
+
+
+
+
+
<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
@@ -39,8 +39,6 @@
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
diff --git a/test/test-pages/webmd-2/expected.html b/test/test-pages/webmd-2/expected.html
index ca22ee7..ea48c7a 100644
--- a/test/test-pages/webmd-2/expected.html
+++ b/test/test-pages/webmd-2/expected.html
@@ -1,18 +1,17 @@
<div id="textArea">
-
-
-
-
-
-
-
+
+
+
+
+
+
+
<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>
-
-
-
- <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>
diff --git a/test/test-pages/wikipedia/expected.html b/test/test-pages/wikipedia/expected.html
index 3ae3f69..16d2b55 100644
--- a/test/test-pages/wikipedia/expected.html
+++ b/test/test-pages/wikipedia/expected.html
@@ -1,10 +1,10 @@
<div dir="ltr" id="mw-content-text" lang="en">
-
+
<p><b>Mozilla</b> is a <a href="http://fakehost/wiki/Free_software" title="Free software">free-software</a> community, created in 1998 by members of <a href="http://fakehost/wiki/Netscape" title="Netscape">Netscape</a>. The Mozilla community uses, develops, spreads and supports Mozilla products, thereby promoting exclusively free software and open standards, with only minor exceptions.<sup id="cite_ref-1"><a href="#cite_note-1">[1]</a></sup> The community is supported institutionally by the <a href="http://fakehost/wiki/Mozilla_Foundation" title="Mozilla Foundation">Mozilla Foundation</a> and its tax-paying subsidiary, the <a href="http://fakehost/wiki/Mozilla_Corporation" title="Mozilla Corporation">Mozilla Corporation</a>.<sup id="cite_ref-2"><a href="#cite_note-2">[2]</a></sup></p>
<p><a href="http://fakehost/wiki/List_of_Mozilla_products" title="List of Mozilla products">Mozilla produces many products</a> such as the <a href="http://fakehost/wiki/Firefox" title="Firefox">Firefox</a> web browser, <a href="http://fakehost/wiki/Mozilla_Thunderbird" title="Mozilla Thunderbird">Thunderbird</a> e-mail client, <a href="http://fakehost/wiki/Firefox_Mobile" title="Firefox Mobile">Firefox Mobile</a> web browser, <a href="http://fakehost/wiki/Firefox_OS" title="Firefox OS">Firefox OS</a> mobile operating system, <a href="http://fakehost/wiki/Bugzilla" title="Bugzilla">Bugzilla</a> bug tracking system and other projects.</p>
-
-
-
+
+
+
<h2><span id="History">History</span><span><span>[</span><a href="http://fakehost/w/index.php?title=Mozilla&amp;action=edit&amp;section=1" title="Edit section: History">edit</a><span>]</span></span>
</h2>
<p>On January 23, 1998, Netscape made two announcements: first, that <a href="http://fakehost/wiki/Netscape_Communicator" title="Netscape Communicator">Netscape Communicator</a> will be free; second, that the source code will also be free.<sup id="cite_ref-3"><a href="#cite_note-3">[3]</a></sup> One day later, <a href="http://fakehost/wiki/Jamie_Zawinski" title="Jamie Zawinski">Jamie Zawinski</a> from Netscape registered <span>mozilla.org</span>.<sup id="cite_ref-4"><a href="#cite_note-4">[4]</a></sup> The project was named Mozilla after the original code name of the <a href="http://fakehost/wiki/Netscape_Navigator" title="Netscape Navigator">Netscape Navigator</a> browser which is a blending of "<a href="http://fakehost/wiki/Mosaic_(web_browser)" title="Mosaic (web browser)">Mosaic</a> and <a href="http://fakehost/wiki/Godzilla" title="Godzilla">Godzilla</a>"<sup id="cite_ref-google_5-0"><a href="#cite_note-google-5">[5]</a></sup> and used to co-ordinate the development of the <a href="http://fakehost/wiki/Mozilla_Application_Suite" title="Mozilla Application Suite">Mozilla Application Suite</a>, the <a href="http://fakehost/wiki/Open_source" title="Open source">open source</a> version of Netscape's internet software, <a href="http://fakehost/wiki/Netscape_Communicator" title="Netscape Communicator">Netscape Communicator</a>.<sup id="cite_ref-Mozilla_Launch_Announcement_6-0"><a href="#cite_note-Mozilla_Launch_Announcement-6">[6]</a></sup><sup id="cite_ref-7"><a href="#cite_note-7">[7]</a></sup> Jamie Zawinski says he came up with the name "Mozilla" at a Netscape staff meeting.<sup id="cite_ref-8"><a href="#cite_note-8">[8]</a></sup><sup id="cite_ref-9"><a href="#cite_note-9">[9]</a></sup> A small group of Netscape employees were tasked with coordination of the new community.</p>
@@ -38,51 +38,48 @@
</h2>
<div>
<div>
- <a href="http://fakehost/wiki/File:Mozilla_Firefox_logo_2013.svg"><img alt="" data-file-height="373" data-file-width="352" height="233" src="http://upload.wikimedia.org/wikipedia/commons/thumb/7/76/Mozilla_Firefox_logo_2013.svg/220px-Mozilla_Firefox_logo_2013.svg.png" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/7/76/Mozilla_Firefox_logo_2013.svg/330px-Mozilla_Firefox_logo_2013.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/7/76/Mozilla_Firefox_logo_2013.svg/440px-Mozilla_Firefox_logo_2013.svg.png 2x" width="220"></img></a>
-
+ <p><a href="http://fakehost/wiki/File:Mozilla_Firefox_logo_2013.svg"><img alt="" data-file-height="373" data-file-width="352" height="233" src="http://upload.wikimedia.org/wikipedia/commons/thumb/7/76/Mozilla_Firefox_logo_2013.svg/220px-Mozilla_Firefox_logo_2013.svg.png" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/7/76/Mozilla_Firefox_logo_2013.svg/330px-Mozilla_Firefox_logo_2013.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/7/76/Mozilla_Firefox_logo_2013.svg/440px-Mozilla_Firefox_logo_2013.svg.png 2x" width="220"></img></a></p>
</div>
</div>
<h3><span id="Firefox">Firefox</span><span><span>[</span><a href="http://fakehost/w/index.php?title=Mozilla&amp;action=edit&amp;section=6" title="Edit section: Firefox">edit</a><span>]</span></span>
</h3>
-
+
<p><a href="http://fakehost/wiki/Firefox" title="Firefox">Firefox</a> is a <a href="http://fakehost/wiki/Web_browser" title="Web browser">web browser</a>, and is Mozilla's <a href="http://fakehost/wiki/Flagship_product" title="Flagship product">flagship</a> software product. It is available in both desktop and mobile versions. Firefox uses the <a href="http://fakehost/wiki/Gecko_(software)" title="Gecko (software)">Gecko</a> <a href="http://fakehost/wiki/Layout_engine" title="Layout engine">layout engine</a> to render web pages, which implements current and anticipated <a href="http://fakehost/wiki/Web_standards" title="Web standards">web standards</a>.<sup id="cite_ref-42"><a href="#cite_note-42">[42]</a></sup> As of late 2015<sup><a href="http://en.wikipedia.org/w/index.php?title=Mozilla&amp;action=edit">[update]</a></sup>, Firefox has approximately 10-11% of worldwide <a href="http://fakehost/wiki/Usage_share_of_web_browsers#Summary" title="Usage share of web browsers">usage share of web browsers</a>, making it the 4th most-used web browser.<sup id="cite_ref-w3counter1_43-0"><a href="#cite_note-w3counter1-43">[43]</a></sup><sup id="cite_ref-gs.statcounter.com_44-0"><a href="#cite_note-gs.statcounter.com-44">[44]</a></sup><sup id="cite_ref-getclicky1_45-0"><a href="#cite_note-getclicky1-45">[45]</a></sup></p>
<p>Firefox began as an experimental branch of the <a href="http://fakehost/wiki/Mozilla#Mozilla_Project" title="Mozilla">Mozilla codebase</a> by <a href="http://fakehost/wiki/Dave_Hyatt" title="Dave Hyatt">Dave Hyatt</a>, <a href="http://fakehost/wiki/Joe_Hewitt_(programmer)" title="Joe Hewitt (programmer)">Joe Hewitt</a> and <a href="http://fakehost/wiki/Blake_Ross" title="Blake Ross">Blake Ross</a>. They believed the commercial requirements of <a href="http://fakehost/wiki/Netscape" title="Netscape">Netscape's</a> sponsorship and developer-driven <a href="http://fakehost/wiki/Feature_creep" title="Feature creep">feature creep</a> compromised the utility of the Mozilla browser.<sup id="cite_ref-46"><a href="#cite_note-46">[46]</a></sup> To combat what they saw as the <a href="http://fakehost/wiki/Mozilla_Application_Suite" title="Mozilla Application Suite">Mozilla Suite's</a> <a href="http://fakehost/wiki/Software_bloat" title="Software bloat">software bloat</a>, they created a stand-alone browser, with which they intended to replace the Mozilla Suite.</p>
<p>Firefox was originally named <i>Phoenix</i> but the name was changed so as to avoid trademark conflicts with <a href="http://fakehost/wiki/Phoenix_Technologies" title="Phoenix Technologies">Phoenix Technologies</a>. The initially-announced replacement, <i>Firebird</i>, provoked objections from the <a href="http://fakehost/wiki/Firebird_(database_server)" title="Firebird (database server)">Firebird</a> project community.<sup id="cite_ref-47"><a href="#cite_note-47">[47]</a></sup><sup id="cite_ref-48"><a href="#cite_note-48">[48]</a></sup> The current name, Firefox, was chosen on February 9, 2004.<sup id="cite_ref-49"><a href="#cite_note-49">[49]</a></sup></p>
<h3><span id="Firefox_Mobile">Firefox Mobile</span><span><span>[</span><a href="http://fakehost/w/index.php?title=Mozilla&amp;action=edit&amp;section=7" title="Edit section: Firefox Mobile">edit</a><span>]</span></span>
</h3>
-
+
<p>Firefox Mobile (codenamed <i>Fennec</i>) is the build of the <a href="http://fakehost/wiki/Firefox" title="Firefox">Mozilla Firefox</a> <a href="http://fakehost/wiki/Web_browser" title="Web browser">web browser</a> for devices such as <a href="http://fakehost/wiki/Smartphone" title="Smartphone">smartphones</a> and <a href="http://fakehost/wiki/Tablet_computer" title="Tablet computer">tablet computers</a>.</p>
<p>Firefox Mobile uses the same <a href="http://fakehost/wiki/Gecko_(layout_engine)" title="Gecko (layout engine)">Gecko</a> <a href="http://fakehost/wiki/Layout_engine" title="Layout engine">layout engine</a> as <a href="http://fakehost/wiki/Firefox" title="Firefox">Mozilla Firefox</a>. For example, version 1.0 used the same engine as Firefox 3.6, and the following release, 4.0, shared core code with Firefox 4.0. Its features include <a href="http://fakehost/wiki/HTML5" title="HTML5">HTML5</a> support, <a href="http://fakehost/wiki/Firefox_Sync" title="Firefox Sync">Firefox Sync</a>, <a href="http://fakehost/wiki/Add-on_(Mozilla)" title="Add-on (Mozilla)">add-ons</a> support and <a href="http://fakehost/wiki/Tabbed_browsing" title="Tabbed browsing">tabbed browsing</a>.<sup id="cite_ref-50"><a href="#cite_note-50">[50]</a></sup></p>
<p>Firefox Mobile is currently available for <a href="http://fakehost/wiki/Android_(operating_system)" title="Android (operating system)">Android</a> 2.2 and above devices with an <a href="http://fakehost/wiki/ARM_architecture" title="ARM architecture">ARMv7</a> or <a href="http://fakehost/wiki/ARM_architecture" title="ARM architecture">ARMv6</a> CPU.<sup id="cite_ref-51"><a href="#cite_note-51">[51]</a></sup> The x86 architecture is not officially supported.<sup id="cite_ref-52"><a href="#cite_note-52">[52]</a></sup><a href="http://fakehost/wiki/Tristan_Nitot" title="Tristan Nitot">Tristan Nitot</a>, president of <a href="http://fakehost/wiki/Mozilla_Europe" title="Mozilla Europe">Mozilla Europe</a>, has said that it's unlikely that an <a href="http://fakehost/wiki/IPhone" title="IPhone">iPhone</a> or a <a href="http://fakehost/wiki/BlackBerry" title="BlackBerry">BlackBerry</a> version will be released, citing <a href="http://fakehost/wiki/Apple_Inc" title="Apple Inc">Apple's</a> iTunes Store application approval policies (which forbid applications competing with Apple's own, and forbid engines which run downloaded code) and BlackBerry's limited operating system as the reasons.<sup id="cite_ref-53"><a href="#cite_note-53">[53]</a></sup></p>
<h3><span id="Firefox_OS">Firefox OS</span><span><span>[</span><a href="http://fakehost/w/index.php?title=Mozilla&amp;action=edit&amp;section=8" title="Edit section: Firefox OS">edit</a><span>]</span></span>
</h3>
-
+
<p>Firefox OS (project name: <i>Boot to Gecko</i> also known as <i>B2G</i>) is an <a href="http://fakehost/wiki/Open_source" title="Open source">open source</a> <a href="http://fakehost/wiki/Operating_system" title="Operating system">operating system</a> in development by Mozilla that aims to support <a href="http://fakehost/wiki/HTML5" title="HTML5">HTML5</a> apps written using "<a href="http://fakehost/wiki/Open_Web" title="Open Web">open Web</a>" technologies rather than platform-specific native <a href="http://fakehost/wiki/Application_programming_interface" title="Application programming interface">APIs</a>. The concept behind Firefox OS is that all user-accessible software will be HTML5 applications, that use Open Web APIs to access the phone's hardware directly via <a href="http://fakehost/wiki/JavaScript" title="JavaScript">JavaScript</a>.<sup id="cite_ref-54"><a href="#cite_note-54">[54]</a></sup></p>
<p>Some devices using this OS include<sup id="cite_ref-55"><a href="#cite_note-55">[55]</a></sup> Alcatel One Touch Fire, ZTE Open, LG Fireweb.</p>
<h3><span id="Thunderbird">Thunderbird</span><span><span>[</span><a href="http://fakehost/w/index.php?title=Mozilla&amp;action=edit&amp;section=9" title="Edit section: Thunderbird">edit</a><span>]</span></span>
</h3>
-
+
<p><a href="http://fakehost/wiki/Mozilla_Thunderbird" title="Mozilla Thunderbird">Thunderbird</a> is a free, open source, cross-platform email and news client developed by the volunteers of the Mozilla Community.</p>
<p>On July 16, 2012, Mitchell Baker announced that Mozilla's leadership had come to the conclusion that on-going stability was the most important thing for Thunderbird and that innovation in Thunderbird was no longer a priority for Mozilla. In that update Baker also suggested that Mozilla had provided a pathway for community to innovate around Thunderbird if the community chooses.<sup id="cite_ref-56"><a href="#cite_note-56">[56]</a></sup></p>
<h3><span id="SeaMonkey">SeaMonkey</span><span><span>[</span><a href="http://fakehost/w/index.php?title=Mozilla&amp;action=edit&amp;section=10" title="Edit section: SeaMonkey">edit</a><span>]</span></span>
</h3>
-
+
<div>
<div>
- <a href="http://fakehost/wiki/File:SeaMonkey.png"><img alt="" data-file-height="128" data-file-width="128" height="128" src="http://upload.wikimedia.org/wikipedia/commons/0/0d/SeaMonkey.png" width="128"></img></a>
-
+ <p><a href="http://fakehost/wiki/File:SeaMonkey.png"><img alt="" data-file-height="128" data-file-width="128" height="128" src="http://upload.wikimedia.org/wikipedia/commons/0/0d/SeaMonkey.png" width="128"></img></a></p>
</div>
</div>
<p><a href="http://fakehost/wiki/SeaMonkey" title="SeaMonkey">SeaMonkey</a> (formerly the Mozilla Application Suite) is a free and open source cross platform suite of Internet software components including a web browser component, a client for sending and receiving email and <a href="http://fakehost/wiki/USENET" title="USENET">USENET</a> newsgroup messages, an HTML editor (<a href="http://fakehost/wiki/Mozilla_Composer" title="Mozilla Composer">Mozilla Composer</a>) and the <a href="http://fakehost/wiki/ChatZilla" title="ChatZilla">ChatZilla</a> IRC client.</p>
<p>On March 10, 2005, <a href="http://fakehost/wiki/The_Mozilla_Foundation" title="The Mozilla Foundation">the Mozilla Foundation</a> announced that it would not release any official versions of Mozilla Application Suite beyond 1.7.x, since it had now focused on the standalone applications <a href="http://fakehost/wiki/Mozilla_Firefox" title="Mozilla Firefox">Firefox</a> and <a href="http://fakehost/wiki/Mozilla_Thunderbird" title="Mozilla Thunderbird">Thunderbird</a>.<sup id="cite_ref-57"><a href="#cite_note-57">[57]</a></sup> SeaMonkey is now maintained by the SeaMonkey Council, which has <a href="http://fakehost/wiki/Trademark" title="Trademark">trademarked</a> the SeaMonkey name with help from the Mozilla Foundation.<sup id="cite_ref-58"><a href="#cite_note-58">[58]</a></sup> The Mozilla Foundation provides project hosting for the SeaMonkey developers.</p>
-
+
<h3><span id="Bugzilla">Bugzilla</span><span><span>[</span><a href="http://fakehost/w/index.php?title=Mozilla&amp;action=edit&amp;section=11" title="Edit section: Bugzilla">edit</a><span>]</span></span>
</h3>
-
+
<div>
<div>
- <a href="http://fakehost/wiki/File:Buggie.svg"><img alt="" data-file-height="125" data-file-width="95" height="289" src="http://upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Buggie.svg/220px-Buggie.svg.png" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Buggie.svg/330px-Buggie.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Buggie.svg/440px-Buggie.svg.png 2x" width="220"></img></a>
-
+ <p><a href="http://fakehost/wiki/File:Buggie.svg"><img alt="" data-file-height="125" data-file-width="95" height="289" src="http://upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Buggie.svg/220px-Buggie.svg.png" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Buggie.svg/330px-Buggie.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Buggie.svg/440px-Buggie.svg.png 2x" width="220"></img></a></p>
</div>
</div>
<p><a href="http://fakehost/wiki/Bugzilla" title="Bugzilla">Bugzilla</a> is a <a href="http://fakehost/wiki/World_Wide_Web" title="World Wide Web">web</a>-based general-purpose <a href="http://fakehost/wiki/Bug_tracking_system" title="Bug tracking system">bug tracking system</a>, which was released as <a href="http://fakehost/wiki/Open_source_software" title="Open source software">open source software</a> by <a href="http://fakehost/wiki/Netscape_Communications" title="Netscape Communications">Netscape Communications</a> in 1998 along with the rest of the Mozilla codebase, and is currently stewarded by Mozilla. It has been adopted by a variety of organizations for use as a <a href="http://fakehost/wiki/Bug_tracking_system" title="Bug tracking system">bug tracking system</a> for both <a href="http://fakehost/wiki/Free_and_open_source_software" title="Free and open source software">free and open source software</a> and <a href="http://fakehost/wiki/Proprietary_software" title="Proprietary software">proprietary</a> projects and products, including the <a href="http://fakehost/wiki/The_Mozilla_Foundation" title="The Mozilla Foundation">Mozilla Foundation</a>, the <a href="http://fakehost/wiki/Linux_kernel" title="Linux kernel">Linux kernel</a>, <a href="http://fakehost/wiki/GNOME" title="GNOME">GNOME</a>, <a href="http://fakehost/wiki/KDE" title="KDE">KDE</a>, <a href="http://fakehost/wiki/Red_Hat" title="Red Hat">Red Hat</a>, <a href="http://fakehost/wiki/Novell" title="Novell">Novell</a>, <a href="http://fakehost/wiki/Eclipse_(software)" title="Eclipse (software)">Eclipse</a> and <a href="http://fakehost/wiki/LibreOffice" title="LibreOffice">LibreOffice</a>.<sup id="cite_ref-59"><a href="#cite_note-59">[59]</a></sup></p>
@@ -90,39 +87,39 @@
</h3>
<h4><span id="NSS">NSS</span><span><span>[</span><a href="http://fakehost/w/index.php?title=Mozilla&amp;action=edit&amp;section=13" title="Edit section: NSS">edit</a><span>]</span></span>
</h4>
-
+
<p><a href="http://fakehost/wiki/Network_Security_Services" title="Network Security Services">Network Security Services</a> (NSS) comprises a set of <a href="http://fakehost/wiki/Library_(computing)" title="Library (computing)">libraries</a> designed to support <a href="http://fakehost/wiki/Cross-platform" title="Cross-platform">cross-platform</a> development of security-enabled client and server applications. NSS provides a complete open-source implementation of crypto libraries supporting <a href="http://fakehost/wiki/Secure_Sockets_Layer" title="Secure Sockets Layer">SSL</a> and <a href="http://fakehost/wiki/S/MIME" title="S/MIME">S/MIME</a>. NSS was previously <a href="http://fakehost/wiki/Multi-licensing" title="Multi-licensing">tri-licensed</a> under the <a href="http://fakehost/wiki/Mozilla_Public_License" title="Mozilla Public License">Mozilla Public License</a> 1.1, the <a href="http://fakehost/wiki/GNU_General_Public_License" title="GNU General Public License">GNU General Public License</a>, and the <a href="http://fakehost/wiki/LGPL" title="LGPL">GNU Lesser General Public License</a>, but upgraded to GPL-compatible MPL 2.0.</p>
<p><a href="http://fakehost/wiki/AOL" title="AOL">AOL</a>, <a href="http://fakehost/wiki/Red_Hat" title="Red Hat">Red Hat</a>, <a href="http://fakehost/wiki/Sun_Microsystems" title="Sun Microsystems">Sun Microsystems</a>/<a href="http://fakehost/wiki/Oracle_Corporation" title="Oracle Corporation">Oracle Corporation</a>, <a href="http://fakehost/wiki/Google" title="Google">Google</a> and other companies and individual contributors have co-developed NSS and it is used in a wide range of non-Mozilla products including <a href="http://fakehost/wiki/Evolution_(software)" title="Evolution (software)">Evolution</a>, <a href="http://fakehost/wiki/Pidgin_(software)" title="Pidgin (software)">Pidgin</a>, and <a href="http://fakehost/wiki/Apache_OpenOffice" title="Apache OpenOffice">Apache OpenOffice</a>.</p>
<h4><span id="SpiderMonkey">SpiderMonkey</span><span><span>[</span><a href="http://fakehost/w/index.php?title=Mozilla&amp;action=edit&amp;section=14" title="Edit section: SpiderMonkey">edit</a><span>]</span></span>
</h4>
-
+
<p><a href="http://fakehost/wiki/SpiderMonkey_(software)" title="SpiderMonkey (software)">SpiderMonkey</a> is the original <a href="http://fakehost/wiki/JavaScript_engine" title="JavaScript engine">JavaScript engine</a> developed by <a href="http://fakehost/wiki/Brendan_Eich" title="Brendan Eich">Brendan Eich</a> when he invented <a href="http://fakehost/wiki/JavaScript" title="JavaScript">JavaScript</a> in 1995 as a developer at <a href="http://fakehost/wiki/Netscape" title="Netscape">Netscape</a>. It became part of the Mozilla product family when Mozilla inherited Netscape's code-base in 1998. In 2011, Eich transferred the nominal ownership of the SpiderMonkey code and project to Dave Mandelin.<sup id="cite_ref-BE201106_60-0"><a href="#cite_note-BE201106-60">[60]</a></sup></p>
<p>SpiderMonkey is a <a href="http://fakehost/wiki/Cross-platform" title="Cross-platform">cross-platform</a> engine written in <a href="http://fakehost/wiki/C%2B%2B" title="C++">C++</a> which implements <a href="http://fakehost/wiki/ECMAScript" title="ECMAScript">ECMAScript</a>, a standard developed from JavaScript.<sup id="cite_ref-BE201106_60-1"><a href="#cite_note-BE201106-60">[60]</a></sup><sup id="cite_ref-61"><a href="#cite_note-61">[61]</a></sup> It comprises an <a href="http://fakehost/wiki/Interpreter_(computing)" title="Interpreter (computing)">interpreter</a>, several <a href="http://fakehost/wiki/Just-in-time_compilation" title="Just-in-time compilation">just-in-time compilers</a>, a <a href="http://fakehost/wiki/Decompiler" title="Decompiler">decompiler</a> and a <a href="http://fakehost/wiki/Garbage_collection_(computer_science)" title="Garbage collection (computer science)">garbage collector</a>. Products which embed SpiderMonkey include <a href="http://fakehost/wiki/Firefox" title="Firefox">Firefox</a>, <a href="http://fakehost/wiki/Mozilla_Thunderbird" title="Mozilla Thunderbird">Thunderbird</a>, <a href="http://fakehost/wiki/SeaMonkey" title="SeaMonkey">SeaMonkey</a>, and many non-Mozilla applications.<sup id="cite_ref-62"><a href="#cite_note-62">[62]</a></sup></p>
<h4><span id="Rhino">Rhino</span><span><span>[</span><a href="http://fakehost/w/index.php?title=Mozilla&amp;action=edit&amp;section=15" title="Edit section: Rhino">edit</a><span>]</span></span>
</h4>
-
+
<p>Rhino is an <a href="http://fakehost/wiki/Open_source" title="Open source">open source</a> <a href="http://fakehost/wiki/JavaScript_engine" title="JavaScript engine">JavaScript engine</a> managed by the <a href="http://fakehost/wiki/Mozilla_Foundation" title="Mozilla Foundation">Mozilla Foundation</a>. It is developed entirely in <a href="http://fakehost/wiki/Java_(programming_language)" title="Java (programming language)">Java</a>. Rhino converts JavaScript scripts into Java <a href="http://fakehost/wiki/Class_(computer_programming)" title="Class (computer programming)">classes</a>. Rhino works in both <a href="http://fakehost/wiki/Compiler" title="Compiler">compiled</a> and <a href="http://fakehost/wiki/Interpreter_(computing)" title="Interpreter (computing)">interpreted</a> mode.<sup id="cite_ref-63"><a href="#cite_note-63">[63]</a></sup></p>
<h4><span id="Gecko">Gecko</span><span><span>[</span><a href="http://fakehost/w/index.php?title=Mozilla&amp;action=edit&amp;section=16" title="Edit section: Gecko">edit</a><span>]</span></span>
</h4>
-
+
<p><a href="http://fakehost/wiki/Gecko_(layout_engine)" title="Gecko (layout engine)">Gecko</a> is a <a href="http://fakehost/wiki/Web_browser_engine" title="Web browser engine">layout engine</a> that supports web pages written using <a href="http://fakehost/wiki/HTML" title="HTML">HTML</a>, <a href="http://fakehost/wiki/Scalable_Vector_Graphics" title="Scalable Vector Graphics">SVG</a>, and <a href="http://fakehost/wiki/MathML" title="MathML">MathML</a>. Gecko is written in <a href="http://fakehost/wiki/C%2B%2B" title="C++">C++</a> and uses <a href="http://fakehost/wiki/NSPR" title="NSPR">NSPR</a> for <a href="http://fakehost/wiki/Platform_independence" title="Platform independence">platform independence</a>. Its source code is licensed under the <a href="http://fakehost/wiki/Mozilla_Public_License" title="Mozilla Public License">Mozilla Public License</a>.</p>
<p>Firefox uses Gecko both for rendering web pages and for rendering its <a href="http://fakehost/wiki/User_interface" title="User interface">user interface</a>. Gecko is also used by Thunderbird, SeaMonkey, and many non-Mozilla applications.</p>
<h4><span id="Rust">Rust</span><span><span>[</span><a href="http://fakehost/w/index.php?title=Mozilla&amp;action=edit&amp;section=17" title="Edit section: Rust">edit</a><span>]</span></span>
</h4>
-
+
<p><a href="http://fakehost/wiki/Rust_(programming_language)" title="Rust (programming language)">Rust</a> is a compiled <a href="http://fakehost/wiki/Programming_language" title="Programming language">programming language</a> being developed by Mozilla Research. It is designed for safety, concurrency, and performance. Rust is intended for creating large and complex software which needs to be both safe against exploits and fast.</p>
<p>Rust is being used in an experimental layout engine, <a href="http://fakehost/wiki/Servo_(layout_engine)" title="Servo (layout engine)">Servo</a>, which is developed by Mozilla and Samsung. Servo is not used in any consumer-oriented browsers yet. However, the Servo project developers plan for parts of the Servo source code to be merged into Gecko, and Firefox, incrementally.<sup id="cite_ref-64"><a href="#cite_note-64">[64]</a></sup><sup id="cite_ref-65"><a href="#cite_note-65">[65]</a></sup></p>
<h4><span id="XULRunner">XULRunner</span><span><span>[</span><a href="http://fakehost/w/index.php?title=Mozilla&amp;action=edit&amp;section=18" title="Edit section: XULRunner">edit</a><span>]</span></span>
</h4>
-
+
<p><a href="http://fakehost/wiki/XULRunner" title="XULRunner">XULRunner</a> is a software platform and technology experiment by Mozilla, that allows applications built with the same technologies used by Firefox extensions (XPCOM, Javascript, HTML, CSS, XUL) to be run natively as desktop applications, without requiring Firefox to be installed on the user's machine. XULRunner binaries are available for the Windows, GNU/Linux and OS X operating systems, allowing such applications to be effectively cross platform.</p>
<h4><span id="pdf.js">pdf.js</span><span><span>[</span><a href="http://fakehost/w/index.php?title=Mozilla&amp;action=edit&amp;section=19" title="Edit section: pdf.js">edit</a><span>]</span></span>
</h4>
-
+
<p><a href="http://fakehost/wiki/Pdf.js" title="Pdf.js">Pdf.js</a> is a library developed by Mozilla that allows in-browser rendering of pdf documents using the HTML5 Canvas and Javascript. It is included by default in recent versions of Firefox, allowing the browser to render pdf documents without requiring an external plugin; and it is available separately as an extension named "PDF Viewer" for Firefox for Android, SeaMonkey, and the Firefox versions which don't include it built-in. It can also be included as part of a website's scripts, to allow pdf rendering for any browser that implements the required HTML5 features and can run Javascript.</p>
<h4><span id="Shumway">Shumway</span><span><span>[</span><a href="http://fakehost/w/index.php?title=Mozilla&amp;action=edit&amp;section=20" title="Edit section: Shumway">edit</a><span>]</span></span>
</h4>
-
+
<p><a href="http://fakehost/wiki/Shumway_(software)" title="Shumway (software)">Shumway</a> is an open source replacement for the Adobe Flash Player, developed by Mozilla since 2012, using open web technologies as a replacement for Flash technologies. It uses Javascript and HTML5 Canvas elements to render Flash and execute Actionscript. It is included by default in Firefox Nightly and can be installed as an extension for any recent version of Firefox. The current implementation is limited in its capabilities to render Flash content outside simple projects.</p>
<h2><span id="Other_activities">Other activities</span><span><span>[</span><a href="http://fakehost/w/index.php?title=Mozilla&amp;action=edit&amp;section=21" title="Edit section: Other activities">edit</a><span>]</span></span>
</h2>
@@ -131,18 +128,18 @@
<p>Mozilla VR is a team focused on bringing <a href="http://fakehost/wiki/Virtual_reality" title="Virtual reality">Virtual reality</a> tools, specifications, and standards to the open Web.<sup id="cite_ref-66"><a href="#cite_note-66">[66]</a></sup> Mozilla VR maintains <a href="http://fakehost/wiki/A-Frame_(VR)" title="A-Frame (VR)">A-Frame (VR)</a>, a web framework for building VR experiences, and works on advancing <a href="http://fakehost/wiki/WebVR" title="WebVR">WebVR</a> support within web browsers.</p>
<h3><span id="Mozilla_Persona">Mozilla Persona</span><span><span>[</span><a href="http://fakehost/w/index.php?title=Mozilla&amp;action=edit&amp;section=23" title="Edit section: Mozilla Persona">edit</a><span>]</span></span>
</h3>
-
+
<p><a href="http://fakehost/wiki/Mozilla_Persona" title="Mozilla Persona">Mozilla Persona</a> is a secure, cross-browser website <a href="http://fakehost/wiki/Authentication" title="Authentication">authentication</a> mechanism which allows a user to use a single username and password (or other authentication method) to log in to multiple sites.<sup id="cite_ref-67"><a href="#cite_note-67">[67]</a></sup> Mozilla Persona will be shutting down on November 30, 2016.<sup id="cite_ref-68"><a href="#cite_note-68">[68]</a></sup></p>
<h3><span id="Mozilla_Location_Service">Mozilla Location Service</span><span><span>[</span><a href="http://fakehost/w/index.php?title=Mozilla&amp;action=edit&amp;section=24" title="Edit section: Mozilla Location Service">edit</a><span>]</span></span>
</h3>
-
+
<p>This open source crowdsourced geolocation service was started by Mozilla in 2013 and offers a free <a href="http://fakehost/wiki/Application_programming_interface" title="Application programming interface">API</a>.</p>
<h3><span id="Webmaker">Webmaker</span><span><span>[</span><a href="http://fakehost/w/index.php?title=Mozilla&amp;action=edit&amp;section=25" title="Edit section: Webmaker">edit</a><span>]</span></span>
</h3>
<p>Mozilla Webmaker is Mozilla's educational initiative, Webmaker's goal is to "help millions of people move from using the web to making the web." As part of Mozilla’s non-profit mission, Webmaker aims "to help the world increase their understanding of the web, take greater control of their online lives, and create a more web literate planet."<sup id="cite_ref-69"><a href="#cite_note-69">[69]</a></sup><sup id="cite_ref-lifehacker.com_70-0"><a href="#cite_note-lifehacker.com-70">[70]</a></sup><sup id="cite_ref-lifehacker.com_70-1"><a href="#cite_note-lifehacker.com-70">[70]</a></sup></p>
<h3><span id="Mozilla_Developer_Network">Mozilla Developer Network</span><span><span>[</span><a href="http://fakehost/w/index.php?title=Mozilla&amp;action=edit&amp;section=26" title="Edit section: Mozilla Developer Network">edit</a><span>]</span></span>
</h3>
-
+
<p>Mozilla maintains a comprehensive developer documentation website called the <a href="http://fakehost/wiki/Mozilla_Developer_Network" title="Mozilla Developer Network">Mozilla Developer Network</a> which contains information about web technologies including <a href="http://fakehost/wiki/HTML" title="HTML">HTML</a>, <a href="http://fakehost/wiki/CSS" title="CSS">CSS</a>, <a href="http://fakehost/wiki/SVG" title="SVG">SVG</a>, <a href="http://fakehost/wiki/JavaScript" title="JavaScript">JavaScript</a>, as well Mozilla-specific information. In addition, Mozilla publishes a large number of videos about web technologies and the development of Mozilla projects on the Air Mozilla website.<sup id="cite_ref-71"><a href="#cite_note-71">[71]</a></sup><sup id="cite_ref-72"><a href="#cite_note-72">[72]</a></sup></p>
<h2><span><span>[</span><a href="http://fakehost/w/index.php?title=Mozilla&amp;action=edit&amp;section=27" title="Edit section: Community">edit</a><span>]</span></span>
</h2>
@@ -151,8 +148,7 @@
</h3>
<div>
<div>
- <a href="http://fakehost/wiki/File:London_Mozilla_Workspace.jpg"><img alt="" data-file-height="1656" data-file-width="2500" height="146" src="http://upload.wikimedia.org/wikipedia/commons/thumb/2/2a/London_Mozilla_Workspace.jpg/220px-London_Mozilla_Workspace.jpg" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/2/2a/London_Mozilla_Workspace.jpg/330px-London_Mozilla_Workspace.jpg 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/2/2a/London_Mozilla_Workspace.jpg/440px-London_Mozilla_Workspace.jpg 2x" width="220"></img></a>
-
+ <p><a href="http://fakehost/wiki/File:London_Mozilla_Workspace.jpg"><img alt="" data-file-height="1656" data-file-width="2500" height="146" src="http://upload.wikimedia.org/wikipedia/commons/thumb/2/2a/London_Mozilla_Workspace.jpg/220px-London_Mozilla_Workspace.jpg" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/2/2a/London_Mozilla_Workspace.jpg/330px-London_Mozilla_Workspace.jpg 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/2/2a/London_Mozilla_Workspace.jpg/440px-London_Mozilla_Workspace.jpg 2x" width="220"></img></a></p>
</div>
</div>
<p>There are a number of sub-communities that exist based on their geographical locations, where contributors near each other work together on particular activities, such as localization, marketing, PR and user support.</p>
@@ -160,8 +156,7 @@
</h3>
<div>
<div>
- <a href="http://fakehost/wiki/File:Mozilla_Reps.png"><img alt="" data-file-height="183" data-file-width="400" height="101" src="http://upload.wikimedia.org/wikipedia/commons/thumb/0/0b/Mozilla_Reps.png/220px-Mozilla_Reps.png" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/0/0b/Mozilla_Reps.png/330px-Mozilla_Reps.png 1.5x, //upload.wikimedia.org/wikipedia/commons/0/0b/Mozilla_Reps.png 2x" width="220"></img></a>
-
+ <p><a href="http://fakehost/wiki/File:Mozilla_Reps.png"><img alt="" data-file-height="183" data-file-width="400" height="101" src="http://upload.wikimedia.org/wikipedia/commons/thumb/0/0b/Mozilla_Reps.png/220px-Mozilla_Reps.png" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/0/0b/Mozilla_Reps.png/330px-Mozilla_Reps.png 1.5x, //upload.wikimedia.org/wikipedia/commons/0/0b/Mozilla_Reps.png 2x" width="220"></img></a></p>
</div>
</div>
<p>The Mozilla Reps program aims to empower and support volunteer Mozillians who want to become official representatives of Mozilla in their region/locale.</p>
@@ -179,10 +174,9 @@
</h4>
<div>
<div>
- <a href="http://fakehost/wiki/File:Fireside_Chat,_Knight%27s_Michael_Maness_and_Dan_Sinker_-_Flickr_-_Knight_Foundation.jpg"><img alt="" data-file-height="854" data-file-width="1280" height="147" src="http://upload.wikimedia.org/wikipedia/commons/thumb/e/e4/Fireside_Chat%2C_Knight%27s_Michael_Maness_and_Dan_Sinker_-_Flickr_-_Knight_Foundation.jpg/220px-Fireside_Chat%2C_Knight%27s_Michael_Maness_and_Dan_Sinker_-_Flickr_-_Knight_Foundation.jpg" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/e/e4/Fireside_Chat%2C_Knight%27s_Michael_Maness_and_Dan_Sinker_-_Flickr_-_Knight_Foundation.jpg/330px-Fireside_Chat%2C_Knight%27s_Michael_Maness_and_Dan_Sinker_-_Flickr_-_Knight_Foundation.jpg 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/e/e4/Fireside_Chat%2C_Knight%27s_Michael_Maness_and_Dan_Sinker_-_Flickr_-_Knight_Foundation.jpg/440px-Fireside_Chat%2C_Knight%27s_Michael_Maness_and_Dan_Sinker_-_Flickr_-_Knight_Foundation.jpg 2x" width="220"></img></a>
- <div>
+ <p><a href="http://fakehost/wiki/File:Fireside_Chat,_Knight%27s_Michael_Maness_and_Dan_Sinker_-_Flickr_-_Knight_Foundation.jpg"><img alt="" data-file-height="854" data-file-width="1280" height="147" src="http://upload.wikimedia.org/wikipedia/commons/thumb/e/e4/Fireside_Chat%2C_Knight%27s_Michael_Maness_and_Dan_Sinker_-_Flickr_-_Knight_Foundation.jpg/220px-Fireside_Chat%2C_Knight%27s_Michael_Maness_and_Dan_Sinker_-_Flickr_-_Knight_Foundation.jpg" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/e/e4/Fireside_Chat%2C_Knight%27s_Michael_Maness_and_Dan_Sinker_-_Flickr_-_Knight_Foundation.jpg/330px-Fireside_Chat%2C_Knight%27s_Michael_Maness_and_Dan_Sinker_-_Flickr_-_Knight_Foundation.jpg 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/e/e4/Fireside_Chat%2C_Knight%27s_Michael_Maness_and_Dan_Sinker_-_Flickr_-_Knight_Foundation.jpg/440px-Fireside_Chat%2C_Knight%27s_Michael_Maness_and_Dan_Sinker_-_Flickr_-_Knight_Foundation.jpg 2x" width="220"></img></a></p><div>
<p>
- Speakers from the </p><a href="http://fakehost/wiki/Knight_Foundation" title="Knight Foundation">Knight Foundation</a><p> discuss the future of news at the 2011 Mozilla Festival in London.</p></div>
+ Speakers from the <a href="http://fakehost/wiki/Knight_Foundation" title="Knight Foundation">Knight Foundation</a> discuss the future of news at the 2011 Mozilla Festival in London.</p></div>
</div>
</div>
<p>The Mozilla Festival is an annual event where hundreds of passionate people explore the Web, learn together and make things that can change the world. With the emphasis on <i>making</i>—the mantra of the Festival is "less yack, more hack." Journalists, coders, filmmakers, designers, educators, gamers, makers, youth and anyone else, from all over the world, are encouraged to attend, with attendees from more than 40 countries, working together at the intersection between freedom, the Web, and that years theme.</p>
@@ -195,7 +189,7 @@
<p>Mozilla Summit are the global event with active contributors and Mozilla employees to develop a shared understanding of Mozilla's mission together. Over 2,000 people representing 90 countries and 114 languages gathered in Santa Clara, Toronto and Brussels in 2013. Mozilla has since its last summit in 2013 replaced summits with all-hands where both employees and volunteers come together to collaborate the event is a scaled down version of Mozilla Summit.</p>
<h2><span id="See_also">See also</span><span><span>[</span><a href="http://fakehost/w/index.php?title=Mozilla&amp;action=edit&amp;section=34" title="Edit section: See also">edit</a><span>]</span></span>
</h2>
-
+
<ul><li><a href="http://fakehost/wiki/-zilla_(suffix)" title="-zilla (suffix)">-zilla (suffix)</a></li>
<li><a href="http://fakehost/wiki/Mozilla_(mascot)" title="Mozilla (mascot)">Mozilla (mascot)</a></li>
<li><i><a href="http://fakehost/wiki/The_Book_of_Mozilla" title="The Book of Mozilla">The Book of Mozilla</a></i></li>
@@ -426,8 +420,8 @@
<li><a href="https://wiki.mozilla.org/" rel="nofollow">Mozilla Wiki</a>(<a href="https://wiki.mozilla.org/Timeline" title="mozillawiki:Timeline">Major time line of community development</a>)</li>
<li><a href="http://hg.mozilla.org/" rel="nofollow">Mozilla Mercurial Repository</a></li>
</ul>
-
-
+
+
</div> \ No newline at end of file
diff --git a/test/test-pages/wordpress/expected.html b/test/test-pages/wordpress/expected.html
index 1f47d8f..ada49f8 100644
--- a/test/test-pages/wordpress/expected.html
+++ b/test/test-pages/wordpress/expected.html
@@ -19,11 +19,11 @@
</blockquote>
<p>It would be interesting to know what is meant by tagging “WordPress” as a skill – whether it is the general ability to work within the WordPress ecosystem of tools or if it refers to specific skills like PHP. Browsing a few jobs on Stack Overflow, <a href="http://stackoverflow.com/jobs?sort=i&amp;q=wordpress" target="_blank">WordPress positions</a> vary in the skills they require, such as React.js, Angular, PHP, HTML, CSS, and other technologies. This is a reflection of the diversity of technology that can be leveraged in creating WordPress-powered sites and applications, and several of these skills are listed independently of WordPress in the data. </p>
<p>Regardless of how much credibility you give Stack Overflow’s analysis of hiring trends, the report’s recommendation for those working in technologies oversaturated with developers is a good one: “Consider brushing up on some technologies that offer higher employer demand and less competition.” WordPress’ code base is currently <a href="https://www.openhub.net/p/wordpress/analyses/latest/languages_summary" target="_blank">59% PHP and 27% JavaScript</a>. The percentage of PHP has grown over time, but newer features and improvements to core are also being built in JavaScript. These are both highly portable skills that are in demand on the web.</p>
-
-
-
-
+
+
+
+
</div>
-
+
</article> \ No newline at end of file
diff --git a/test/test-pages/yahoo-1/expected.html b/test/test-pages/yahoo-1/expected.html
index 1736b04..86f3f4e 100644
--- a/test/test-pages/yahoo-1/expected.html
+++ b/test/test-pages/yahoo-1/expected.html
@@ -1,6 +1,6 @@
<div data-reactid="406" id="Col1-0-ContentCanvas-Proxy">
<div data-reactid="407" id="Col1-0-ContentCanvas">
- <article data-reactid="408" data-type="story" data-uuid="80b35014-fba3-377e-adc5-47fb44f61fa7"><figure data-reactid="409" data-type="image"><div data-reactid="410"><img alt="The PlayStation VR" data-reactid="411" src="http://l1.yimg.com/ny/api/res/1.2/589noY9BZNdmsUUQf6L1AQ--/YXBwaWQ9aGlnaGxhbmRlcjtzbT0xO3c9NzQ0O2g9NjY5/http://media.zenfs.com/en/homerun/feed_manager_auto_publish_494/4406ef57dcb40376c513903b03bef048"></img></div>
+ <article data-reactid="408" data-type="story" data-uuid="80b35014-fba3-377e-adc5-47fb44f61fa7"><figure data-reactid="409" data-type="image"><p><img alt="The PlayStation VR" data-reactid="411" src="http://l1.yimg.com/ny/api/res/1.2/589noY9BZNdmsUUQf6L1AQ--/YXBwaWQ9aGlnaGxhbmRlcjtzbT0xO3c9NzQ0O2g9NjY5/http://media.zenfs.com/en/homerun/feed_manager_auto_publish_494/4406ef57dcb40376c513903b03bef048"></img></p>
<div data-reactid="413">
<figcaption data-reactid="414" title="Sony’s PlayStation VR."><p>Sony’s PlayStation VR.</p>
</figcaption></div>
@@ -39,7 +39,7 @@
<li data-reactid="459"><a href="https://www.yahoo.com/tech/review-madden-nfl-17-runs-000000394.html">Review: ‘Madden NFL 17’ runs hard, plays it safe</a></li>
</ul><p data-reactid="460" data-type="text"><i>Ben Silverman is on Twitter at</i>
<a href="https://twitter.com/ben_silverman" rel="nofollow noopener noreferrer" target="_blank"> <i>ben_silverman</i></a><i>.</i></p>
-
+
</div>
- </article><span aria-hidden="true" data-reactid="462"></span></div>
+ </article></div>
</div> \ No newline at end of file
diff --git a/test/test-pages/yahoo-2/expected.html b/test/test-pages/yahoo-2/expected.html
index f603205..b9d2d2b 100644
--- a/test/test-pages/yahoo-2/expected.html
+++ b/test/test-pages/yahoo-2/expected.html
@@ -1,16 +1,16 @@
<div id="tgt1-Col1-2-ContentCanvas-Proxy">
<div id="tgt1-Col1-2-ContentCanvas">
<article data-type="story" data-uuid="8dd27580-6b4e-3cfb-a389-5b1ab90bd0eb"><div>
-
+
<div>
<div>
<p><span>1 / 5</span></p>
<div>
<div>
-
+
<p>In this photo dated Tuesday, Nov, 29, 2016 the Soyuz-FG rocket booster with the Progress MS-04 cargo ship is installed on a launch pad in Baikonur, Kazakhstan. The unmanned Russian cargo space ship Progress MS-04 broke up in the atmosphere over Siberia on Thursday Dec. 1, 2016, just minutes after the launch en route to the International Space Station due to an unspecified malfunction, the Russian space agency said.(Oleg Urusov/ Roscosmos Space Agency Press Service photo via AP)</p>
</div>
-
+
</div></div>
</div>
</div>
@@ -28,7 +28,7 @@
<p data-type="text">This version corrects the spelling of the region to Tuva, not Tyva.</p>
<p data-type="text">__</p>
<p data-type="text">Aerospace Writer Marcia Dunn in Cape Canaveral, Florida, and Vladimir Isachenkov in Moscow contributed to this report.</p>
-
+
</div>
- </article><span aria-hidden="true"></span></div>
+ </article></div>
</div> \ No newline at end of file
diff --git a/test/test-pages/yahoo-3/expected.html b/test/test-pages/yahoo-3/expected.html
index f3113b6..5a16f04 100644
--- a/test/test-pages/yahoo-3/expected.html
+++ b/test/test-pages/yahoo-3/expected.html
@@ -1,15 +1,15 @@
<div>
<div id="Main" role="main" tabindex="0">
- <section data-ylk="mid:mediacontentbreakingnews;mpos:1;t1:a3;t2:mod-bkn;sec:mod-bkn;" id="mediacontentbreakingnews"><p> <span>'GMA' Cookie Search:</span> </p>
-
+ <section data-ylk="mid:mediacontentbreakingnews;mpos:1;t1:a3;t2:mod-bkn;sec:mod-bkn;" id="mediacontentbreakingnews"><p><span>'GMA' Cookie Search:</span> </p>
+
</section>
<section data-type="story" data-uuid="4250eebf-bbb0-3c95-8fd0-3cb4d3daf93c" data-ylk="t1:a3;t2:ct-mod;sec:ct-mod;itc:0;rspns:nav;" id="mediacontentstory"><div>
-
-
+
+
<div itemscope="" itemtype="https://schema.org/Article">
-
+
<meta content="2015-03-11T19:46:14Z" itemprop="datePublished"></meta><meta content="Veteran Wraps Baby in American Flag, Photo Sparks Controversy" itemprop="headline"></meta><meta content="" itemprop="alternativeHeadline"></meta><meta content="https://media.zenfs.com/en-US/video/video.abcnewsplus.com/559ecdbafdb839129816b5c79a996975" itemprop="image"></meta><meta content="A photographer and Navy veteran is fighting back after a photo she posted to Facebook started an online backlash. Vanessa Hicks said she had no idea her photo would be considered controversial. The photo, from a military family’s newborn photo shoot, showed a newborn infant wrapped in an American flag held by his father, who was in his military uniform. Hicks, a Navy veteran herself and the wife of an active-duty Navy member, said her intention was to honor the flag as well as her clients, who wanted to incorporate their military service in the photo shoot." itemprop="description"></meta><p>A photographer and Navy veteran is fighting back after a photo she posted to <a data-rapid_p="13" href="http://abcnews.go.com/topics/business/companies/facebook-inc.htm" id="ramplink_Facebook_" target="_blank">Facebook</a> started an online backlash.</p>
<p>Vanessa Hicks said she had no idea her photo would be considered controversial. The photo, from a military family’s newborn photo shoot, showed a newborn infant wrapped in an American flag held by his father, who was in his military uniform.</p>
<p>Hicks, a Navy veteran herself and the wife of an active-duty Navy member, said her intention was to honor the flag as well as her clients, who wanted to incorporate their military service in the photo shoot.</p>
@@ -18,12 +18,11 @@
<p><a data-rapid_p="16" href="http://abcnews.go.com/Travel/video/antarctica-penguin-post-office-job-attracts-record-number-29247380" target="_blank">Antarctica 'Penguin Post Office' Attracts Record Number of Applicants</a></p>
<p>“This is what he was fighting for, his son wrapped in an American flag,” Hicks told ABC News. However, when she posted the image on her page, she started to get comments accusing her of desecrating the flag.</p>
<p>On one Facebook page an unidentified poster put up her picture writing and wrote they found it was “disrespectful, rude, tacky, disgusting, and against the U.S. Flag Code.”</p>
-
- <div><span id="schemaorg"><div><figure data-orig-index="2"><a data-rapid_p="17" id="cover-c9b69c1a26e19ae9fe744763dc31e9ac" name="cover-c9b69c1a26e19ae9fe744763dc31e9ac"></a><div><span></span>
- <p>View photo</p><span>.</span></div><img alt="Vanessa Hicks" data-preembed="image" src="https://s3.yimg.com/bt/api/res/1.2/GNtA09EDJWzWfpBzGYJS0Q--/YXBwaWQ9eW5ld3NfbGVnbztxPTg1O3c9NjMw/http://media.zenfs.com/en_us/gma/us.abcnews.gma.com/HT_flag_baby_jtm_150311_16x9_992.jpg" title="Vanessa Hicks" width="630"></img></figure><p>Vanessa Hicks</p>
+
+ <p><span id="schemaorg"><div><figure data-orig-index="2"><a data-rapid_p="17" id="cover-c9b69c1a26e19ae9fe744763dc31e9ac" name="cover-c9b69c1a26e19ae9fe744763dc31e9ac"></a><div><p>View photo</p><p><span>.</span></p></div><img alt="Vanessa Hicks" data-preembed="image" src="https://s3.yimg.com/bt/api/res/1.2/GNtA09EDJWzWfpBzGYJS0Q--/YXBwaWQ9eW5ld3NfbGVnbztxPTg1O3c9NjMw/http://media.zenfs.com/en_us/gma/us.abcnews.gma.com/HT_flag_baby_jtm_150311_16x9_992.jpg" title="Vanessa Hicks" width="630"></img></figure><p>Vanessa Hicks</p>
</div>
</span>
- </div><p>The Federal Flag Code has guidelines for the proper treatment of the U.S. Flag but there are no rules for punishment related to violations. In the past, the </p><a data-rapid_p="18" href="http://abcnews.go.com/topics/news/us/supreme-court.htm" target="_blank">Supreme Court</a><p> has found that people are protected from punishment under the First Amendment for manipulating or even burning the flag.
+ </p><p>The Federal Flag Code has guidelines for the proper treatment of the U.S. Flag but there are no rules for punishment related to violations. In the past, the <a data-rapid_p="18" href="http://abcnews.go.com/topics/news/us/supreme-court.htm" target="_blank">Supreme Court</a> has found that people are protected from punishment under the First Amendment for manipulating or even burning the flag.
</p>
<p>Hicks said she was surprised when messages suddenly started to pop up on her Facebook page and even her own website criticizing her photos.</p>
<p>She said she stayed up until 4 a.m. recently to take down comments from her business and company page, even on shoots that had nothing to do with the flag.</p>
@@ -37,9 +36,9 @@
</div>
</section>
-
-
-
+
+
+
</div>
</div> \ No newline at end of file
diff --git a/test/test-pages/yahoo-4/expected.html b/test/test-pages/yahoo-4/expected.html
index 4a50c77..83b5863 100644
--- a/test/test-pages/yahoo-4/expected.html
+++ b/test/test-pages/yahoo-4/expected.html
@@ -1,7 +1,15 @@
-<p>
- トレンドマイクロは3月9日、Wi-Fi利用時の通信を暗号化し保護するスマホ・タブレット向けのセキュリティアプリ「フリーWi-Fiプロテクション」(iOS/Android)の発売を開始すると発表した。1年版ライセンスは2900円(税込)で、2年版ライセンスは5000円(税込)。<p>  フリーWi-Fiプロテクションは、App Storeおよび、Google Playにて販売され、既に提供しているスマホ・タブレット向け総合セキュリティ対策アプリ「ウイルスバスター モバイル」と併用することで、不正アプリや危険なウェブサイトからの保護に加え、通信の盗み見を防ぐことができる。</p><p>  2020年の東京オリンピック・パラリンピックの開催などを見据え、フリーWi-Fi(公衆無線LAN)の設置が促進され、フリーWi-Fiの利用者も増加している。
- </p><p>  一方で、脆弱な設定のフリーWi-Fiや攻撃者が設置した偽のフリーWi-Fiへの接続などによる情報漏えい、通信の盗み見などのセキュリティリスクが危惧されているという。
- </p><p>  正規事業者が提供する安全性の高いフリーWi-Fiのほかにも、通信を暗号化していない安全性の低いフリーWi-Fi、さらにはサイバー犯罪者が設置したフリーWi-Fiなどさまざまなものが混在している。また、利用者は、接続する前にひとつひとつ安全性を確認するのは難しい状況だとしている。
- </p><p>  トレンドマイクロがスマートフォン保持者でフリーWi-Fiの利用経験がある人に実施した調査では、回答者の約85%が安全なフリーWi-Fiと危険なフリーWi-Fiは「見分けられない」と回答。さらに、約65%がフリーWi-Fiの利用に不安を感じていると回答している。
- </p><p>  こうした環境の変化やユーザの状況を鑑み、フリーWi-Fiプロテクションの提供を開始する。同アプリをインストールすることで利用者は、万が一安全性の低いフリーWi-Fiのアクセスポイントに接続してしまった場合でも、その通信を暗号化でき、通信の盗み見やそれによる情報漏えいのリスクを低減できるようになる。
- </p><p>  具体的には、フリーWi-Fi利用時に、スマートフォンがフリーWi-Fiプロテクションインフラに接続することにより、フリーWi-Fiのアクセスポイントを介した通信がVPN(Virtual Private Network)で暗号化される。これにより利用者は、第三者から通信を傍受されることやデータの情報漏えいを防ぐことが可能。さらに、かんたん自動接続の機能により、通信を暗号化していない安全性が低いフリーWi-Fi接続時や利用者が指定したWi-Fiへ接続する際に、自動的に通信を暗号化し、利用者の通信を保護する。</p><p>  また、フリーWi-Fiプロテクションインフラと、莫大なセキュリティ情報のビッグデータを保有するクラウド型セキュリティ技術基盤「Trend Micro Smart Protection Network」(SPN)が連携することで、フリーWi-Fiプロテクションインフラを経由してインターネットを利用する際に、利用者がフィッシング詐欺サイトや偽サイトなどへの不正サイトへアクセスすることをブロックできるという。</p></p> \ No newline at end of file
+<div id="readability-page-1" class="page">
+ <div>
+ <div>
+ <p> トレンドマイクロは3月9日、Wi-Fi利用時の通信を暗号化し保護するスマホ・タブレット向けのセキュリティアプリ「フリーWi-Fiプロテクション」(iOS/Android)の発売を開始すると発表した。1年版ライセンスは2900円(税込)で、2年版ライセンスは5000円(税込)。</p>
+ <p>  フリーWi-Fiプロテクションは、App Storeおよび、Google Playにて販売され、既に提供しているスマホ・タブレット向け総合セキュリティ対策アプリ「ウイルスバスター モバイル」と併用することで、不正アプリや危険なウェブサイトからの保護に加え、通信の盗み見を防ぐことができる。</p>
+ <p>  2020年の東京オリンピック・パラリンピックの開催などを見据え、フリーWi-Fi(公衆無線LAN)の設置が促進され、フリーWi-Fiの利用者も増加している。 </p>
+ <p>  一方で、脆弱な設定のフリーWi-Fiや攻撃者が設置した偽のフリーWi-Fiへの接続などによる情報漏えい、通信の盗み見などのセキュリティリスクが危惧されているという。 </p>
+ <p>  正規事業者が提供する安全性の高いフリーWi-Fiのほかにも、通信を暗号化していない安全性の低いフリーWi-Fi、さらにはサイバー犯罪者が設置したフリーWi-Fiなどさまざまなものが混在している。また、利用者は、接続する前にひとつひとつ安全性を確認するのは難しい状況だとしている。 </p>
+ <p>  トレンドマイクロがスマートフォン保持者でフリーWi-Fiの利用経験がある人に実施した調査では、回答者の約85%が安全なフリーWi-Fiと危険なフリーWi-Fiは「見分けられない」と回答。さらに、約65%がフリーWi-Fiの利用に不安を感じていると回答している。 </p>
+ <p>  こうした環境の変化やユーザの状況を鑑み、フリーWi-Fiプロテクションの提供を開始する。同アプリをインストールすることで利用者は、万が一安全性の低いフリーWi-Fiのアクセスポイントに接続してしまった場合でも、その通信を暗号化でき、通信の盗み見やそれによる情報漏えいのリスクを低減できるようになる。 </p>
+ <p>  具体的には、フリーWi-Fi利用時に、スマートフォンがフリーWi-Fiプロテクションインフラに接続することにより、フリーWi-Fiのアクセスポイントを介した通信がVPN(Virtual Private Network)で暗号化される。これにより利用者は、第三者から通信を傍受されることやデータの情報漏えいを防ぐことが可能。さらに、かんたん自動接続の機能により、通信を暗号化していない安全性が低いフリーWi-Fi接続時や利用者が指定したWi-Fiへ接続する際に、自動的に通信を暗号化し、利用者の通信を保護する。</p>
+ <p>  また、フリーWi-Fiプロテクションインフラと、莫大なセキュリティ情報のビッグデータを保有するクラウド型セキュリティ技術基盤「Trend Micro Smart Protection Network」(SPN)が連携することで、フリーWi-Fiプロテクションインフラを経由してインターネットを利用する際に、利用者がフィッシング詐欺サイトや偽サイトなどへの不正サイトへアクセスすることをブロックできるという。</p>
+ </div>
+ </div>
+</div> \ No newline at end of file