##// END OF EJS Templates
Fix #4777 and #7887...
Fix #4777 and #7887 The function in charge of actually converting cursor offset to CodeMirror line number and character number was actually crashing when the cursor was at the last character (loop until undefined, then access length of variable, which is undefined). This was hiding a bug in which when you would completer to a single completion pressing tab after as-you-type filtering, the completion would be completed twice. The logic that was supposed to detect whether or not all completions had a common prefix was actually faulty as the common prefix used to be a string but was then changed to an object. Hence the logic to check whether or not there was actually a common prefix was always true, even for empty string, leading to the deletion of the line (replace by '') in some cases.

File last commit:

r20447:7c862c76
r20538:ae7f6d6a
Show More
tree.html
185 lines | 8.6 KiB | text/html | HtmlLexer
{% extends "page.html" %}
{% block title %}{{page_title}}{% endblock %}
{% block params %}
data-base-url="{{base_url}}"
data-notebook-path="{{notebook_path}}"
data-terminals-available="{{terminals_available}}"
{% endblock %}
{% block site %}
<div id="ipython-main-app" class="container">
<div id="tab_content" class="tabbable">
<ul id="tabs" class="nav nav-tabs">
<li class="active"><a href="#notebooks" data-toggle="tab">Files</a></li>
<li><a href="#running" data-toggle="tab">Running</a></li>
<li><a href="#clusters" data-toggle="tab">Clusters</a></li>
</ul>
<div class="tab-content">
<div id="notebooks" class="tab-pane active">
<div id="notebook_toolbar" class="row">
<div class="col-sm-8 no-padding">
<form id='alternate_upload' class='alternate_upload'>
<span id="notebook_list_info">
To import a notebook, drag the file onto the listing below or
<span class="input-overlay">
<input type="file" name="datafile" class="fileinput" multiple='multiple'>
click here.
</span>
</span>
</form>
</div>
<div class="col-sm-4 no-padding tree-buttons">
<div class="pull-right">
<div class="dynamic-buttons">
<button title="Duplicate selected" class="duplicate-button btn btn-default btn-xs">Duplicate</button>
<button title="Rename selected" class="rename-button btn btn-default btn-xs">Rename</button>
<button title="Shutdown selected notebook(s)" class="shutdown-button btn btn-default btn-xs btn-warning">Shutdown</button>
<button title="Deleted selected" class="delete-button btn btn-default btn-xs btn-danger"><i class="fa fa-trash"></i></button>
</div>
<div id="new-buttons" class="btn-group">
<button class="dropdown-toggle btn btn-default btn-xs" data-toggle="dropdown">
<span>New</span>
<span class="caret"></span>
</button>
<ul id="new-menu" class="dropdown-menu">
<li role="presentation" id="new-file">
<a role="menuitem" tabindex="-1" href="#">Text File</a>
</li>
<li role="presentation" id="new-folder">
<a role="menuitem" tabindex="-1" href="#">Folder</a>
</li>
{% if terminals_available %}
<li role="presentation" id="new-terminal">
<a role="menuitem" tabindex="-1" href="#">Terminal</a>
</li>
{% else %}
<li role="presentation" id="new-terminal-disabled" class="disabled">
<a role="menuitem" tabindex="-1" href="#">Terminals Unavailable</a>
</li>
{% endif %}
<li role="presentation" class="divider"></li>
<li role="presentation" class="dropdown-header" id="notebook-kernels">Notebooks</li>
</ul>
</div>
<div class="btn-group">
<button id="refresh_notebook_list" title="Refresh notebook list" class="btn btn-default btn-xs"><i class="fa fa-refresh"></i></button>
</div>
</div>
</div>
</div>
<div id="notebook_list">
<div id="notebook_list_header" class="row list_header">
<div class="dropdown" id='tree-selector'>
<button class="btn btn-default btn-xs dropdown-toggle" type="button" id="tree-selector-btn" data-toggle="dropdown" aria-expanded="true">
<input type='checkbox'></input>
<span class="caret"></span>
</button>
<ul class="dropdown-menu" role="menu" aria-labelledby="tree-selector-btn">
<li role="presentation" class="select-all"><a role="menuitem" tabindex="-1" href="#">Select all</a></li>
<li role="presentation" class="select-notebooks"><a role="menuitem" tabindex="-1" href="#">Select notebooks</a></li>
<li role="presentation" class="select-running-notebooks"><a role="menuitem" tabindex="-1" href="#">Select running notebooks</a></li>
<li role="presentation" class="select-files"><a role="menuitem" tabindex="-1" href="#">Select files</a></li>
<li role="presentation" class="select-directories"><a role="menuitem" tabindex="-1" href="#">Select directories</a></li>
<li role="presentation" class="divider"></li>
<li role="presentation" class="deselect-all"><a role="menuitem" tabindex="-1" href="#">Deselect all</a></li>
</ul>
</div>
<div id="project_name">
<ul class="breadcrumb">
<li><a href="{{breadcrumbs[0][0]}}"><i class="fa fa-home"></i></a></li>
{% for crumb in breadcrumbs[1:] %}
<li><a href="{{crumb[0]}}">{{crumb[1]}}</a></li>
{% endfor %}
</ul>
</div>
</div>
</div>
</div>
<div id="running" class="tab-pane">
<div id="running_toolbar" class="row">
<div class="col-sm-8 no-padding">
<span id="running_list_info">Currently running Jupyter processes</span>
</div>
<div class="col-sm-4 no-padding tree-buttons">
<span id="running_buttons" class="pull-right">
<button id="refresh_running_list" title="Refresh running list" class="btn btn-default btn-xs"><i class="fa fa-refresh"></i></button>
</span>
</div>
</div>
<div class="panel-group" id="accordion" >
<div class="panel panel-default">
<div class="panel-heading">
<a data-toggle="collapse" data-target="#collapseOne" href="#">
Terminals
</a>
</div>
<div id="collapseOne" class=" collapse in">
<div class="panel-body">
<div id="terminal_list">
<div id="terminal_list_header" class="row list_placeholder">
{% if terminals_available %}
<div> There are no terminals running. </div>
{% else %}
<div> Terminals are unavailable. </div>
{% endif %}
</div>
</div>
</div>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">
<a data-toggle="collapse" data-target="#collapseTwo" href="#">
Notebooks
</a>
</div>
<div id="collapseTwo" class=" collapse in">
<div class="panel-body">
<div id="running_list">
<div id="running_list_placeholder" class="row list_placeholder">
<div> There are no notebooks running. </div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div id="clusters" class="tab-pane">
<div id="cluster_toolbar" class="row">
<div class="col-xs-8 no-padding">
<span id="cluster_list_info">IPython parallel computing clusters</span>
</div>
<div class="col-xs-4 no-padding tree-buttons">
<span id="cluster_buttons" class="pull-right">
<button id="refresh_cluster_list" title="Refresh cluster list" class="btn btn-default btn-xs"><i class="fa fa-refresh"></i></button>
</span>
</div>
</div>
<div id="cluster_list">
<div id="cluster_list_header" class="row list_header">
<div class="profile_col col-xs-4">profile</div>
<div class="status_col col-xs-3">status</div>
<div class="engines_col col-xs-3" title="Enter the number of engines to start or empty for default"># of engines</div>
<div class="action_col col-xs-2">action</div>
</div>
</div>
</div>
</div><!-- class:tab-content -->
</div><!-- id:tab_content -->
</div><!-- ipython-main-app -->
{% endblock %}
{% block script %}
{{super()}}
<script src="{{ static_url("tree/js/main.js") }}" type="text/javascript" charset="utf-8"></script>
{% endblock %}