blob: b37b913a206beae21fa0b0fc60d2a17d5bdaed5a [file] [log] [blame]
<!--
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<headroom tolerance="10" offset="30" class="noteAction"
ng-show="note.id && !paragraphUrl">
<h3>
<div class="notebook-actionBar-title"
ng-controller="ElasticInputCtrl as input">
<input type="text" pu-elastic-input class="form-control-title-input" placeholder="New name"
ng-if="input.showEditor" ng-model="input.value" ng-escape="input.showEditor = false" focus-if="input.showEditor"
ng-blur="updateNoteName(input.value);input.showEditor = false;" ng-enter="updateNoteName(input.value);input.showEditor = false;" />
<p class="form-control-title"
ng-class="{'reverse-ellipsis ellipsis':noteName(note).length > 45}"
tooltip-placement="bottom"
uib-tooltip={{noteName(note)}}
ng-click="input.showEditor = !revisionView; input.value = note.name"
ng-show="!input.showEditor"><span>{{notePath(note)}}</span></p>
</div>
<div style="float: left; padding-bottom: 10px">
<span class="labelBtn btn-group">
<button type="button"
class="btn btn-default btn-xs"
ng-click="runAllParagraphs(note.id)"
ng-class="{'disabled':isNoteRunning()}"
tooltip-placement="bottom" uib-tooltip="Run all paragraphs"
ng-disabled="revisionView">
<i class="icon-control-play"></i>
</button>
<button type="button"
class="btn btn-default btn-xs"
ng-click="toggleAllEditor()"
ng-hide="viewOnly"
tooltip-placement="bottom" uib-tooltip="Show/hide the code"
ng-disabled="revisionView">
<i ng-class="editorToggled ? 'fa icon-size-fullscreen' :'fa icon-size-actual'"></i></button>
<button type="button"
class="btn btn-default btn-xs"
ng-click="toggleAllTable()"
ng-hide="viewOnly"
tooltip-placement="bottom" uib-tooltip="Show/hide the output"
ng-disabled="revisionView">
<i ng-class="tableToggled ? 'fa icon-notebook' : 'fa icon-book-open'"></i>
</button>
<button type="button"
class="btn btn-default btn-xs"
ng-click="clearAllParagraphOutput(note.id)"
ng-hide="viewOnly"
ng-class="{'disabled':isNoteRunning()}"
tooltip-placement="bottom" uib-tooltip="Clear output"
ng-disabled="revisionView">
<i class="fa fa-eraser"></i>
</button>
<button type="button"
class="btn btn-default btn-xs"
ng-hide="viewOnly"
tooltip-placement="bottom" uib-tooltip="Clone this note" data-source-note-name="{{note.name}}"
data-toggle="modal" data-target="#noteCreateModal" data-clone="true"
ng-disabled="revisionView">
<i class="fa fa-copy"></i>
</button>
<button type="button"
class="btn btn-default btn-xs"
ng-hide="viewOnly"
ng-click="exportNote()"
tooltip-placement="bottom" uib-tooltip="Export this note"
ng-disabled="revisionView">
<i class="fa fa-download"></i>
</button>
<button type="button"
class="btn btn-primary btn-xs"
ng-class="isNoteRunning() ? 'disabled' : ''"
ng-if="ticket.principal && ticket.principal !== 'anonymous'"
ng-hide="viewOnly || note.config.personalizedMode !== 'true'"
ng-click="toggleNotePersonalizedMode()"
tooltip-placement="bottom" uib-tooltip="Switch to collaboration mode {{isOwner ? '' : '(owner can change)'}}"
ng-disabled="revisionView">
<i class="fa fa-user"></i>
</button>
<button type="button"
class="btn btn-default btn-xs"
ng-class="isNoteRunning() ? 'disabled' : ''"
ng-if="ticket.principal && ticket.principal !== 'anonymous'"
ng-hide="viewOnly || note.config.personalizedMode === 'true'"
ng-click="toggleNotePersonalizedMode()"
tooltip-placement="bottom" uib-tooltip="Switch to personal mode {{isOwner ? '' : '(owner can change)'}}"
ng-disabled="revisionView">
<i class="fa fa-users"></i>
</button>
</span>
<span class="labelBtn btn-group" role="group" ng-if="isRevisionSupported()" >
<div class="btn-group" role="group">
<button type="button"
class="btn btn-default btn-xs dropdown-toggle"
id="versionControlDropdown"
ng-hide="viewOnly"
data-toggle="dropdown"
tooltip-placement="bottom" uib-tooltip="Version control"
ng-disabled="revisionView">
<i class="fa fa-file-code-o"></i>
</button>
<button type="button"
class="btn btn-default btn-xs"
id="setRevision"
ng-hide="viewOnly"
ng-click="setNoteRevision()"
ng-disabled="!revisionView"
tooltip-placement="bottom" uib-tooltip="Set revision">
<i class="fa fa-arrow-circle-o-right"></i>
</button>
<ul class="dropdown-menu" style="width:250px"
aria-labelledby="versionControlDropdown">
<li>
<div class="commit-container">
<div>
<input type="text"
dropdown-input
placeholder="commit message"
id="note.checkpoint.message"
style="width: 145px;"
ng-model="note.checkpoint.message"/>
<button type="button"
class="btn btn-default btn-xs"
ng-hide="viewOnly"
ng-click="checkpointNote(note.checkpoint.message)"
style="margin-left: 4px;"
tooltip-append-to-body="true"
tooltip-class="revisionTooltip"
tooltip-placement="bottom" uib-tooltip="Commit this note">Commit
</button>
</div>
</div>
</li>
</ul>
<button type="button"
class="btn btn-default btn-xs"
ng-click="toggleRevisionsComparator()"
tooltip-placement="bottom" uib-tooltip="Compare revisions">
<i class="fa fa-exchange"></i>
</button>
</div>
<div class="btn-group" role="group">
<button type="button" class="btn btn-default btn-xs revisionName" title="{{currentRevision}}">
<div style="overflow: hidden">{{currentRevision}}</div>
</button>
<button type="button" ng-if="noteRevisions.length > 0"
class="btn btn-default dropdown-toggle caretSeparator"
data-toggle="dropdown" id="revisionsDropdown">
<span class="caret"></span>
</button>
<ul class="dropdown-menu pull-right" aria-labelledby="revisionsDropdown">
<li ng-repeat="revision in noteRevisions | orderBy:'time':true" class="revision">
<a style="cursor:pointer" ng-click="visitRevision(revision)">
<span style="display: block;">
<strong>{{revision.message}}</strong>
</span>
<span class="revisionDate">
<em>{{formatRevisionDate(revision.time)}}</em>
</span>
</a>
</li>
</ul>
</div>
</span>
<span class="labelBtn btn-group" id="searchGroup" style="vertical-align:middle; display:inline-block;">
<button type="button" class="btn btn-default btn-xs dropdown-toggle"
data-toggle="dropdown" tooltip-placement="bottom" uib-tooltip="Search code"
ng-click="searchClicked()">
<i class="fa fa-search"></i>
</button>
<ul class="dropdown-menu search-dropdown" ng-click="$event.stopPropagation()"
ng-style="{left : search.left}" style="width: 350px">
<li>
<div class="input-group input-group-sm search-group">
<span class="input-group-addon">Find</span>
<input type="text" class="form-control" id="findInput"
ng-class="{'no-match': !hasMatches() && search.searchText !== '',
'has-match': search.searchText !== ''}"
ng-change="markAllOccurrencesAndHighlightFirst()"
ng-click="markAllOccurrencesAndHighlightFirst()" ng-keypress="onPressOnFindInput($event)"
ng-model="search.searchText" ng-trim="false"/>
<span class="input-group-addon after-input" ng-show="search.searchText !== ''"
ng-class="{'no-match': !hasMatches() && search.searchText !== ''}">
{{search.currentOccurrence}} of {{search.occurrencesCount}}
</span>
<div class="input-group-btn">
<button class="btn btn-default" ng-click="prevOccurrence()">
<i class="fa fa-angle-left" aria-hidden="true"></i>
</button>
</div>
<div class="input-group-btn">
<button class="btn btn-default" ng-click="nextOccurrence()">
<i class="fa fa-angle-right" aria-hidden="true"></i>
</button>
</div>
</div>
<div class="input-group input-group-sm search-group">
<span class="input-group-addon" style="border-top-width: inherit">Replace</span>
<input type="text" class="form-control" ng-model="search.replaceText" ng-trim="false"
style="border-top-width: inherit"/>
<div class="input-group-btn">
<button class="btn btn-default" ng-click="replace()"
style="border-top-width: inherit">Replace</button>
</div>
<div class="input-group-btn">
<button class="btn btn-default" ng-click="replaceAll()"
style="border-top-width: inherit">All</button>
</div>
</div>
</li>
</ul>
</span>
<!-- put the delete action by itself for your protection -->
<span class="labelBtn btn-group" style="vertical-align:middle; display:inline-block;">
<!-- if the note is in the trash, remove note permanently -->
<button ng-if="isTrash(note)"
type="button"
class="btn btn-default btn-xs"
ng-click="removeNote(note.id)"
ng-hide="viewOnly"
ng-class="{'disabled':isNoteRunning()}"
tooltip-placement="bottom" uib-tooltip="Remove this note permanently"
ng-disabled="revisionView">
<i class="icon-trash"></i>
</button>
<!-- if the note is not in the trash, move to trash -->
<button ng-if="!isTrash(note)"
type="button"
class="btn btn-default btn-xs"
ng-click="moveNoteToTrash(note.id)"
ng-hide="viewOnly"
ng-class="{'disabled':isNoteRunning()}"
tooltip-placement="bottom" uib-tooltip="Move this note to trash"
ng-disabled="revisionView">
<i class="icon-trash"></i>
</button>
</span>
<span class="labelBtn" style="vertical-align:middle; display:inline-block;">
<button type="button"
class="btn btn-default btn-xs"
ng-show="collaborativeMode"
tooltip-placement="bottom" uib-tooltip="Users who watch this note: {{collaborativeModeUsers.join(', ')}}"
style="background-color: rgba(0,151,255,0.36)">
<i class="icon-eye"> {{collaborativeModeUsers.length}}</i>
</button>
</span>
<span ng-hide="viewOnly">
<div class="labelBtn btn-group" ng-if="note.config.isZeppelinNotebookCronEnable">
<div class="btn btn-default btn-xs dropdown-toggle"
type="button"
data-toggle="dropdown"
ng-class="{ 'btn-info' : note.config.cron, 'btn-danger' : note.info.cron, 'btn-default' : !note.config.cron}"
tooltip-placement="bottom" uib-tooltip="Run scheduler"
ng-disabled="revisionView || isTrash(note)">
<span class="fa fa-clock-o"></span> {{getCronOptionNameFromValue(note.config.cron)}}
</div>
<ul class="dropdown-menu" role="menu" style="width:300px">
<li>
<div class="cron-preset-container">
Run note with cron scheduler.
Either choose from preset or write your own <a href="https://www.quartz-scheduler.org/documentation/quartz-2.3.0/tutorials/tutorial-lesson-06.html" target="_blank">cron expression</a>.
<div>
<span>- Preset</span>
<a class="cron-preset" ng-repeat="cr in cronOption"
type="button"
ng-click="setCronScheduler(cr.value)"
dropdown-input ng-class="{ 'selected' : cr.value == note.config.cron}">{{cr.name}}</a>
</div>
<div>
<span>- Cron expression</span>
<input type="text"
ng-model="note.config.cron"
ng-change="setCronScheduler(note.config.cron)"
dropdown-input ng-model-options="{ debounce: 1000 }" />
<p ng-show="note.info.cron" class="text-danger cron-info">
{{note.info.cron}}
</p>
</div>
<div>
<span>- After execution stop the interpreter </span>
<input type="checkbox"
ng-model="note.config.releaseresource"
ng-click="setReleaseResource(note.config.releaseresource)"/>
</div>
</div>
</li>
</ul>
</div>
</span>
</div>
<div class="pull-right" style="margin-top:15px; margin-right:15px; margin-left: 15px; margin-bottom: 13px; font-size:15px;">
<span ng-if="!revisionView">
<span class="setting-btn"
type="button"
data-toggle="modal"
data-target="#shortcutModal"
tooltip-placement="bottom" uib-tooltip="List of shortcuts">
<i class="fa fa-keyboard-o"></i>
</span>
<span class="setting-btn"
type="button"
ng-click="toggleSetting()"
tooltip-placement="bottom" uib-tooltip="Interpreter binding">
<i class="fa fa-cog" ng-style="{color: showSetting ? '#3071A9' : 'black' }"></i>
</span>
<span class="setting-btn"
type="button"
ng-click="togglePermissions()"
tooltip-placement="bottom" uib-tooltip="Note permissions">
<i class="fa fa-lock" ng-style="{color: showPermissions ? '#3071A9' : 'black' }"></i>
</span>
</span>
<span class="btn-group">
<button type="button" class="btn btn-default btn-xs dropdown-toggle"
data-toggle="dropdown">
{{note.config.looknfeel}} <span class="caret"></span>
</button>
<ul class="dropdown-menu pull-right" role="menu">
<li ng-repeat="looknfeel in looknfeelOption">
<a style="cursor:pointer" ng-click="setLookAndFeel(looknfeel)">{{looknfeel}}</a>
</li>
</ul>
</span>
</div>
</h3>
</headroom>