- From: François REMY <fremycompany_pub@yahoo.fr>
- Date: Fri, 3 Feb 2012 13:04:51 +0100
- To: "DOM WG" <www-dom@w3.org>
- Cc: "Alex Mogilevsky" <alexmog@microsoft.com>, "Lea Verou" <leaverou@gmail.com>
Dear DOM Working Group, After some requests in the CSS Working Group (www-style) [1], I would like to see if it was possible to start a thread on a common Object Model for progress and load state on downloaded resources. The problem is the following: many of us would like to see an ":error" and a ":loading" pseudo-classes introduced in CSS to match IMG, IFRAME, SCRIPT or VIDEO tags based on their load state. However, it quickly appeared that the CSS working group didn’t have the tools in hand to specify what the ":error" and ":loading" pseudo classes should match. My first attempt was to use the readyState property but the property can take a different set of values (and even different return types) on each element so it’s not a suitable solution. Since readyState is killed by its legacy issues, let’s define something new that takes in consideration that problem. A resource may fails to load for many reasons, but the two most important issues are : (1) failled to download to resource (2) failled to interpret the resource (=unrecognized format). For the download part, I propose to reuse the HttpRequest model defined in XHR Level 2. It could work easily for any kind of download process. For the interpretation part, I propose the following model, based on a ResourceInterpreter. The ResourceInterpreter is specific to each media type an has the following defintion : IResourceInterpreter := interface { acceptedFormats: string A value indicating the accepted resource MIME types (ie: “image/*”, “video/*” or “text/html, */*”) Should at least contains all the mime types contained in the Accept header sent by the underlaying http request. Read-only. isInitialized : bool Returns a value indicating that the current resource interperter has been initialized. Read-only. isInteractive : bool Returns a value indicating that the current resource interpreter can return a partial response eg: interlaced JPEG, partial VIDEO, SVG with undownloaded linked images... Read-only. isCompleted : bool Returns a value indicating that the current resource interpreter can return a final response. note: this includes cases where isBroken is set to true and where the result is null. Read-only. isBroken : bool Returns a value indicating that the current resource interpreter failled to interpret given data. Read-only. httpRequest : HttpRequest (=XMLHttpRequest Level 2+) Returns the underlying HttpRequest of the element, or null if it hasn’t been initialized yet. ResponseType should be set to ArrayBuffer. ReadyState should be LOADING (3) at least. Read-only. result: any Any object that represents the transformed response. Can be the parent IMG or VIDEO tag, if any. Should return null if an error occured. Read-only. oninitialized : event oninteractive : event oncompleted : event onbroken : event } Any element that can trigger an HTTP request should then implements the IResourceInterpreter interface. Then, the CSS WG would be allowed to define five new pseudo-classes : :uninitialized -- matches any element implementing the IResourceInterpreter interface and having isInitialized set to false. :loading -- matches any element implementing the IResourceInterpreter interface and having isInitialized set to true and isCompleted to false. :interactive -- matches any element implementing the IResourceInterpreter interface and having isInteractive set to true. :loaded -- matches any element implementing the IResourceInterpreter interface and having isCompleted set to true and isBroken to false. :error -- matches any element implementing the IResourceInterpreter interface and having isBroken to true. Use cases includes : - show fallback content for ":error" IMG, AUDIO or VIDEO tags - display a message asking the user to wait while there's a "IMG:loading" match - hide any ".galery img:loading" element, or show a fallback - furnish a fallback content for ":loading" and ":error" IFRAME whose content is sent in a named flow (CSS3 Regions), by setting their "content" property. [2] That would also makes it possible for a script to get a binary representation of an image simply by using "var buffer = myImage.httpRequest.response;" (prevents the use of a new XMLHttpRequest object using the same URL). Best regards, François [1] refers to mails from Lea Verou, Matt Wilcox, Charles Pritchard, and myself (at least). [2] this problem currently has no solution, as acknowledged by Alex Mogilevsky, spec editor.
Received on Friday, 3 February 2012 12:05:23 UTC