- From: Kornel Lesiński <kornel@geekhood.net>
- Date: Tue, 19 Aug 2014 04:07:43 +0100
- To: Marcos Caceres <w3c@marcosc.com>
- Cc: WHAT Working Group <whatwg@lists.whatwg.org>
>> I'd prefer if individual lock types were instances of objects, e.g. navigator.*Lock objects could be instances of a variant of the WakeLock interface:
>>
>> navigator.screenLock.request();
>> navigator.screenLock.isHeld();
>>
>> navigator.cpuLock.request();
>> navigator.cpuLock.release();
>>
> Personally, this doesn't strike me as good API design. It means having a bunch of attributes that all use the same class but only differ in name.
Really?
I think clearly separating different classes of locks (with a common base class) is much better than conflating them behind a weakly typed string-driven API.
It's like:
Element.firstChild.getAttribute(…);
Element.nextSibling.getAttribute(…);
instead of:
Element.getAttribute("firstChild", …);
Element.getAttribute("nextSibling", …);
>> Alternatively, if the WakeLock was instantiable (to have a standard way for independent page components to share locks) then these objects could be constructors:
>>
>> if (navigator.ScreenLock) {
>> var lock = new navigator.ScreenLock();
>> …
>> lock.release();
>> }
>>
>> (or `new navigator.wakeLocks.Screen()`, etc.)
> We don't have any APIs like this today on the Web. It would be weird :)
"Weird" is subjective and a vague criticism. Can you elaborate what's wrong with that?
> It would just be better to have a constructor on the interface: `new WakeLock("screen")` or whatever.
I don't see any benefit in obscuring types of the objects.
String-driven API doesn't allow simple feature detection, and a single type that conflates all lock types makes extensibility uglier. You won't be able to elegantly add methods that are valid only for some types of locks, e.g. `new WakeLock("cpu").dimScreen()` is nonsense, but would valid from perspective of WebIDL and JS prototypes.
--
regards, Kornel
Received on Tuesday, 19 August 2014 03:08:10 UTC