| <!DOCTYPE HTML> |
| <html i18n-values="dir:textdirection;"> |
| <head> |
| <meta charset="utf-8"> |
| <style> |
| body { |
| margin: 10px; |
| min-width: 47em; |
| } |
| |
| a { |
| color: blue; |
| font-size: 103%; |
| } |
| |
| div#header { |
| margin-bottom: 1.05em; |
| /* 67px is the height of the header's background image. */ |
| min-height: 67px; |
| overflow: hidden; |
| padding-bottom: 20px; |
| -webkit-padding-start: 0; |
| padding-top: 20px; |
| position: relative; |
| box-sizing: border-box; |
| } |
| |
| #header h1 { |
| background: url('../../app/theme/about_conflicts.png') 0px 20px no-repeat; |
| display: inline; |
| margin: 0; |
| padding-bottom: 43px; |
| padding-left: 75px; |
| padding-top: 40px; |
| } |
| |
| html[dir=rtl] #header h1 { |
| background: url('../../app/theme/about_conflicts.png') right no-repeat; |
| padding-right: 95px; |
| padding-left: 0; |
| } |
| |
| h1 { |
| font-size: 156%; |
| font-weight: bold; |
| padding: 0; |
| margin: 0; |
| } |
| |
| #blurb-container { |
| padding-bottom: 1.5em; |
| font-size: 120%; |
| } |
| |
| div.content { |
| font-size: 88%; |
| margin-top: 5px; |
| } |
| |
| .section-header { |
| background: #ebeff9; |
| border-top: 1px solid #b5c7de; |
| font-size: 99%; |
| padding-bottom: 2px; |
| -webkit-padding-start: 5px; |
| padding-top: 3px; |
| width: 100%; |
| } |
| |
| .section-header > table > tr > td:first-child { |
| width: 100%; |
| } |
| |
| .section-header > table { |
| width: 100%; |
| } |
| |
| .section-header-title { |
| font-weight: bold; |
| } |
| |
| .vbox-container { |
| display: -webkit-box; |
| -webkit-box-orient: vertical; |
| } |
| |
| .wbox { |
| display: -webkit-box; |
| -webkit-box-align: stretch; |
| -webkit-box-flex: 1; |
| } |
| |
| #top { |
| -webkit-padding-end: 5px; |
| } |
| |
| .module-loaded > td { |
| padding-bottom: 4px; |
| padding-top: 5px; |
| } |
| |
| .module { |
| border-bottom: 1px solid #cdcdcd; |
| } |
| |
| .module-name { |
| font-weight: bold; |
| } |
| |
| .no-modules { |
| margin: 6em 0 0; |
| text-align: center; |
| font-size: 1.2em; |
| } |
| |
| .suspected-bad { |
| color: #DD7700; |
| } |
| |
| .confirmed-bad { |
| color: red; |
| } |
| |
| .nowrap { |
| white-space: nowrap; |
| } |
| |
| .extra-info-text { |
| margin-top: -1em; |
| margin-bottom: 1em; |
| } |
| |
| .clearing { |
| clear: left; |
| float: left; |
| } |
| |
| html[dir=rtl] .clearing { |
| clear: right; |
| float: right; |
| } |
| |
| .datacell { |
| border-bottom: 1px solid #aaa; |
| } |
| </style> |
| <script> |
| |
| /** |
| * This variable structure is here to document the structure that the template |
| * expects to correctly populate the page. |
| */ |
| var moduleListDataFormat = { |
| 'moduleList': [ |
| { |
| 'type': 'The type of module found', |
| 'type_description': |
| 'The type of module (string), defaults to blank for regular modules', |
| 'status': 'The module status', |
| 'location': 'The module path, not including filename', |
| 'name': 'The name of the module', |
| 'product_name': 'The name of the product the module belongs to', |
| 'description': 'The module description', |
| 'version': 'The module version', |
| 'digital_signer': 'The signer of the digital certificate for the module', |
| 'recommended_action': 'The help tips bitmask', |
| 'possible_resolution': 'The help tips in string form', |
| 'help_url': 'The link to the Help Center article' |
| } |
| ] |
| }; |
| |
| /** |
| * Takes the |moduleListData| input argument which represents data about |
| * the currently available modules and populates the html jstemplate |
| * with that data. It expects an object structure like the above. |
| * @param {Object} moduleListData Information about available modules |
| */ |
| function renderTemplate(moduleListData) { |
| // This is the javascript code that processes the template: |
| var input = new JsEvalContext(moduleListData); |
| var output = document.getElementById('modulesTemplate'); |
| jstProcess(input, output); |
| } |
| |
| /** |
| * Asks the C++ ConflictsDOMHandler to get details about the available modules |
| * and return detailed data about the configuration. The ConflictsDOMHandler |
| * should reply to returnModuleList() (below). |
| */ |
| function requestModuleListData() { |
| chrome.send('requestModuleList', []); |
| } |
| |
| /** |
| * Called by the WebUI to re-populate the page with data representing the |
| * current state of installed modules. |
| */ |
| function returnModuleList(moduleListData) { |
| renderTemplate(moduleListData); |
| document.getElementById('loading-message').style.visibility = 'hidden'; |
| document.getElementById('body-container').style.visibility = 'visible'; |
| } |
| |
| // Get data and have it displayed upon loading. |
| document.addEventListener('DOMContentLoaded', requestModuleListData); |
| |
| </script> |
| </head> |
| <body i18n-values=".style.fontFamily:fontfamily;.style.fontSize:fontsize"> |
| <div id="loading-message" i18n-content="loadingMessage">LOADING_MESSAGE</div> |
| |
| <div id="body-container" style="visibility:hidden"> |
| |
| <div id="header"><h1 i18n-content="modulesLongTitle">TITLE</h1></div> |
| |
| <div id="blurb-container"> |
| <span i18n-content="modulesBlurb">MODULES BLURB</span> |
| </div> |
| |
| <div id="modulesTemplate"> |
| |
| <div id="container" class="vbox-container"> |
| <div id="top" class="wbox"> |
| |
| <div class="section-header"> |
| <table cellpadding="0" cellspacing="0"><tr valign="center"> |
| <td> |
| <span class="section-header-title" |
| jscontent="modulesTableTitle">TITLE</span> |
| </td> |
| </tr></table> |
| </div> |
| |
| </div> |
| </div> |
| |
| <div class="content"> |
| <div class="module-name no-modules" |
| jsdisplay="moduleList.length === 0"> |
| <div i18n-content="modulesNoneLoaded">NO_MODULES_ARE_AVAILABLE</div> |
| </div> |
| |
| <div jsdisplay="moduleList.length > 0"> |
| <table width="100%" cellpadding="0" cellspacing="0"> |
| <tr class="module-loaded"> |
| <td valign="top"> |
| <table cellpadding="2" cellspacing="0" border="0"> |
| <tr> |
| <td class="datacell"><span dir="ltr" i18n-content="headerSoftware" |
| >SOFTWARE</span></td> |
| <td class="datacell"><span dir="ltr" i18n-content="headerSignedBy" |
| >SIGNER</span></td> |
| <td class="datacell"><span dir="ltr" i18n-content="headerVersion" |
| >VERSION</span></td> |
| <td class="datacell"><span dir="ltr" i18n-content="headerLocation" |
| >LOCATION</span></td> |
| </tr> |
| <tr jsselect="moduleList"> |
| <td valign="top" class="datacell"> |
| <span dir="ltr" |
| jsvalues=".innerHTML:description" |
| class="clearing nowrap"></span> |
| <div jsdisplay="status == 2 || status == 3" |
| class="extra-info-text"> |
| <span class="clearing"> |
| <span jsdisplay="status == 2" |
| i18n-content="moduleSuspectedBad" |
| class="suspected-bad">SUSPECTED_BAD</span> |
| <span jsdisplay="status == 3" |
| i18n-content="moduleConfirmedBad" |
| class="confirmed-bad">CONFIRMED_BAD</span> |
| </span> |
| <span class="clearing"> |
| <span jsdisplay="possibleResolution.length > 0"> |
| <span jscontent="possibleResolution" |
| >POSSIBLE_RESOLUTION</span> |
| </span> |
| <a jsdisplay="help_url.length > 0" |
| jsvalues=".href:help_url" |
| i18n-content="helpCenterLink">HELP_CENTER</a> |
| </span> |
| </div> |
| </td> |
| <td valign="top" class="datacell"><span dir="ltr" |
| jscontent="digital_signer" |
| class="nowrap">SIGNER</span></td> |
| <td valign="top" class="datacell"><span dir="ltr" |
| jscontent="version" |
| class="nowrap">VERSION</span |
| ></td> |
| <td valign="top" class="datacell"> |
| <span class="nowrap"> |
| <span dir="ltr" jscontent="location">LOCATION</span><strong |
| ><span dir="ltr" jscontent="name">NAME</span></strong> |
| <span dir="ltr" |
| jsdisplay="type_description.length > 0" |
| >(<span dir="ltr" |
| jscontent="type_description">MODULE_TYPE</span |
| >)</span> |
| </span> |
| </td> |
| </tr> |
| </table> |
| </td> |
| </tr> |
| </table> |
| </div> |
| </div> |
| </div> |
| </div> |
| </body> |
| </html> |