terminallist.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. // Copyright (c) Jupyter Development Team.
  2. // Distributed under the terms of the Modified BSD License.
  3. define([
  4. 'jquery',
  5. 'base/js/namespace',
  6. 'base/js/utils',
  7. 'base/js/i18n',
  8. 'tree/js/notebooklist',
  9. ], function($, IPython, utils, i18n, notebooklist) {
  10. "use strict";
  11. var TerminalList = function (selector, options) {
  12. /**
  13. * Constructor
  14. *
  15. * Parameters:
  16. * selector: string
  17. * options: dictionary
  18. * Dictionary of keyword arguments.
  19. * base_url: string
  20. */
  21. this.base_url = options.base_url || utils.get_body_data("baseUrl");
  22. this.element_name = options.element_name || 'running';
  23. this.selector = selector;
  24. this.terminals = [];
  25. if (this.selector !== undefined) {
  26. this.element = $(selector);
  27. this.style();
  28. this.bind_events();
  29. this.load_terminals();
  30. }
  31. };
  32. TerminalList.prototype = Object.create(notebooklist.NotebookList.prototype);
  33. TerminalList.prototype.bind_events = function () {
  34. var that = this;
  35. $('#refresh_' + this.element_name + '_list').click(function () {
  36. that.load_terminals();
  37. });
  38. $('#new-terminal').click($.proxy(this.new_terminal, this));
  39. };
  40. TerminalList.prototype.new_terminal = function (event) {
  41. if (event) {
  42. event.preventDefault();
  43. }
  44. var w = window.open('#', IPython._target);
  45. var base_url = this.base_url;
  46. var settings = {
  47. type : "POST",
  48. dataType: "json",
  49. success : function (data, status, xhr) {
  50. var name = data.name;
  51. w.location = utils.url_path_join(base_url, 'terminals',
  52. utils.encode_uri_components(name));
  53. },
  54. error : function(jqXHR, status, error){
  55. w.close();
  56. utils.log_ajax_error(jqXHR, status, error);
  57. },
  58. };
  59. var url = utils.url_path_join(
  60. this.base_url,
  61. 'api/terminals'
  62. );
  63. utils.ajax(url, settings);
  64. };
  65. TerminalList.prototype.load_terminals = function() {
  66. var url = utils.url_path_join(this.base_url, 'api/terminals');
  67. utils.ajax(url, {
  68. type: "GET",
  69. cache: false,
  70. dataType: "json",
  71. success: $.proxy(this.terminals_loaded, this),
  72. error : utils.log_ajax_error
  73. });
  74. };
  75. TerminalList.prototype.terminals_loaded = function (data) {
  76. this.terminals = data;
  77. this.clear_list();
  78. var item, term;
  79. for (var i=0; i < this.terminals.length; i++) {
  80. term = this.terminals[i];
  81. item = this.new_item(-1);
  82. this.add_link(term.name, item);
  83. this.add_shutdown_button(term.name, item);
  84. }
  85. $('#terminal_list_header').toggle(data.length === 0);
  86. };
  87. TerminalList.prototype.add_link = function(name, item) {
  88. item.data('term-name', name);
  89. item.find(".item_name").text("terminals/" + name);
  90. item.find(".item_icon").addClass("fa fa-terminal");
  91. var link = item.find("a.item_link")
  92. .attr('href', utils.url_path_join(this.base_url, "terminals",
  93. utils.encode_uri_components(name)));
  94. link.attr('target', IPython._target||'_blank');
  95. this.add_shutdown_button(name, item);
  96. };
  97. TerminalList.prototype.add_shutdown_button = function(name, item) {
  98. var that = this;
  99. var shutdown_button = $("<button/>").text(i18n._("Shutdown")).addClass("btn btn-xs btn-warning").
  100. click(function (e) {
  101. var settings = {
  102. processData : false,
  103. type : "DELETE",
  104. dataType : "json",
  105. success : function () {
  106. that.load_terminals();
  107. },
  108. error : utils.log_ajax_error,
  109. };
  110. var url = utils.url_path_join(that.base_url, 'api/terminals',
  111. utils.encode_uri_components(name));
  112. utils.ajax(url, settings);
  113. return false;
  114. });
  115. item.find(".item_buttons").text("").append(shutdown_button);
  116. };
  117. return {TerminalList: TerminalList};
  118. });