- From: Mercurial notifier <cvsmail@w3.org>
- Date: Fri, 14 Nov 2014 16:01:50 +0000
- To: public-dap-commits@w3.org
changeset: 585:6cbf64c7dec0 tag: tip user: Anssi Kostiainen <anssi.kostiainen@intel.com> date: Fri Nov 14 18:01:39 2014 +0200 files: battery/CR2-diff.html description: Add LC2-to-CR2 diff. diff -r 587f69a20dc6 -r 6cbf64c7dec0 battery/CR2-diff.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/battery/CR2-diff.html Fri Nov 14 18:01:39 2014 +0200 @@ -0,0 +1,3574 @@ +<!DOCTYPE html> +<html lang="en" dir="ltr" typeof="bibo:Document w3p:CR" about="" property="dcterms:language" content="en"> +<head> +<title>Battery Status API</title> +<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> +<style type="text/css"> +/***************************************************************** + * ReSpec 3 CSS + * Robin Berjon - http://berjon.com/ + *****************************************************************/ + +/* --- INLINES --- */ +em.rfc2119 { + text-transform: lowercase; + font-variant: small-caps; + font-style: normal; + color: #900; +} + +h1 acronym, h2 acronym, h3 acronym, h4 acronym, h5 acronym, h6 acronym, a acronym, +h1 abbr, h2 abbr, h3 abbr, h4 abbr, h5 abbr, h6 abbr, a abbr { + border: none; +} + +dfn { + font-weight: bold; +} + +a.internalDFN { + color: inherit; + border-bottom: 1px solid #99c; + text-decoration: none; +} + +a.externalDFN { + color: inherit; + border-bottom: 1px dotted #ccc; + text-decoration: none; +} + +a.bibref { + text-decoration: none; +} + +cite .bibref { + font-style: normal; +} + +code { + color: #C83500; +} + +/* --- TOC --- */ +.toc a, .tof a { + text-decoration: none; +} + +a .secno, a .figno { + color: #000; +} + +ul.tof, ol.tof { + list-style: none outside none; +} + +.caption { + margin-top: 0.5em; + font-style: italic; +} + +/* --- TABLE --- */ +table.simple { + border-spacing: 0; + border-collapse: collapse; + border-bottom: 3px solid #005a9c; +} + +.simple th { + background: #005a9c; + color: #fff; + padding: 3px 5px; + text-align: left; +} + +.simple th[scope="row"] { + background: inherit; + color: inherit; + border-top: 1px solid #ddd; +} + +.simple td { + padding: 3px 10px; + border-top: 1px solid #ddd; +} + +.simple tr:nth-child(even) { + background: #f0f6ff; +} + +/* --- DL --- */ +.section dd > p:first-child { + margin-top: 0; +} + +.section dd > p:last-child { + margin-bottom: 0; +} + +.section dd { + margin-bottom: 1em; +} + +.section dl.attrs dd, .section dl.eldef dd { + margin-bottom: 0; +} + +@media print { + .removeOnSave { + display: none; + } +} +</style> + +<style type="text/css"> +/* --- EXAMPLES --- */ +div.example-title { + min-width: 7.5em; + color: #b9ab2d; +} +div.example-title span { + text-transform: uppercase; +} +aside.example, div.example, div.illegal-example { + padding: 0.5em; + margin: 1em 0; + position: relative; + clear: both; +} +div.illegal-example { color: red } +div.illegal-example p { color: black } +aside.example, div.example { + padding: .5em; + border-left-width: .5em; + border-left-style: solid; + border-color: #e0cb52; + background: #fcfaee; +} + +aside.example div.example { + border-left-width: .1em; + border-color: #999; + background: #fff; +} +aside.example div.example div.example-title { + color: #999; +} +</style> + +<style type="text/css"> +/* --- ISSUES/NOTES --- */ +div.issue-title, div.note-title { + padding-right: 1em; + min-width: 7.5em; + color: #b9ab2d; +} +div.issue-title { color: #e05252; } +div.note-title { color: #2b2; } +div.issue-title span, div.note-title span { + text-transform: uppercase; +} +div.note, div.issue { + margin-top: 1em; + margin-bottom: 1em; +} +.note > p:first-child, .issue > p:first-child { margin-top: 0 } +.issue, .note { + padding: .5em; + border-left-width: .5em; + border-left-style: solid; +} +div.issue, div.note { + padding: 1em 1.2em 0.5em; + margin: 1em 0; + position: relative; + clear: both; +} +span.note, span.issue { padding: .1em .5em .15em; } + +.issue { + border-color: #e05252; + background: #fbe9e9; +} +.note { + border-color: #52e052; + background: #e9fbe9; +} + + +</style> + +<style type="text/css"> +/* HIGHLIGHTS */ +code.prettyprint { + color: inherit; +} + +/* this from google-code-prettify */ +.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee} +</style> + +<style type="text/css"> +/* --- WEB IDL --- */ +pre.idl { + border-top: 1px solid #90b8de; + border-bottom: 1px solid #90b8de; + padding: 1em; + line-height: 120%; +} + +pre.idl::before { + content: "WebIDL"; + display: block; + width: 150px; + background: #90b8de; + color: #fff; + font-family: initial; + padding: 3px; + font-weight: bold; + margin: -1em 0 1em -1em; +} + +.idlType { + color: #ff4500; + font-weight: bold; + text-decoration: none; +} + +/*.idlModule*/ +/*.idlModuleID*/ +/*.idlInterface*/ +.idlInterfaceID, .idlDictionaryID, .idlCallbackID, .idlEnumID { + font-weight: bold; + color: #005a9c; +} +a.idlEnumItem { + color: #000; + border-bottom: 1px dotted #ccc; + text-decoration: none; +} + +.idlSuperclass { + font-style: italic; + color: #005a9c; +} + +/*.idlAttribute*/ +.idlAttrType, .idlFieldType, .idlMemberType { + color: #005a9c; +} +.idlAttrName, .idlFieldName, .idlMemberName { + color: #ff4500; +} +.idlAttrName a, .idlFieldName a, .idlMemberName a { + color: #ff4500; + border-bottom: 1px dotted #ff4500; + text-decoration: none; +} + +/*.idlMethod*/ +.idlMethType, .idlCallbackType { + color: #005a9c; +} +.idlMethName { + color: #ff4500; +} +.idlMethName a { + color: #ff4500; + border-bottom: 1px dotted #ff4500; + text-decoration: none; +} + +/*.idlCtor*/ +.idlCtorName { + color: #ff4500; +} +.idlCtorName a { + color: #ff4500; + border-bottom: 1px dotted #ff4500; + text-decoration: none; +} + +/*.idlParam*/ +.idlParamType { + color: #005a9c; +} +.idlParamName, .idlDefaultValue { + font-style: italic; +} + +.extAttr { + color: #666; +} + +/*.idlSectionComment*/ +.idlSectionComment { + color: gray; +} + +/*.idlConst*/ +.idlConstType { + color: #005a9c; +} +.idlConstName { + color: #ff4500; +} +.idlConstName a { + color: #ff4500; + border-bottom: 1px dotted #ff4500; + text-decoration: none; +} + +/*.idlException*/ +.idlExceptionID { + font-weight: bold; + color: #c00; +} + +.idlTypedefID, .idlTypedefType { + color: #005a9c; +} + +.idlRaises, .idlRaises a.idlType, .idlRaises a.idlType code, .excName a, .excName a code { + color: #c00; + font-weight: normal; +} + +.excName a { + font-family: monospace; +} + +.idlRaises a.idlType, .excName a.idlType { + border-bottom: 1px dotted #c00; +} + +.excGetSetTrue, .excGetSetFalse, .prmNullTrue, .prmNullFalse, .prmOptTrue, .prmOptFalse { + width: 45px; + text-align: center; +} +.excGetSetTrue, .prmNullTrue, .prmOptTrue { color: #0c0; } +.excGetSetFalse, .prmNullFalse, .prmOptFalse { color: #c00; } + +.idlImplements a { + font-weight: bold; +} + +dl.attributes, dl.methods, dl.constants, dl.constructors, dl.fields, dl.dictionary-members { + margin-left: 2em; +} + +.attributes dt, .methods dt, .constants dt, .constructors dt, .fields dt, .dictionary-members dt { + font-weight: normal; +} + +.attributes dt code, .methods dt code, .constants dt code, .constructors dt code, .fields dt code, .dictionary-members dt code { + font-weight: bold; + color: #000; + font-family: monospace; +} + +.attributes dt code, .fields dt code, .dictionary-members dt code { + background: #ffffd2; +} + +.attributes dt .idlAttrType code, .fields dt .idlFieldType code, .dictionary-members dt .idlMemberType code { + color: #005a9c; + background: transparent; + font-family: inherit; + font-weight: normal; + font-style: italic; +} + +.methods dt code { + background: #d9e6f8; +} + +.constants dt code { + background: #ddffd2; +} + +.constructors dt code { + background: #cfc; +} + +.attributes dd, .methods dd, .constants dd, .constructors dd, .fields dd, .dictionary-members dd { + margin-bottom: 1em; +} + +table.parameters, table.exceptions { + border-spacing: 0; + border-collapse: collapse; + margin: 0.5em 0; + width: 100%; +} +table.parameters { border-bottom: 1px solid #90b8de; } +table.exceptions { border-bottom: 1px solid #deb890; } + +.parameters th, .exceptions th { + color: #fff; + padding: 3px 5px; + text-align: left; + font-family: initial; + font-weight: normal; + text-shadow: #666 1px 1px 0; +} +.parameters th { background: #90b8de; } +.exceptions th { background: #deb890; } + +.parameters td, .exceptions td { + padding: 3px 10px; + border-top: 1px solid #ddd; + vertical-align: top; +} + +.parameters tr:first-child td, .exceptions tr:first-child td { + border-top: none; +} + +.parameters td.prmName, .exceptions td.excName, .exceptions td.excCodeName { + width: 100px; +} + +.parameters td.prmType { + width: 120px; +} + +table.exceptions table { + border-spacing: 0; + border-collapse: collapse; + width: 100%; +} +</style> +<link rel="stylesheet" href="https://www.w3.org/StyleSheets/TR/W3C-CR" type="text/css"><!--[if lt IE 9]><script src='https://www.w3.org/2008/site/js/html5shiv.js'></script><![endif]--> +<style type='text/css'> +.diff-old-a { + font-size: smaller; + color: red; +} + +.diff-new { background-color: yellow; } +.diff-chg { background-color: lime; } +.diff-new:before, +.diff-new:after + { content: "\2191" } +.diff-chg:before, .diff-chg:after + { content: "\2195" } +.diff-old { text-decoration: line-through; background-color: #FBB; } +.diff-old:before, +.diff-old:after + { content: "\2193" } +:focus { border: thin red solid} +</style> +</head> +<body class="h-entry" role="document" id="respecDocument"> +<div class="head" role="contentinfo" id="respecHeader"> +<p> +<a href="http://www.w3.org/"> +<img width="72" height="48" src="https://www.w3.org/Icons/w3c_home" alt="W3C"> +</a> +</p> +<h1 class="title p-name" id="title" property="dcterms:title"> +Battery +Status +API +</h1> +<h2 property="dcterms:issued" datatype="xsd:dateTime" content="2014-12-08T22:00:00.000Z" id="w3c-candidate-recommendation-09-december-2014"> +<abbr title="World Wide Web Consortium"> +W3C +</abbr> +<del class="diff-old">Last +Call +Working +Draft +28 +August +</del> +<ins class="diff-chg">Candidate +Recommendation +</ins><time class="dt-published" datetime="2014-12-09"><ins class="diff-chg"> +09 +December +</ins> +2014 +</time> +</h2> +<dl> +<dt> +This +version: +</dt> +<dd> +<del class="diff-old">http://www.w3.org/TR/2014/WD-battery-status-20140828/ +</del> +<a class="u-url" href="http://www.w3.org/TR/2014/CR-battery-status-20141209/"> +<ins class="diff-chg">http://www.w3.org/TR/2014/CR-battery-status-20141209/ +</ins> +</a> +</dd> +<dt> +Latest +published +version: +</dt> +<dd> +<a href="http://www.w3.org/TR/battery-status/"> +http://www.w3.org/TR/battery-status/ +</a> +</dd> +<dt> +Latest +editor's +draft: +</dt> +<dd> +<a href="http://dvcs.w3.org/hg/dap/raw-file/default/battery/Overview.html"> +http://dvcs.w3.org/hg/dap/raw-file/default/battery/Overview.html +</a> +</dd> +<dt> +Test +suite: +</dt> +<dd> +<a href="http://w3c-test.org/battery-status/"> +http://w3c-test.org/battery-status/ +</a> +</dd> +<dt> +Implementation +report: +</dt> +<dd> +<a href="http://www.w3.org/2009/dap/wiki/ImplementationStatus"> +http://www.w3.org/2009/dap/wiki/ImplementationStatus +</a> +</dd> +<dt> +Previous +version: +</dt> +<dd> +<del class="diff-old">http://www.w3.org/TR/2012/CR-battery-status-20120508/ +</del> +<a rel="dcterms:replaces" href="http://www.w3.org/TR/2014/WD-battery-status-20140828/"> +<ins class="diff-chg">http://www.w3.org/TR/2014/WD-battery-status-20140828/ +</ins> +</a> +</dd> +<dt> +Editors: +</dt> +<dd class="p-author h-card vcard" rel="bibo:editor" inlist=""> +<span typeof="foaf:Person"> +<span property="foaf:name" class="p-name fn"> +Anssi +Kostiainen +</span>, +<a rel="foaf:workplaceHomepage" class="p-org org h-org h-card" href="http://intel.com/"> +Intel +</a> +</span> +</dd> +<dd class="p-author h-card vcard" rel="bibo:editor" inlist=""> +<span typeof="foaf:Person"> +<span property="foaf:name" class="p-name fn"> +Mounir +Lamouri +</span>, +<a rel="foaf:workplaceHomepage" class="p-org org h-org h-card" href="http://google.com/"> +Google +Inc. +</a> +(previously +Mozilla) +</span> +</dd> +</dl> +<p class="copyright"> +<a href="http://www.w3.org/Consortium/Legal/ipr-notice#Copyright"> +Copyright +</a> +© +2014 +<a href="http://www.w3.org/"> +<abbr title="World Wide Web Consortium"> +W3C +</abbr> +</a> +<sup> +® +</sup> +( +<a href="http://www.csail.mit.edu/"> +<abbr title="Massachusetts Institute of Technology"> +MIT +</abbr> +</a>, +<a href="http://www.ercim.eu/"> +<abbr title="European Research Consortium for Informatics and Mathematics"> +ERCIM +</abbr> +</a>, +<a href="http://www.keio.ac.jp/"> +Keio +</a>, +<a href="http://ev.buaa.edu.cn/"> +Beihang +</a> +), +All +Rights +Reserved. +<abbr title="World Wide Web Consortium"> +W3C +</abbr> +<a href="http://www.w3.org/Consortium/Legal/ipr-notice#Legal_Disclaimer"> +liability +</a>, +<a href="http://www.w3.org/Consortium/Legal/ipr-notice#W3C_Trademarks"> +trademark +</a> +and +<a href="http://www.w3.org/Consortium/Legal/copyright-documents"> +document +use +</a> +rules +apply. +</p> +<hr> +</div> +<section id="abstract" class="introductory" property="dcterms:abstract" datatype typeof="bibo:Chapter" resource="#abstract" rel="bibo:Chapter"> +<h2 role="heading" id="h2_abstract"> +Abstract +</h2> +<p> +This +specification +defines +an +API +that +provides +information +about +the +battery +status +of +the +hosting +device. +</p> +</section> +<section id="sotd" class="introductory" typeof="bibo:Chapter" resource="#sotd" rel="bibo:Chapter"> +<h2 role="heading" id="h2_sotd"> +Status +of +This +Document +</h2> +<p> +<em> +This +section +describes +the +status +of +this +document +at +the +time +of +its +publication. +Other +documents +may +supersede +this +document. +A +list +of +current +<abbr title="World Wide Web Consortium"> +W3C +</abbr> +publications +and +the +latest +revision +of +this +technical +report +can +be +found +in +the +<a href="http://www.w3.org/TR/"> +<abbr title="World Wide Web Consortium"> +W3C +</abbr> +technical +reports +index +</a> +at +http://www.w3.org/TR/. +</em> +</p> +<p> +The +functionality +described +in +this +specification +was +initially +specified +as +part +of +the +<a href="http://www.w3.org/TR/system-info-api/"> +System +Information +API +</a> +but +has +been +extracted +in +order +to +be +more +readily +available, +more +straightforward +to +implement, +and +in +order +to +produce +a +specification +that +could +be +implemented +on +its +own +merits +without +interference +with +other, +often +unrelated, +features. +</p> +<p> +<del class="diff-old">The +following +</del> +<ins class="diff-chg">No +substantial +</ins> +changes +have +been +made +since +the +<a href="http://www.w3.org/TR/2014/WD-battery-status-20140828/"> +<abbr title="World Wide Web Consortium"> +W3C +</abbr> +<del class="diff-old">Candidate +Recommendation +08 +May +2012 +</del> +<ins class="diff-chg">Last +Call +Working +Draft +28 +August +2014 +</ins> +</a> +( +<a href="CR2-diff.html"> +diff +</a> +<del class="diff-old">): +</del> +<ins class="diff-chg">). +</ins> +</p> +<del class="diff-old">Expose +BatteryManager +via +getBattery() +returning +a +Promise +instead +of +a +synchronous +accessor. +( +Section +5 +) +Clarify +default +values +when +a +BatteryManager +object +is +created +and +the +implementation +</del> +<p> +<ins class="diff-chg">The +CR +exit +criterion +</ins> +is +<del class="diff-old">unable +to +report +the +battery +status +information +. +( +Section +6 +) +Specify +the +behavior +when +a +host +device +has +more +than +one +battery. +( +Section +6.1 +) +</del> +<ins class="diff-chg">two +interoperable +deployed +implementations +of +each +feature. +No +features +are +marked +as +'at-risk'. +</ins></p> +<p> +This +document +was +published +by +the +<a href="http://www.w3.org/2009/dap/"> +Device +APIs +Working +Group +</a> +as +a +<del class="diff-old">Last +Call +Working +Draft. +</del> +<ins class="diff-chg">Candidate +Recommendation. +</ins> +This +document +is +intended +to +become +a +<abbr title="World Wide Web Consortium"> +W3C +</abbr> +Recommendation. +If +you +wish +to +make +comments +regarding +this +document, +please +send +them +to +<a href="mailto:public-device-apis@w3.org"> +public-device-apis@w3.org +</a> +( +<a href="mailto:public-device-apis-request@w3.org?subject=subscribe"> +subscribe +</a>, +<a href="http://lists.w3.org/Archives/Public/public-device-apis/"> +archives +</a> +). +<del class="diff-old">The +Last +Call +period +ends +02 +October +2014. +</del> +<abbr title="World Wide Web Consortium"> +<ins class="diff-chg">W3C +</ins></abbr><ins class="diff-chg"> +publishes +a +Candidate +Recommendation +to +indicate +that +the +document +is +believed +to +be +stable +and +to +encourage +implementation +by +the +developer +community. +This +Candidate +Recommendation +is +expected +to +advance +to +Proposed +Recommendation +no +earlier +than +03 +February +2015. +</ins> +All +comments +are +welcome. +</p> +<p> +Please +see +the +Working +Group's +<a href="http://www.w3.org/2009/dap/wiki/ImplementationStatus"> +implementation +report +</a>. +</p> +<p> +Publication +as +a +<del class="diff-old">Last +Call +Working +Draft +</del> +<ins class="diff-chg">Candidate +Recommendation +</ins> +does +not +imply +endorsement +by +the +<abbr title="World Wide Web Consortium"> +W3C +</abbr> +Membership. +This +is +a +draft +document +and +may +be +updated, +replaced +or +obsoleted +by +other +documents +at +any +time. +It +is +inappropriate +to +cite +this +document +as +other +than +work +in +progress. +</p> +<p> +This +<del class="diff-old">is +a +Last +Call +Working +Draft +and +thus +the +Working +Group +has +determined +that +this +document +has +satisfied +the +relevant +technical +requirements +and +is +sufficiently +stable +to +advance +through +the +Technical +Recommendation +process. +This +</del> +document +was +produced +by +a +group +operating +under +the +<a id="sotd_patent" about="" rel="w3p:patentRules" href="http://www.w3.org/Consortium/Patent-Policy-20040205/"> +5 +February +2004 +<abbr title="World Wide Web Consortium"> +W3C +</abbr> +Patent +Policy +</a>. +<abbr title="World Wide Web Consortium"> +W3C +</abbr> +maintains +a +<a href="http://www.w3.org/2004/01/pp-impl/43696/status" rel="disclosure"> +public +list +of +any +patent +disclosures +</a> +made +in +connection +with +the +deliverables +of +the +group; +that +page +also +includes +instructions +for +disclosing +a +patent. +An +individual +who +has +actual +knowledge +of +a +patent +which +the +individual +believes +contains +<a href="http://www.w3.org/Consortium/Patent-Policy-20040205/#def-essential"> +Essential +Claim(s) +</a> +must +disclose +the +information +in +accordance +with +<a href="http://www.w3.org/Consortium/Patent-Policy-20040205/#sec-Disclosure"> +section +6 +of +the +<abbr title="World Wide Web Consortium"> +W3C +</abbr> +Patent +Policy +</a>. +</p> +<p> +This +document +is +governed +by +the +<a id="w3c_process_revision" href="http://www.w3.org/2005/10/Process-20051014/"> +14 +October +2005 +<abbr title="World Wide Web Consortium"> +W3C +</abbr> +Process +Document +</a>. +</p> +</section> +<section id="toc"> +<h2 class="introductory" role="heading" id="h2_toc"> +Table +of +Contents +</h2> +<ul class="toc" role="directory" id="respecContents"> +<li class="tocline"> +<a href="#introduction" class="tocxref"> +<span class="secno"> +1. +</span> +Introduction +</a> +</li> +<li class="tocline"> +<a href="#conformance" class="tocxref"> +<span class="secno"> +2. +</span> +Conformance +</a> +</li> +<li class="tocline"> +<a href="#terminology" class="tocxref"> +<span class="secno"> +3. +</span> +Terminology +</a> +</li> +<li class="tocline"> +<a href="#security-and-privacy-considerations" class="tocxref"> +<span class="secno"> +4. +</span> +Security +and +privacy +considerations +</a> +</li> +<li class="tocline"> +<a href="#the-navigator-interface" class="tocxref"> +<span class="secno"> +5. +</span> +The +<span class="formerLink"> +<code> +Navigator +</code> +</span> +interface +</a> +</li> +<li class="tocline"> +<a href="#the-batterymanager-interface" class="tocxref"> +<span class="secno"> +6. +</span> +The +<span class="formerLink"> +<code> +BatteryManager +</code> +</span> +interface +</a> +<ul class="toc"> +<li class="tocline"> +<a href="#multiple-batteries" class="tocxref"> +<span class="secno"> +6.1 +</span> +Multiple +batteries +</a> +</li> +<li class="tocline"> +<a href="#event-handlers" class="tocxref"> +<span class="secno"> +6.2 +</span> +Event +handlers +</a> +</li> +</ul> +</li> +<li class="tocline"> +<a href="#examples" class="tocxref"> +<span class="secno"> +7. +</span> +Examples +</a> +</li> +<li class="tocline"> +<a href="#acknowledgements" class="tocxref"> +<span class="secno"> +A. +</span> +Acknowledgements +</a> +</li> +<li class="tocline"> +<a href="#references" class="tocxref"> +<span class="secno"> +B. +</span> +References +</a> +<ul class="toc"> +<li class="tocline"> +<a href="#normative-references" class="tocxref"> +<span class="secno"> +B.1 +</span> +Normative +references +</a> +</li> +</ul> +</li> +</ul> +</section> +<section class="informative" id="introduction"> +<h2 role="heading" id="h2_introduction"> +<span class="secno"> +1. +</span> +Introduction +</h2> +<p> +<em> +This +section +is +non-normative. +</em> +</p> +<p> +The +Battery +Status +API +specification +defines +a +means +for +web +developers +to +programmatically +determine +the +battery +status +of +the +hosting +device. +Without +knowing +the +battery +status +of +a +device, +a +web +developer +must +design +the +web +application +with +an +assumption +of +sufficient +battery +level +for +the +task +at +hand. +This +means +the +battery +of +a +device +may +exhaust +faster +than +desired +because +web +developers +are +unable +to +make +decisions +based +on +the +battery +status. +Given +knowledge +of +the +battery +status, +web +developers +are +able +to +craft +web +content +and +applications +which +are +power-efficient, +thereby +leading +to +improved +user +experience. +Authors +should +be +aware, +however, +that +a +naïve +implementation +of +this +API +can +negatively +affect +the +battery +life. +</p> +<p> +The +Battery +Status +API +can +be +used +to +defer +or +scale +back +work +when +the +device +is +not +charging +in +or +is +low +on +battery. +An +archetype +of +an +advanced +web +application, +a +web-based +email +client, +may +check +the +server +for +new +email +every +few +seconds +if +the +device +is +charging, +but +do +so +less +frequently +if +the +device +is +not +charging +or +is +low +on +battery. +Another +example +is +a +web-based +word +processor +which +could +monitor +the +battery +level +and +save +changes +before +the +battery +runs +out +to +prevent +data +loss. +</p> +</section> +<section id="conformance" typeof="bibo:Chapter" resource="#conformance" rel="bibo:Chapter"> +<h2 role="heading" id="h2_conformance"> +<span class="secno"> +2. +</span> +Conformance +</h2> +<p> +As +well +as +sections +marked +as +non-normative, +all +authoring +guidelines, +diagrams, +examples, +and +notes +in +this +specification +are +non-normative. +Everything +else +in +this +specification +is +normative. +</p> +<p id="respecRFC2119"> +The +key +words +<em class="rfc2119" title="MUST"> +MUST +</em>, +<em class="rfc2119" title="MUST NOT"> +MUST +NOT +</em>, +<del class="diff-old">REQUIRED +, +</del> +<ins class="diff-chg">and +</ins> +<em class="rfc2119" title="SHOULD"> +SHOULD +<del class="diff-old">, +SHOULD +NOT +, +RECOMMENDED +, +MAY +, +and +OPTIONAL +</del> +</em> +<del class="diff-old">in +this +specification +</del> +are +to +be +interpreted +as +described +in +[ +<cite> +<a class="bibref" href="#bib-RFC2119"> +RFC2119 +</a> +</cite> +]. +</p> +<p> +This +specification +defines +conformance +criteria +that +apply +to +a +single +product: +the +<dfn id="dfn-user-agent"> +user +agent +</dfn> +that +implements +the +interfaces +that +it +contains. +</p> +<p> +Implementations +that +use +ECMAScript +to +implement +the +APIs +defined +in +this +specification +must +implement +them +in +a +manner +consistent +with +the +ECMAScript +Bindings +defined +in +the +Web +IDL +specification +[ +<cite> +<a class="bibref" href="#bib-WEBIDL"> +WEBIDL +</a> +</cite> +], +as +this +specification +uses +that +specification +and +terminology. +</p> +</section> +<section id="terminology"> +<h2 role="heading" id="h2_terminology"> +<span class="secno"> +3. +</span> +Terminology +</h2> +<p> +The +following +concepts, +terms +and +interfaces +are +defined +in +[ +<cite> +<a class="bibref" href="#bib-HTML5"> +HTML5 +</a> +</cite> +]: +</p> +<ul> +<li> +<code> +<a href="http://www.w3.org/html/wg/drafts/html/master/webappapis.html#navigator"> +Navigator +</a> +</code> +</li> +<li> +<code> +<a href="http://dev.w3.org/html5/spec/webappapis.html#eventhandler"> +EventHandler +</a> +</code> +</li> +<li> +<dfn id="dfn-queue-a-task"> +<a href="http://dev.w3.org/html5/spec/webappapis.html#queue-a-task"> +queue +a +task +</a> +</dfn> +</li> +<li> +<dfn id="dfn-fires-a-simple-event"> +<a href="http://dev.w3.org/html5/spec/webappapis.html#fire-a-simple-event"> +fires +a +simple +event +</a> +</dfn> +</li> +<li> +<dfn id="dfn-event-handlers"> +<a href="http://dev.w3.org/html5/spec/webappapis.html#event-handlers"> +event +handlers +</a> +</dfn> +</li> +<li> +<dfn id="dfn-event-handler-event-types"> +<a href="http://dev.w3.org/html5/spec/webappapis.html#event-handler-event-type"> +event +handler +event +types +</a> +</dfn> +</li> +<li> +<dfn id="dfn-browsing-context"> +<a href="http://dev.w3.org/html5/spec/browsers.html#browsing-context"> +browsing +context +</a> +</dfn> +</li> +</ul> +<p> +<a href="http://people.mozilla.org/~jorendorff/es6-draft.html#sec-promise-objects"> +<dfn id="dfn-promise"> +Promise +</dfn> +</a> +objects +are +defined +in +[ +<cite> +<a class="bibref" href="#bib-ECMASCRIPT"> +ECMASCRIPT +</a> +</cite> +]. +</p> +</section> +<section class="informative" id="security-and-privacy-considerations"> +<h2 role="heading" id="h2_security-and-privacy-considerations"> +<span class="secno"> +4. +</span> +Security +and +privacy +considerations +</h2> +<p> +<em> +This +section +is +non-normative. +</em> +</p> +<p> +The +API +defined +in +this +specification +is +used +to +determine +the +battery +status +of +the +hosting +device. +The +information +disclosed +has +minimal +impact +on +privacy +or +fingerprinting, +and +therefore +is +exposed +without +permission +grants. +For +example, +the +user +agent +can +obfuscate +the +exposed +value +in +a +way +that +authors +cannot +directly +know +if +a +hosting +device +has +no +battery, +is +charging +or +is +exposing +fake +values. +</p> +</section> +<section id="the-navigator-interface"> +<h2 role="heading" id="h2_the-navigator-interface"> +<span class="secno"> +5. +</span> +The +<a href="#idl-def-Navigator" class="idlType"> +<code> +Navigator +</code> +</a> +interface +</h2> +<pre class="idl"> +<span class="idlInterface" id="idl-def-Navigator">partial interface <span class="idlInterfaceID">Navigator</span> { +<span class="idlMethod"> <span class="idlMethType">Promise<<a href="#idl-def-BatteryManager" class="idlType"><code>BatteryManager</code></a>></span> <span class="idlMethName"><a href="#widl-Navigator-getBattery-Promise-BatteryManager">getBattery</a></span> ();</span> +};</span> +</pre> +<p> +For +each +<a href="#dfn-browsing-context" class="internalDFN"> +browsing +context +</a>, +there +is +a +<dfn id="dfn-battery-promise"> +battery +promise +</dfn>, +which +is +initially +set +to +<code> +null +</code>. +It +is +a +<a href="#dfn-promise" class="internalDFN"> +Promise +</a> +object +which +holds +a +<a href="#idl-def-BatteryManager" class="idlType"> +<code> +BatteryManager +</code> +</a>. +</p> +<p> +The +<code id="widl-Navigator-getBattery-Promise-BatteryManager"> +getBattery() +</code> +method, +when +invoked, +<em class="rfc2119" title="MUST"> +MUST +</em> +run +the +following +steps: +</p> +<ul> +<li> +If +<a href="#dfn-battery-promise" class="internalDFN"> +battery +promise +</a> +is +not +<code> +null +</code>, +return +<a href="#dfn-battery-promise" class="internalDFN"> +battery +promise +</a> +and +abort +these +steps. +</li> +<li> +Otherwise, +set +<a href="#dfn-battery-promise" class="internalDFN"> +battery +promise +</a> +to +a +newly +created +<a href="#dfn-promise" class="internalDFN"> +Promise +</a>. +</li> +<li> +Return +<a href="#dfn-battery-promise" class="internalDFN"> +battery +promise +</a> +and +continue +asynchronously. +</li> +<li> +<a href="#dfn-create-a-new-batterymanager-object" class="internalDFN"> +Create +a +new +<code> +BatteryManager +</code> +object +</a>, +and +let +<var> +battery +</var> +be +that +object. +</li> +<li> +<dfn id="dfn-resolve"> +Resolve +</dfn> +<a href="#dfn-battery-promise" class="internalDFN"> +battery +promise +</a> +with +<var> +battery +</var>. +</li> +</ul> +<p> +The +<a href="#dfn-user-agent" class="internalDFN"> +user +agent +</a> +<em class="rfc2119" title="MUST NOT"> +MUST +NOT +</em> +reject +the +<a href="#dfn-battery-promise" class="internalDFN"> +battery +promise +</a>. +</p> +</section> +<section id="the-batterymanager-interface"> +<h2 role="heading" id="h2_the-batterymanager-interface"> +<span class="secno"> +6. +</span> +The +<a href="#idl-def-BatteryManager" class="idlType"> +<code> +BatteryManager +</code> +</a> +interface +</h2> +<p> +The +<a href="#idl-def-BatteryManager" class="idlType"> +<code> +BatteryManager +</code> +</a> +interface +represents +the +<dfn id="dfn-current-battery-status-information"> +current +battery +status +information +</dfn> +of +the +hosting +device. +The +<code> +charging +</code> +attribute +represents +the +charging +state +of +the +system's +battery. +The +<code> +chargingTime +</code> +attribute +represents +the +time +remaining +in +seconds +until +the +system's +battery +is +fully +charged. +The +<code> +dischargingTime +</code> +attribute +represents +the +time +remaining +in +seconds +until +the +system's +battery +is +completely +discharged +and +the +system +is +about +to +be +suspended, +and +the +<code> +level +</code> +attribute +represents +the +level +of +the +system's +battery. +</p> +<pre class="idl"> +<span class="idlInterface" id="idl-def-BatteryManager">interface <span class="idlInterfaceID">BatteryManager</span> : <span class="idlSuperclass">EventTarget</span> { +<span class="idlAttribute"> readonly attribute <span class="idlAttrType">boolean</span> <span class="idlAttrName"><a href="#widl-BatteryManager-charging">charging</a></span>;</span> +<span class="idlAttribute"> readonly attribute <span class="idlAttrType">unrestricted double</span> <span class="idlAttrName"><a href="#widl-BatteryManager-chargingTime">chargingTime</a></span>;</span> +<span class="idlAttribute"> readonly attribute <span class="idlAttrType">unrestricted double</span> <span class="idlAttrName"><a href="#widl-BatteryManager-dischargingTime">dischargingTime</a></span>;</span> +<span class="idlAttribute"> readonly attribute <span class="idlAttrType">double</span> <span class="idlAttrName"><a href="#widl-BatteryManager-level">level</a></span>;</span> +<span class="idlAttribute"> attribute <span class="idlAttrType">EventHandler</span> <span class="idlAttrName"><a href="#widl-BatteryManager-onchargingchange">onchargingchange</a></span>;</span> +<span class="idlAttribute"> attribute <span class="idlAttrType">EventHandler</span> <span class="idlAttrName"><a href="#widl-BatteryManager-onchargingtimechange">onchargingtimechange</a></span>;</span> +<span class="idlAttribute"> attribute <span class="idlAttrType">EventHandler</span> <span class="idlAttrName"><a href="#widl-BatteryManager-ondischargingtimechange">ondischargingtimechange</a></span>;</span> +<span class="idlAttribute"> attribute <span class="idlAttrType">EventHandler</span> <span class="idlAttrName"><a href="#widl-BatteryManager-onlevelchange">onlevelchange</a></span>;</span> +};</span> +</pre> +<p> +When +the +<a href="#dfn-user-agent" class="internalDFN"> +user +agent +</a> +is +to +<dfn id="dfn-create-a-new-batterymanager-object"> +create +a +new +<code> +BatteryManager +</code> +object +</dfn>, +it +<em class="rfc2119" title="MUST"> +MUST +</em> +instantiate +a +new +<a href="#idl-def-BatteryManager" class="idlType"> +<code> +BatteryManager +</code> +</a> +object +and +set +its +attributes' +values +to +those +that +represent +the +<a href="#dfn-current-battery-status-information" class="internalDFN"> +current +battery +status +information +</a>, +unless +the +<a href="#dfn-user-agent" class="internalDFN"> +user +agent +</a> +is +<a href="#dfn-unable-to-report-the-battery-status-information" class="internalDFN"> +unable +to +report +the +battery +status +information +</a>, +in +which +case +the +values +<em class="rfc2119" title="MUST"> +MUST +</em> +be +set +to +<dfn id="dfn-default-values"> +default +values +</dfn> +as +follows: +<code> +charging +</code> +<em class="rfc2119" title="MUST"> +MUST +</em> +be +set +to +true, +<code> +chargingTime +</code> +<em class="rfc2119" title= "MUST"> +MUST +</em> +be +set +to +0, +<code> +dischargingTime +</code> +<em class="rfc2119" title="MUST"> +MUST +</em> +be +set +to +positive +Infinity, +and +<code> +level +</code> +<em class="rfc2119" title="MUST"> +MUST +</em> +be +set +to +1.0. +</p> +<p> +The +<a href="#dfn-user-agent" class="internalDFN"> +user +agent +</a> +is +said +to +be +<dfn id="dfn-unable-to-report-the-battery-status-information"> +unable +to +report +the +battery +status +information +</dfn>, +if +it +is +not +able +to +report +the +values +for +any +of +the +attributes, +for +example, +due +to +a +user +or +system +preference, +setting, +or +limitation. +</p> +<div class="note"> +<div class="note-title" aria-level="1" role="heading" id="h_note_1"> +<span> +Note +</span> +</div> +<p class=""> +Implementations +<a href="#dfn-unable-to-report-the-battery-status-information" class="internalDFN"> +unable +to +report +the +battery +status +information +</a> +emulate +a +fully +charged +and +plugged +in +battery +to +reduce +the +potential +for +fingerprinting +and +prevent +applications +from +degrading +performance, +if +the +battery +status +information +is +not +made +available, +for +example. +</p> +</div> +<p> +The +<code id="widl-BatteryManager-charging"> +charging +</code> +attribute +<em class="rfc2119" title="MUST"> +MUST +</em> +be +set +to +false +if +the +battery +is +discharging, +and +set +to +true, +if +the +battery +is +charging, +the +implementation +is +unable +to +report +the +state, +or +there +is +no +battery +attached +to +the +system, +or +otherwise. +When +the +battery +charging +state +is +updated, +the +<a href="#dfn-user-agent" class="internalDFN"> +user +agent +</a> +<em class="rfc2119" title="MUST"> +MUST +</em> +<a href="#dfn-queue-a-task" class="internalDFN"> +queue +a +task +</a> +which +sets +the +<code> +charging +</code> +attribute's +value +and +<a href="#dfn-fires-a-simple-event" class="internalDFN"> +fires +a +simple +event +</a> +named +<code> +<a href="#dfn-chargingchange" class="internalDFN"> +chargingchange +</a> +</code> +at +the +<a href="#idl-def-BatteryManager" class="idlType"> +<code> +BatteryManager +</code> +</a> +object. +</p> +<p> +The +<code id="widl-BatteryManager-chargingTime"> +chargingTime +</code> +attribute +<em class="rfc2119" title="MUST"> +MUST +</em> +be +set +to +0, +if +the +battery +is +full +or +there +is +no +battery +attached +to +the +system, +and +to +the +value +positive +Infinity +if +the +battery +is +discharging, +the +implementation +is +unable +to +report +the +remaining +charging +time, +or +otherwise. +When +the +battery +charging +time +is +updated, +the +<a href="#dfn-user-agent" class="internalDFN"> +user +agent +</a> +<em class="rfc2119" title="MUST"> +MUST +</em> +<a href="#dfn-queue-a-task" class="internalDFN"> +queue +a +task +</a> +which +sets +the +<code> +chargingTime +</code> +attribute's +value +and +<a href="#dfn-fires-a-simple-event" class="internalDFN"> +fires +a +simple +event +</a> +named +<code> +<a href="#dfn-chargingtimechange" class="internalDFN"> +chargingtimechange +</a> +</code> +at +the +<a href="#idl-def-BatteryManager" class="idlType"> +<code> +BatteryManager +</code> +</a> +object. +</p> +<p> +The +<code id="widl-BatteryManager-dischargingTime"> +dischargingTime +</code> +attribute +<em class="rfc2119" title="MUST"> +MUST +</em> +be +set +to +the +value +positive +Infinity, +if +the +battery +is +charging, +the +implementation +is +unable +to +report +the +remaining +discharging +time, +there +is +no +battery +attached +to +the +system, +or +otherwise. +When +the +battery +discharging +time +is +updated, +the +<a href="#dfn-user-agent" class="internalDFN"> +user +agent +</a> +<em class="rfc2119" title="MUST"> +MUST +</em> +<a href="#dfn-queue-a-task" class="internalDFN"> +queue +a +task +</a> +which +sets +the +<code> +dischargingTime +</code> +attribute's +value +and +<a href="#dfn-fires-a-simple-event" class="internalDFN"> +fires +a +simple +event +</a> +named +<code> +<a href="#dfn-dischargingtimechange" class="internalDFN"> +dischargingtimechange +</a> +</code> +at +the +<a href="#idl-def-BatteryManager" class="idlType"> +<code> +BatteryManager +</code> +</a> +object. +</p> +<p> +The +<code id="widl-BatteryManager-level"> +level +</code> +attribute +<em class="rfc2119" title="MUST"> +MUST +</em> +be +set +to +0 +if +the +system's +battery +is +depleted +and +the +system +is +about +to +be +suspended, +and +to +1.0 +if +the +battery +is +full, +the +implementation +is +unable +to +report +the +battery's +level, +or +there +is +no +battery +attached +to +the +system. +When +the +battery +level +is +updated, +the +<a href="#dfn-user-agent" class="internalDFN"> +user +agent +</a> +<em class="rfc2119" title="MUST"> +MUST +</em> +<a href="#dfn-queue-a-task" class="internalDFN"> +queue +a +task +</a> +which +sets +the +<code> +level +</code> +attribute's +value +and +<a href="#dfn-fires-a-simple-event" class="internalDFN"> +fires +a +simple +event +</a> +named +<code> +<a href="#dfn-levelchange" class="internalDFN"> +levelchange +</a> +</code> +at +the +<a href="#idl-def-BatteryManager" class="idlType"> +<code> +BatteryManager +</code> +</a> +object. +</p> +<div class="note"> +<div class="note-title" aria-level="1" role="heading" id="h_note_2"> +<span> +Note +</span> +</div> +<p class=""> +The +definition +of +how +often +the +<code> +<a href="#dfn-chargingtimechange" class="internalDFN"> +chargingtimechange +</a> +</code>, +<code> +<a href="#dfn-dischargingtimechange" class="internalDFN"> +dischargingtimechange +</a> +</code>, +and +<code> +<a href="#dfn-levelchange" class="internalDFN"> +levelchange +</a> +</code> +events +are +fired +is +left +to +the +implementation. +</p> +</div> +<section id="multiple-batteries" typeof="bibo:Chapter" resource="#multiple-batteries" rel="bibo:Chapter"> +<h3 role="heading" id="h3_multiple-batteries"> +<span class="secno"> +6.1 +</span> +Multiple +batteries +</h3> +<p> +If +a +hosting +device +contains +more +than +one +battery, +<a href="#idl-def-BatteryManager" class="idlType"> +<code> +BatteryManager +</code> +</a> +<em class="rfc2119" title="SHOULD"> +SHOULD +</em> +expose +an +unified +view +of +the +batteries. +</p> +<p> +The +<code> +charging +</code> +attribute +<em class="rfc2119" title="MUST"> +MUST +</em> +be +set +to +true +if +at +least +one +battery's +<code> +charging +</code> +state +as +described +above +is +true. +Otherwise, +it +<em class="rfc2119" title="MUST"> +MUST +</em> +be +set +to +false. +</p> +<p> +The +<code> +chargingTime +</code> +attribute +can +be +set +to +the +maximum +charging +time +of +the +individual +batteries +if +charging +in +parallel, +and +to +the +sum +of +the +individual +charging +times +if +charging +serially. +</p> +<p> +The +<code> +dischargingTime +</code> +attribute +can +be +set +to +the +maximum +discharging +time +of +the +individual +batteries +if +discharging +in +parallel, +and +to +the +sum +of +individual +discharging +times +if +discharging +serially. +</p> +<p> +The +<code> +level +</code> +attribute +can +be +set +to +the +average +of +the +levels +of +batteries +of +same +capacity, +or +the +weighted +average +of +the +battery +level +attributes +for +batteries +of +different +capacities. +</p> +</section> +<section id="event-handlers"> +<h3 role="heading" id="h3_event-handlers"> +<span class="secno"> +6.2 +</span> +Event +handlers +</h3> +<p> +The +following +are +the +<a href="#dfn-event-handlers" class="internalDFN"> +event +handlers +</a> +(and +their +corresponding +<a href="#dfn-event-handler-event-types" class="internalDFN"> +event +handler +event +types +</a> +) +that +<em class="rfc2119" title="MUST"> +MUST +</em> +be +supported +as +attributes +by +the +<a href="#idl-def-BatteryManager" class="idlType"> +<code> +BatteryManager +</code> +</a> +object: +</p> +<table class="simple"> +<thead> +<tr> +<th> +event +handler +</th> +<th> +event +handler +event +type +</th> +</tr> +</thead> +<tbody> +<tr> +<td> +<strong> +<code id="widl-BatteryManager-onchargingchange"> +onchargingchange +</code> +</strong> +</td> +<td> +<code> +<dfn id="dfn-chargingchange"> +chargingchange +</dfn> +</code> +</td> +</tr> +<tr> +<td> +<strong> +<code id="widl-BatteryManager-onchargingtimechange"> +onchargingtimechange +</code> +</strong> +</td> +<td> +<code> +<dfn id="dfn-chargingtimechange"> +chargingtimechange +</dfn> +</code> +</td> +</tr> +<tr> +<td> +<strong> +<code id="widl-BatteryManager-ondischargingtimechange"> +ondischargingtimechange +</code> +</strong> +</td> +<td> +<code> +<dfn id="dfn-dischargingtimechange"> +dischargingtimechange +</dfn> +</code> +</td> +</tr> +<tr> +<td> +<strong> +<code id="widl-BatteryManager-onlevelchange"> +onlevelchange +</code> +</strong> +</td> +<td> +<code> +<dfn id="dfn-levelchange"> +levelchange +</dfn> +</code> +</td> +</tr> +</tbody> +</table> +</section> +</section> +<section class="informative" id="examples"> +<h2 role="heading" id="h2_examples"> +<span class="secno"> +7. +</span> +Examples +</h2> +<p> +<em> +This +section +is +non-normative. +</em> +</p> +<p> +This +trivial +example +writes +the +battery +level +to +the +console +each +time +the +level +changes: +</p> +<div class="example"> +<div class="example-title"> +<span> +Example +1 +</span> +</div> +<pre class="example highlight prettyprint prettyprinted"> +<span class="com">// We get the initial value when the promise resolves ...</span><span class="pln"> +navigator</span><span class="pun">.</span><span class="pln">getBattery</span><span class="pun">().</span><span class="kwd">then</span><span class="pun">(</span><span class="kwd">function</span><span class="pun">(</span><span class="pln">battery</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> + console</span><span class="pun">.</span><span class="pln">log</span><span class="pun">(</span><span class="pln">battery</span><span class="pun">.</span><span class="pln">level</span><span class="pun">);</span><span class="pln"> + </span><span class="com">// ... and any subsequent updates.</span><span class="pln"> + battery</span><span class="pun">.</span><span class="pln">onlevelchange </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">function</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> + console</span><span class="pun">.</span><span class="pln">log</span><span class="pun">(</span><span class="kwd">this</span><span class="pun">.</span><span class="pln">level</span><span class="pun">);</span><span class="pln"> + </span><span class="pun">};</span><span class="pln"> +</span><span class="pun">});</span> +</pre> +</div> +<p> +Alternatively, +the +same +using +the +<code> +addEventListener() +</code> +method: +</p> +<div class="example"> +<div class="example-title"> +<span> +Example +2 +</span> +</div> +<pre class="example highlight prettyprint prettyprinted"> +<span class="pln">navigator</span><span class="pun">.</span><span class="pln">getBattery</span><span class="pun">().</span><span class="kwd">then</span><span class="pun">(</span><span class="kwd">function</span><span class="pun">(</span><span class="pln">battery</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> + console</span><span class="pun">.</span><span class="pln">log</span><span class="pun">(</span><span class="pln">battery</span><span class="pun">.</span><span class="pln">level</span><span class="pun">);</span><span class="pln"> + battery</span><span class="pun">.</span><span class="pln">addEventListener</span><span class="pun">(</span><span class="str">'levelchange'</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">function</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> + console</span><span class="pun">.</span><span class="pln">log</span><span class="pun">(</span><span class="kwd">this</span><span class="pun">.</span><span class="pln">level</span><span class="pun">);</span><span class="pln"> + </span><span class="pun">});</span><span class="pln"> +</span><span class="pun">});</span> +</pre> +</div> +<p> +The +following +example +updates +the +indicators +to +show +the +charging +state, +level +and +time +remaining +in +minutes: +</p> +<div class="example"> +<div class="example-title"> +<span> +Example +3 +</span> +</div> +<pre class="example highlight prettyprint prettyprinted"> +<span class="dec"><!DOCTYPE html></span><span class="pln"> +</span><span class="tag"><html></span><span class="pln"> +</span><span class="tag"><head></span><span class="pln"> + </span><span class="tag"><title></span><span class="pln">Battery Status API Example</span><span class="tag"></title></span><span class="pln"> + </span><span class="tag"><script></span><span class="pln"> + window</span><span class="pun">.</span><span class="pln">onload </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> </span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> + </span><span class="kwd">function</span><span class="pln"> updateBatteryStatus</span><span class="pun">(</span><span class="pln">battery</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> + document</span><span class="pun">.</span><span class="pln">querySelector</span><span class="pun">(</span><span class="str">'#charging'</span><span class="pun">).</span><span class="pln">textContent </span><span class="pun">=</span><span class="pln"> battery</span><span class="pun">.</span><span class="pln">charging </span><span class="pun">?</span><span class="pln"> </span><span class="str">'charging'</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> </span><span class="str">'not charging'</span><span class="pun">;</span><span class="pln"> + document</span><span class="pun">.</span><span class="pln">querySelector</span><span class="pun">(</span><span class="str">'#level'</span><span class="pun">).</span><span class="pln">textContent </span><span class="pun">=</span><span class="pln"> battery</span><span class="pun">.</span><span class="pln">level</span><span class="pun">;</span><span class="pln"> + document</span><span class="pun">.</span><span class="pln">querySelector</span><span class="pun">(</span><span class="str">'#dischargingTime'</span><span class="pun">).</span><span class="pln">textContent </span><span class="pun">=</span><span class="pln"> battery</span><span class="pun">.</span><span class="pln">dischargingTime </span><span class="pun">/</span><span class="pln"> </span><span class="lit">60</span><span class="pun">;</span><span class="pln"> + </span><span class="pun">}</span><span class="pln"> + navigator</span><span class="pun">.</span><span class="pln">getBattery</span><span class="pun">().</span><span class="pln">then</span><span class="pun">(</span><span class="kwd">function</span><span class="pun">(</span><span class="pln">battery</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> + </span><span class="com">// Update the battery status initially when the promise resolves ...</span><span class="pln"> + updateBatteryStatus</span><span class="pun">(</span><span class="pln">battery</span><span class="pun">);</span><span class="pln"> + </span><span class="com">// .. and for any subsequent updates.</span><span class="pln"> + battery</span><span class="pun">.</span><span class="pln">onchargingchange </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> </span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> + updateBatteryStatus</span><span class="pun">(</span><span class="pln">battery</span><span class="pun">);</span><span class="pln"> + </span><span class="pun">};</span><span class="pln"> + battery</span><span class="pun">.</span><span class="pln">onlevelchange </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> </span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> + updateBatteryStatus</span><span class="pun">(</span><span class="pln">battery</span><span class="pun">);</span><span class="pln"> + </span><span class="pun">};</span><span class="pln"> + battery</span><span class="pun">.</span><span class="pln">ondischargingtimechange </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> </span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> + updateBatteryStatus</span><span class="pun">(</span><span class="pln">battery</span><span class="pun">);</span><span class="pln"> + </span><span class="pun">};</span><span class="pln"> + </span><span class="pun">});</span><span class="pln"> + </span><span class="pun">};</span><span class="pln"> + </span><span class="tag"></script></span><span class="pln"> +</span><span class="tag"></head></span><span class="pln"> +</span><span class="tag"><body></span><span class="pln"> + </span><span class="tag"><div</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"charging"</span><span class="tag">></span><span class="pln">(charging state unknown)</span><span class="tag"></div></span><span class="pln"> + </span><span class="tag"><div</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"level"</span><span class="tag">></span><span class="pln">(battery level unknown)</span><span class="tag"></div></span><span class="pln"> + </span><span class="tag"><div</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"dischargingTime"</span><span class="tag">></span><span class="pln">(discharging time unknown)</span><span class="tag"></div></span><span class="pln"> +</span><span class="tag"></body></span><span class="pln"> +</span><span class="tag"></html></span> +</pre> +</div> +</section> +<section class="appendix" id="acknowledgements"> +<h2 role="heading" id="h2_acknowledgements"> +<span class="secno"> +A. +</span> +Acknowledgements +</h2> +<p> +The +group +is +deeply +indebted +to +Mounir +Lamouri, +Jonas +Sicking, +and +the +Mozilla +WebAPI +team +in +general +for +their +invaluable +feedback +based +on +prototype +implementations. +Many +thanks +to +the +people +behind +the +System +Information +API +and +Device +Orientation +Event +specification +for +the +initial +inspiration. +Also +thanks +to +the +nice +folks +bringing +us +the +Page +Visibility +specification, +which +motivated +the +editor +of +this +specification +to +write +the +introduction +chapter +discussing +some +real-world +high +value +use +cases +that +apply +equally +to +this +specification. +Special +thanks +to +all +the +participants +of +the +Device +APIs +Working +Group +and +others +who +have +sent +in +substantial +feedback +and +comments, +and +made +the +Web +a +better +place +for +everyone +by +doing +so. +</p> +</section> +<section id="references" class="appendix" typeof="bibo:Chapter" resource="#references" rel="bibo:Chapter"> +<h2 role="heading" id="h2_references"> +<span class="secno"> +B. +</span> +References +</h2> +<section id="normative-references" typeof="bibo:Chapter" resource="#normative-references" rel="bibo:Chapter"> +<h3 role="heading" id="h3_normative-references"> +<span class="secno"> +B.1 +</span> +Normative +references +</h3> +<dl class="bibliography" about=""> +<dt id="bib-ECMASCRIPT"> +[ECMASCRIPT] +</dt> +<dd rel="dcterms:requires"> +<ins class="diff-chg">Allen +Wirfs-Brock. +</ins> +<a href="http://people.mozilla.org/~jorendorff/es6-draft.html"> +<cite> +ECMA-262 +ECMAScript +Language +Specification, +Edition +6 +</cite> +</a>. +Draft. +URL: +<a href="http://people.mozilla.org/~jorendorff/es6-draft.html"> +http://people.mozilla.org/~jorendorff/es6-draft.html +</a> +</dd> +<dt id="bib-HTML5"> +[HTML5] +</dt> +<dd rel="dcterms:requires"> +Robin +Berjon; +Steve +Faulkner; +Travis +Leithead; +Erika +Doyle +Navara; +Edward +O'Connor; +Silvia +Pfeiffer. +<a href="http://www.w3.org/TR/html5/"> +<cite> +HTML5 +</cite> +</a>. +<del class="diff-old">17 +June +</del> +<ins class="diff-chg">28 +October +</ins> +2014. +W3C +<del class="diff-old">Last +Call +Working +Draft. +</del> +<ins class="diff-chg">Recommendation. +</ins> +URL: +<a href="http://www.w3.org/TR/html5/"> +http://www.w3.org/TR/html5/ +</a> +</dd> +<dt id="bib-RFC2119"> +[RFC2119] +</dt> +<dd rel="dcterms:requires"> +S. +Bradner. +<a href="https://tools.ietf.org/html/rfc2119"> +<cite> +Key +words +for +use +in +RFCs +to +Indicate +Requirement +Levels +</cite> +</a>. +March +1997. +Best +Current +Practice. +URL: +<del class="diff-old">http://www.ietf.org/rfc/rfc2119.txt +</del> +<a href="https://tools.ietf.org/html/rfc2119"> +<ins class="diff-chg">https://tools.ietf.org/html/rfc2119 +</ins> +</a> +</dd> +<dt id="bib-WEBIDL"> +[WEBIDL] +</dt> +<dd rel="dcterms:requires"> +Cameron +McCormack. +<a href="http://www.w3.org/TR/WebIDL/"> +<cite> +Web +IDL +</cite> +</a>. +19 +April +2012. +W3C +Candidate +Recommendation. +URL: +<a href="http://www.w3.org/TR/WebIDL/"> +http://www.w3.org/TR/WebIDL/ +</a> +</dd> +</dl> +</section> +</section> +</body> +</html> +
Received on Friday, 14 November 2014 16:01:53 UTC