DatabaseTableView.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. /*
  2. * Copyright (C) 2008 Apple Inc. All Rights Reserved.
  3. *
  4. * Redistribution and use in source and binary forms, with or without
  5. * modification, are permitted provided that the following conditions
  6. * are met:
  7. * 1. Redistributions of source code must retain the above copyright
  8. * notice, this list of conditions and the following disclaimer.
  9. * 2. Redistributions in binary form must reproduce the above copyright
  10. * notice, this list of conditions and the following disclaimer in the
  11. * documentation and/or other materials provided with the distribution.
  12. *
  13. * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
  14. * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  15. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
  16. * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
  17. * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
  18. * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  19. * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
  20. * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
  21. * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  22. * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  23. * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  24. */
  25. /**
  26. * @constructor
  27. * @extends {WebInspector.View}
  28. */
  29. WebInspector.DatabaseTableView = function(database, tableName)
  30. {
  31. WebInspector.View.call(this);
  32. this.database = database;
  33. this.tableName = tableName;
  34. this.element.addStyleClass("storage-view");
  35. this.element.addStyleClass("table");
  36. this.refreshButton = new WebInspector.StatusBarButton(WebInspector.UIString("Refresh"), "refresh-storage-status-bar-item");
  37. this.refreshButton.addEventListener("click", this._refreshButtonClicked, this);
  38. }
  39. WebInspector.DatabaseTableView.prototype = {
  40. wasShown: function()
  41. {
  42. this.update();
  43. },
  44. get statusBarItems()
  45. {
  46. return [this.refreshButton.element];
  47. },
  48. /**
  49. * @param {string} tableName
  50. * @return {string}
  51. */
  52. _escapeTableName: function(tableName)
  53. {
  54. return tableName.replace(/\"/g, "\"\"");
  55. },
  56. update: function()
  57. {
  58. this.database.executeSql("SELECT * FROM \"" + this._escapeTableName(this.tableName) + "\"", this._queryFinished.bind(this), this._queryError.bind(this));
  59. },
  60. _queryFinished: function(columnNames, values)
  61. {
  62. this.detachChildViews();
  63. this.element.removeChildren();
  64. var dataGrid = WebInspector.DataGrid.createSortableDataGrid(columnNames, values);
  65. if (!dataGrid) {
  66. this._emptyView = new WebInspector.EmptyView(WebInspector.UIString("The “%s”\ntable is empty.", this.tableName));
  67. this._emptyView.show(this.element);
  68. return;
  69. }
  70. dataGrid.show(this.element);
  71. dataGrid.autoSizeColumns(5);
  72. },
  73. _queryError: function(error)
  74. {
  75. this.detachChildViews();
  76. this.element.removeChildren();
  77. var errorMsgElement = document.createElement("div");
  78. errorMsgElement.className = "storage-table-error";
  79. errorMsgElement.textContent = WebInspector.UIString("An error occurred trying to\nread the “%s” table.", this.tableName);
  80. this.element.appendChild(errorMsgElement);
  81. },
  82. _refreshButtonClicked: function(event)
  83. {
  84. this.update();
  85. },
  86. __proto__: WebInspector.View.prototype
  87. }