15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
25d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// found in the LICENSE file.
45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)cr.define('nfcDebug', function() {
65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  'use strict';
75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  function NfcDebugUI() {
95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    this.adapterData_ = {};
105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    this.peerData_ = {};
115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    this.tagData_ = {};
125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  NfcDebugUI.prototype = {
155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    setAdapterData: function(data) {
165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      this.adapterData_ = data;
175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    },
185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    setPeerData: function(data) {
205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      this.peerData_ = data;
215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    },
225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    setTagData: function(data) {
245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      this.tagData_ = data;
255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    },
265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    /**
285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)     * Powers the NFC adapter ON or OFF.
295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)     */
305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    toggleAdapterPower: function() {
315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      chrome.send('setAdapterPower', [!this.adapterData_.powered]);
325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    },
335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    /**
355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)     * Tells the NFC adapter to start or stop polling.
365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)     */
375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    toggleAdapterPolling: function() {
385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      chrome.send('setAdapterPolling', [!this.adapterData_.polling]);
395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    },
405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    /**
425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)     * Notifies the UI that the user made an NDEF type selection and the
435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)     * appropriate form should be displayed.
445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)     */
455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    recordTypeChanged: function() {
465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      this.updateRecordFormContents();
475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    },
485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    /**
505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)     * Creates a table element and populates it for each record contained
515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)     * in the given list of records and adds them as a child of the given
525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)     * DOMElement. This method will replace the contents of the given element
535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)     * with the tables.
545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)     *
555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)     * @param {DOMElement} div The container that the records should be rendered
565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)     *                         to.
575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)     * @param {Array} records List of NDEF record data.
585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)     */
595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    renderRecords: function(div, records) {
605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      div.textContent = '';
615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      if (records.length == 0) {
625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        return;
635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      }
645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      var self = this;
655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      records.forEach(function(record) {
665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        var recordDiv = document.createElement('div');
675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        recordDiv.setAttribute('class', 'record-div');
685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        for (var key in record) {
695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          if (!record.hasOwnProperty(key))
705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            continue;
715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          var rowDiv = document.createElement('div');
735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          rowDiv.setAttribute('class', 'record-key-value-div');
745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          var keyElement, valueElement;
765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          if (key == 'titles') {
775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            keyElement = document.createElement('div');
785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            keyElement.setAttribute('class', 'record-key-div');
795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            keyElement.appendChild(document.createTextNode(key));
805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            valueElement = document.createElement('div');
815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            valueElement.setAttribute('class', 'record-value-div');
825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            self.renderRecords(valueElement, record[key]);
835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          } else {
845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            keyElement = document.createElement('span');
855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            keyElement.setAttribute('class', 'record-key-span');
865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            keyElement.appendChild(document.createTextNode(key));
875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            valueElement = document.createElement('span');
885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            valueElement.setAttribute('class', 'record-value-span');
895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            valueElement.appendChild(document.createTextNode(record[key]));
905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          }
915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          rowDiv.appendChild(keyElement);
925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          rowDiv.appendChild(valueElement);
935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          recordDiv.appendChild(rowDiv);
945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        }
955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        div.appendChild(recordDiv);
965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        if (records[records.length - 1] !== record)
975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          div.appendChild(document.createElement('hr'));
985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      });
995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    },
1005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    /**
1025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)     * Updates which record type form is displayed based on the currently
1035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)     * selected type.
1045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)     */
1055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    updateRecordFormContents: function() {
1065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      var recordTypeMenu = $('record-type-menu');
1075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      var selectedType =
1085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          recordTypeMenu.options[recordTypeMenu.selectedIndex].value;
1095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      this.updateRecordFormContentsFromType(selectedType);
1105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    },
1115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    /**
1135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)     * Updates which record type form is displayed based on the passed in
1145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)     * type string.
1155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)     *
1165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)     * @param {string} type The record type.
1175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)     */
1185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    updateRecordFormContentsFromType: function(type) {
1195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      $('text-form').hidden = (type != 'text');
1205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      $('uri-form').hidden = (type != 'uri');
1215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      $('smart-poster-form').hidden = (type != 'smart-poster');
1225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    },
1235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    /**
1255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)     * Tries to push or write the record to the remote tag or device based on
1265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)     * the contents of the record form fields.
1275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)     */
1285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    submitRecordForm: function() {
1295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      var recordTypeMenu = $('record-type-menu');
1305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      var selectedType =
1315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          recordTypeMenu.options[recordTypeMenu.selectedIndex].value;
1325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      var recordData = {};
1335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      if (selectedType == 'text') {
1345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        recordData.type = 'TEXT';
1355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        if ($('text-form-text').value)
1365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          recordData.text = $('text-form-text').value;
1375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        if ($('text-form-encoding').value)
1385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          recordData.encoding = $('text-form-encoding').value;
1395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        if ($('text-form-language-code').value)
1405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          recordData.languageCode = $('text-form-language-code').value;
1415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      } else if (selectedType == 'uri') {
1425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        recordData.type = 'URI';
1435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        if ($('uri-form-uri').value)
1445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          recordData.uri = $('uri-form-uri').value;
1455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        if ($('uri-form-mime-type').value)
1465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          recordData.mimeType = $('uri-form-mime-type').value;
1475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        if ($('uri-form-target-size').value) {
1485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          var targetSize = $('uri-form-target-size').value;
1495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          targetSize = parseFloat(targetSize);
1505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          recordData.targetSize = isNaN(targetSize) ? 0.0 : targetSize;
1515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        }
1525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      } else if (selectedType == 'smart-poster') {
1535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        recordData.type = 'SMART_POSTER';
1545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        if ($('smart-poster-form-uri').value)
1555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          recordData.uri = $('smart-poster-form-uri').value;
1565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        if ($('smart-poster-form-mime-type').value)
1575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          recordData.mimeType = $('smart-poster-form-mime-type').value;
1585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        if ($('smart-poster-form-target-size').value) {
1595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          var targetSize = $('smart-poster-form-target-size').value;
1605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          targetSize = parseFloat(targetSize);
1615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          recordData.targetSize = isNaN(targetSize) ? 0.0 : targetSize;
1625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        }
1635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        var title = {};
1645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        if ($('smart-poster-form-title-text').value)
1655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          title.text = $('smart-poster-form-title-text').value;
1665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        if ($('smart-poster-form-title-encoding').value)
1675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          title.encoding = $('smart-poster-form-title-encoding').value;
1685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        if ($('smart-poster-form-title-language-code').value)
1695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          title.languageCode =
1705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)              $('smart-poster-form-title-language-code').value;
1715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        if (Object.keys(title).length != 0)
1725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          recordData.titles = [title];
1735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      }
1745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      chrome.send('submitRecordForm', [recordData]);
1755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    },
1765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    /**
1785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)     * Given a dictionary |data|, builds a table where each row contains the
1795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)     * a key and its value. The resulting table is then added as the sole child
1805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)     * of |div|. |data| contains information about an adapter, tag, or peer and
1815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)     * this method creates a table for display, thus the value of some keys
1825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)     * will be processed.
1835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)     *
1845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)     * @param {DOMElement} div The container that the table should be rendered
1855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)     *                         to.
1865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)     * @param {dictionary} data Data to generate the table from.
1875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)     */
1885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    createTableFromData: function(div, data) {
1895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      div.textContent = '';
1905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      var table = document.createElement('table');
1915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      table.classList.add('parameters-table');
1925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      for (var key in data) {
1935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        var row = document.createElement('tr');
1945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        var col = document.createElement('td');
1955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        col.textContent = key;
1965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        row.appendChild(col);
1975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        col = document.createElement('td');
1995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        var value = data[key];
2005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        if (key == 'records')
2015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          value = value.length;
2025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        else if (key == 'supportedTechnologies')
2035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          value = value.join(', ');
2045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        col.textContent = value;
2055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        row.appendChild(col);
2065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        table.appendChild(row);
2075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      }
2085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      div.appendChild(table);
2095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    },
2105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  };
2115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
2125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  cr.addSingletonGetter(NfcDebugUI);
2135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
2145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  /**
2155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * Initializes the page after the content has loaded.
2165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   */
2175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  NfcDebugUI.initialize = function() {
2185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    $('nfc-adapter-info').hidden = true;
2195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    $('adapter-toggles').hidden = true;
2205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    $('nfc-adapter-info').classList.add('transition-out');
2215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    $('ndef-record-form').classList.add('transition-out');
2225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    $('nfc-peer-info').classList.add('transition-out');
2235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    $('nfc-tag-info').classList.add('transition-out');
2245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    $('power-toggle').onclick = function() {
2255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      NfcDebugUI.getInstance().toggleAdapterPower();
2265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    };
2275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    $('poll-toggle').onclick = function() {
2285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      NfcDebugUI.getInstance().toggleAdapterPolling();
2295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    };
2305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    $('record-type-menu').onchange = function() {
2315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      NfcDebugUI.getInstance().recordTypeChanged();
2325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    };
2335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    $('record-form-submit-button').onclick = function() {
2345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      NfcDebugUI.getInstance().submitRecordForm();
2355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    };
2365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    $('record-form-submit-button').hidden = true;
2375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    NfcDebugUI.getInstance().updateRecordFormContents();
2385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    chrome.send('initialize');
2395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  };
2405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
2415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  /**
2425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * Updates the UI based on the NFC availability on the current platform.
2435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   *
2445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * @param {bool} available If true, NFC is supported on the current platform.
2455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   */
2465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  NfcDebugUI.onNfcAvailabilityDetermined = function(available) {
2475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    $('nfc-not-supported').hidden = available;
2485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  };
2495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
2505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  /**
2515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * Notifies the UI that information about the NFC adapter has been received.
2525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   *
2535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * @param {dictionary} data Properties of the NFC adapter.
2545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   */
2555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  NfcDebugUI.onNfcAdapterInfoChanged = function(data) {
2565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    NfcDebugUI.getInstance().setAdapterData(data);
2575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
2585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    $('nfc-adapter-info').hidden = false;
2595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    NfcDebugUI.getInstance().createTableFromData($('adapter-parameters'), data);
2605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
2615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    $('nfc-adapter-info').classList.toggle('transition-out', !data.present);
2625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    $('nfc-adapter-info').classList.toggle('transition-in', data.present);
2635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    $('ndef-record-form').classList.toggle('transition-out', !data.present);
2645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    $('ndef-record-form').classList.toggle('transition-in', data.present);
2655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
2665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    $('adapter-toggles').hidden = !data.present;
2675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    $('ndef-record-form').hidden = !data.present;
2685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
2695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    $('power-toggle').textContent = loadTimeData.getString(
2705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        data.powered ? 'adapterPowerOffText' : 'adapterPowerOnText');
2715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    $('poll-toggle').textContent = loadTimeData.getString(
2725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        data.polling ? 'adapterStopPollText' : 'adapterStartPollText');
2735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  };
2745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
2755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  /**
2765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * Notifies the UI that information about an NFC peer has been received.
2775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   *
2785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * @param {dictionary} data Properties of the NFC peer device.
2795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   */
2805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  NfcDebugUI.onNfcPeerDeviceInfoChanged = function(data) {
2815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    NfcDebugUI.getInstance().setPeerData(data);
2825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
2835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    if (Object.keys(data).length == 0) {
2845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      $('nfc-peer-info').classList.add('transition-out');
2855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      $('nfc-peer-info').classList.remove('transition-in');
2865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      $('record-form-submit-button').hidden = true;
2875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      return;
2885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    }
2895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
2905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    $('nfc-peer-info').classList.remove('transition-out');
2915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    $('nfc-peer-info').classList.add('transition-in');
2925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
2935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    NfcDebugUI.getInstance().createTableFromData($('peer-parameters'), data);
2945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
2955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    $('record-form-submit-button').hidden = false;
2965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    $('record-form-submit-button').textContent =
2975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        loadTimeData.getString('ndefFormPushButtonText');
2985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
2995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    if (data.records.length == 0) {
3005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      $('peer-records-entry').hidden = true;
3015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      return;
3025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    }
3035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
3045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    $('peer-records-entry').hidden = false;
3055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    NfcDebugUI.getInstance().renderRecords($('peer-records-container'),
3065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                           data.records);
3075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  };
3085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
3095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  /**
3105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * Notifies the UI that information about an NFC tag has been received.
3115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   *
3125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * @param {dictionary} data Properties of the NFC tag.
3135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   */
3145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  NfcDebugUI.onNfcTagInfoChanged = function(data) {
3155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    NfcDebugUI.getInstance().setTagData(data);
3165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
3175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    if (Object.keys(data).length == 0) {
3185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      $('nfc-tag-info').classList.add('transition-out');
3195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      $('nfc-tag-info').classList.remove('transition-in');
3205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      $('record-form-submit-button').hidden = true;
3215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      return;
3225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    }
3235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
3245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    $('nfc-tag-info').classList.remove('transition-out');
3255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    $('nfc-tag-info').classList.add('transition-in');
3265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
3275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    NfcDebugUI.getInstance().createTableFromData($('tag-parameters'), data);
3285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
3295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    $('record-form-submit-button').hidden = false;
3305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    $('record-form-submit-button').textContent =
3315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        loadTimeData.getString('ndefFormWriteButtonText');
3325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
3335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    if (data.records.length == 0) {
3345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      $('tag-records-entry').hidden = true;
3355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      return;
3365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    }
3375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
3385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    $('tag-records-entry').hidden = false;
3395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    NfcDebugUI.getInstance().renderRecords($('tag-records-container'),
3405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                           data.records);
3415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  };
3425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
3435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  /**
3445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * Notifies the UI that a call to "setAdapterPower" failed. Displays an
3455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * alert.
3465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   */
3475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  NfcDebugUI.onSetAdapterPowerFailed = function() {
3485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    alert(loadTimeData.getString('errorFailedToSetPowerText'));
3495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  };
3505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
3515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  /**
3525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * Notifies the UI that a call to "setAdapterPolling" failed. Displays an
3535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * alert.
3545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   */
3555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  NfcDebugUI.onSetAdapterPollingFailed = function() {
3565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    alert(loadTimeData.getString('errorFailedToSetPollingText'));
3575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  };
3585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
3595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  /**
3605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * Notifies the UI that an error occurred while submitting an NDEF record
3615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * form.
3625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * @param {string} errorMessage An error message, describing the failure.
3635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   */
3645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  NfcDebugUI.onSubmitRecordFormFailed = function(errorMessage) {
3655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    alert(loadTimeData.getString('errorFailedToSubmitPrefixText') +
3665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          ' ' + errorMessage);
3675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  };
3685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
3695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Export
3705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return {
3715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    NfcDebugUI: NfcDebugUI
3725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  };
3735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)});
3745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
3755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)document.addEventListener('DOMContentLoaded', nfcDebug.NfcDebugUI.initialize);
376