1
0
Fork 0
mirror of https://github.com/openstf/stf synced 2025-10-06 03:50:04 +02:00

Cleanup code for control-panes.

This commit is contained in:
Gunther Brunner 2015-08-31 17:04:46 +09:00
parent bd493b210b
commit 4db67dd703
26 changed files with 4 additions and 356 deletions

View file

@ -25,13 +25,6 @@ module.exports = function ActivityCtrl($scope, gettext, TimelineService) {
serial: $scope.device.serial
})
// $scope.timeline.push({
// title: title,
// message: message,
// serial: angular.copy($scope.device.serial),
// time: Date.now()
// })
}

View file

@ -1,7 +1,4 @@
.widget-container.scrollableX.messages.stf-activity(ng-controller='ActivityCtrl')
//.heading
i.fa
span(translate) Activity
.widget-content.padded
ul(ng-repeat='line in timeline.lines')
@ -24,27 +21,3 @@
div
refresh-page
//a(href='/')
.status.unread
//i.fa.fa-exclamation-triangle.fa-2x.activity-icon
h2.activity-title WebSocket Disconnected
span.activity-date 2014/04/30 18:33:22
p.pull-left Socket connection was lost, try again reloading the page.
.activity-buttons.pull-right
refresh-page
.clearfix
//li.list-group-item
.reviewer-info
i.fa.fa-mobile.fa-2x.activity-icon
h5.activity-title 'Nexus 5' Disconnected
em.activity-date.pull-right 2014/04/30 15:33:22
.review-text
p.pull-left Device was disconnected because it timed out.
.activity-buttons.pull-right
button.btn.btn-sm.btn-primary-outline(ng-click='')
i.fa.fa-refresh
span(translate) Reconnect device

View file

@ -38,56 +38,6 @@
i.fa.fa-step-forward
button(tooltip='{{ "Fast Forward" | translate }}', ng-click='press("media_fast_forward")').btn.btn-primary.btn-xs
i.fa.fa-fast-forward
//h6 Physical Media
//.btn-group
button(tooltip='{{ "Play" | translate }}', ng-click='press("KEYCODE_MEDIA_PLAY")').btn.btn-primary.btn-xs
i.fa.fa-play
button(tooltip='{{ "Pause" | translate }}', ng-click='press("KEYCODE_MEDIA_PAUSE")').btn.btn-primary.btn-xs
i.fa.fa-pause
button(tooltip='{{ "Close" | translate }}', ng-click='press("KEYCODE_MEDIA_CLOSE")').btn.btn-primary.btn-xs
i.fa.fa-sign-out
button(tooltip='{{ "Eject" | translate }}', ng-click='press("KEYCODE_MEDIA_EJECT")').btn.btn-primary.btn-xs
i.fa.fa-eject
button(tooltip='{{ "Record" | translate }}', ng-click='press("KEYCODE_MEDIA_RECORD")').btn.btn-primary.btn-xs
i.fa.fa-circle
//h6(translate) Other Keys
//div.special-other-keys-buttons
button(ng-click='press("KEYCODE_APP_SWITCH")').btn.btn-default.btn-xs
i.fa App Switch
button(ng-click='press("KEYCODE_MANNER_MODE")').btn.btn-default.btn-xs
i.fa Manner Mode
button(ng-click='press("KEYCODE_3D_MODE")').btn.btn-default.btn-xs
i.fa 3D Mode
button(ng-click='press("KEYCODE_CONTACTS")').btn.btn-default.btn-xs
i.fa Contacts
button(ng-click='press("KEYCODE_CALENDAR")').btn.btn-default.btn-xs
i.fa Calendar
button(ng-click='press("KEYCODE_MUSIC")').btn.btn-default.btn-xs
i.fa Music
button(ng-click='press("KEYCODE_CALCULATOR")').btn.btn-default.btn-xs
i.fa Calculator
button(ng-click='press("KEYCODE_ZENKAKU_HANKAKU")').btn.btn-default.btn-xs
i.fa 全角/半角
button(ng-click='press("KEYCODE_EISU")').btn.btn-default.btn-xs
i.fa 英数
button(ng-click='press("KEYCODE_MUHENKAN")').btn.btn-default.btn-xs
i.fa 無変換
button(ng-click='press("KEYCODE_HENKAN")').btn.btn-default.btn-xs
i.fa 変換
button(ng-click='press("KEYCODE_KATAKANA_HIRAGANA")').btn.btn-default.btn-xs
i.fa カタかナ/ひらがな
button(ng-click='press("KEYCODE_YEN")').btn.btn-default.btn-xs
i.fa ¥
button(ng-click='press("KEYCODE_RO")').btn.btn-default.btn-xs
i.fa RO
button(ng-click='press("KEYCODE_KANA")').btn.btn-default.btn-xs
i.fa かな
button(ng-click='press("KEYCODE_ASSIST")').btn.btn-default.btn-xs
i.fa Assist
//button(tooltip='{{ "Switch Charset" | translate }}', ng-click='press(80)').btn.btn-primary
i.fa TST
//button(ng-click='press("KEYCODE_CLEAR")').btn.btn-primary.btn-sm
i.fa Clear
h6 D-pad
table.special-keys-dpad-buttons
tr

View file

@ -44,7 +44,3 @@
td
button.btn.btn-sm.btn-danger-outline(ng-click='removeRow(forward)')
i.fa.fa-trash-o
//.checkbox
label
input(type='checkbox', value='')
span(translate) Always forward on connect

View file

@ -3,11 +3,7 @@
.heading
i.fa.fa-code
span(translate) Run JavaScript
//form.form-inline
.btn-group
//button(ng-disabled='true').btn.btn-sm.btn-default-outline
i.fa.fa-upload
| Load File...
script(type='text/ng-template', id='saveSnippetModal.html')
.modal-header
h2 Save snippet
@ -29,24 +25,6 @@
li.divider
li
a(ng-click='clearSnippets()', type='button', translate).btn-link Clear
//span.form-inline.form-group.unselectable
.checkbox
label
input(type='checkbox', ng-model='snippet.safe')
span(tooltip='Execute code in a safe way') Safe
span
.checkbox
label
input(type='checkbox', nxg-model='snippet.evaluate')
span(tooltip='Evaluate code') Evaluate
.checkbox
label
input(type='checkbox', ng-model='snippet.async')
span(tooltip='Execute code in an async way') Async
.checkbox
label
input(type='checkbox', ng-model='snippet.scriptTag', ng-disabled='true')
span(tooltip='{{scriptTagPopover}}') Script tag
.btn-group.pull-right
button.btn.btn-sm.btn-primary-outline(ng-click='injectJS()', ng-disabled='!snippet.editorText')
i.fa.fa-play
@ -64,14 +42,12 @@
span {{ result.deviceName }}
td(width='30%', title="'Returns'", sortable='prettyValue')
div(ng-show='result.isObject')
//ace-json-viewer(ng-model='result.prettyValue')
//div(ui-ace="miniAceOptions", ng-model='result.prettyValue').stf-mini-ace-viewer
code.value-next-to-progress {{ result.prettyValue }}
div(ng-hide='result.isObject')
.value-next-to-progress {{ result.value }}
td(width='40%', ng-show='result.isSpecialValue')
div(ng-show='result.isNumber')
//progressbar.table-progress(value='result.percentage', max='100')
progressbar.table-progress(value='result.percentage', max='100')
div(ng-show='result.isObject')
div.label.label-info Object
div(ng-show='result.isFunction')
@ -84,7 +60,6 @@
div.label(style='width=100%', ng-class="{'label-success': result.value, 'label-important': !result.value}")
i.fa(ng-class="{'fa-check': result.value, 'fa-times-circle': !result.value }")
span {{ result.value.toString() }}
//span {{ result.value.toString() | capitalize }}
tab(heading='Raw')
pre.selectable {{results | json}}
clear-button(ng-click='clear()', ng-disabled='!results.length')

View file

@ -7,9 +7,7 @@
tooltip='{{"App Store" | translate}}', tooltip-placement="bottom")
i.fa.fa-shopping-cart
.widget-content.padded
div
form(name='storeLogin', novalidate, enable-autofill)
.form-group
.input-group
@ -55,5 +53,4 @@
td
button.btn.btn-xs.btn-danger-outline(ng-click='removeAccount(account)')
i.fa.fa-sign-out
//i.fa.fa-trash-o
span(translate) Sign Out

View file

@ -10,12 +10,6 @@ module.exports =
},
nextDevice: function () {
console.log('next')
// console.log('$scope.groupTracker.devices', $scope.groupTracker.devices)
// console.log('$scope.groupTracker.devices', $scope.groupDevices)
// groupDevice in $scope.groupTracker.devices
// groupDevice.serial === device.serial
// $location.path('/control/' + device.serial)
},
deviceList: function () {
$location.path('/devices/')

View file

@ -8,7 +8,6 @@ div(ng-controller='ControlPanesHotKeysCtrl').fill-height
div(fa-pane, pane-id='control-device', pane-anchor='west', pane-size='{{remotePaneSize}}', pane-min='200px', pane-max='100% + 2px', pane-handle='4', pane-no-toggle='false')
.remote-control
//include control-screen
div(ng-include='"control-panes/device-control/device-control.jade"').fill-height
div(fa-pane, pane-id='control-bottom-tabs', pane-anchor='south', pane-size='30% + 2px', pane-handle='4').pane-bottom-p

View file

@ -1,6 +1,5 @@
.widget-container.fluid-height.stf-cpu(ng-controller='CpuCtrl')
.widget-content.padded
//nothing-to-show(show='!data', message='No CPU info', icon='fa-bar-chart-o')
div.overflow-x
ul
li(ng-repeat="(id, stats) in data")

View file

@ -15,7 +15,6 @@ module.exports = function ShellCtrl($scope) {
// TODO: Move this to server side
// TODO: Android 2.x doesn't support openSetting(), account for that on the UI
function openSetting(activity) {
run('am start -a android.intent.action.MAIN -n com.android.settings/.Settings\\$' +
activity)
@ -59,11 +58,6 @@ module.exports = function ShellCtrl($scope) {
openSetting('DevelopmentSettingsActivity')
}
//'am start -n com.android.settings/.Settings\$PowerUsageSummaryActivity'
//'am start -a android.intent.action.POWER_USAGE_SUMMARY'
$scope.clear = function () {
$scope.command = ''
$scope.data = ''

View file

@ -1,10 +1,6 @@
.row
.col-md-6
div(ng-include='"control-panes/dashboard/navigation/navigation.jade"')
//.col-md-6(ng-if='$root.platform == "web"')
div(ng-include='"control-panes/dashboard/browser/browser.jade"')
//.col-md-6
div(ng-include='"control-panes/dashboard/input/input.jade"')
.col-md-6
div(ng-include='"control-panes/dashboard/clipboard/clipboard.jade"')

View file

@ -24,7 +24,6 @@
padding-top: 10px;
border: 2px transparent dashed;
border-radius: 2px;
/*background-color: #f6f6f6;*/
cursor: pointer;
}
@ -41,13 +40,6 @@
}
.stf-upload .drop-area-text {
/*border-top: 1px solid #e2e2e2;*/
/*opacity: 0;*/
font-size: 14px;
font-weight: 300;
/*transition: opacity 0.25s ease-in-out;*/
}
.stf-upload .drop-area:hover .drop-area-text {
/*opacity: 1;*/
}

View file

@ -58,8 +58,6 @@
span(ng-if='!showManifest') Show Manifest
pre.manifest-text(ng-if='showManifest') {{ installation.manifest | json }}
//error-message(message='{{ installation.error | installError | translate }} ({{ installation.error }})')
// TODO
alert(type='danger', close='clear()', ng-if='installation.error')
strong(translate) Oops!
|  

View file

@ -7,22 +7,14 @@
.widget-content.padded
// TODO: autofill doesn't work here
// NOTE: autofill doesn't work here
form(method='post', enable-autofill, ng-submit='run(command)')
.input-group.form-inline
input(type=text, ng-model='command', Xtext-focus-select,
autocapitalize='off', spellcheck='false',
tabindex='30', accesskey='S', autocomplete='on').form-control.shell-input
span.input-group-btn
// , tooltip='{{"Run Command"|translate}}'
button.btn.btn-primary-outline(ng-click='run(command)', ng-disabled='!command')
//, tooltip='{{ "Run command" | translate }}')
i.fa.fa-play
pre.shell-results.selectable(ng-show='data') {{data}}
pre.shell-results.selectable.shell-results-empty(ng-show='result.settled && !data') No output
// table
tr(ng-repeat='result in results track by result.device.serial')
td {{ result.device.serial }}
td {{ result.data }}

View file

@ -202,7 +202,6 @@ device-screen input {
/* VNC buttons */
.stf-vnc-bottom .btn-primary:hover {
background: rgba(255, 255, 255, 1.0);
/*border-color: rgba(255, 255, 255, 1.0);*/
border: none;
}
@ -210,12 +209,10 @@ device-screen input {
border-radius: 0;
}
/*.stf-vnc-bottom .btn-primary:active,*/
.stf-vnc-bottom .btn-primary:active {
background: rgba(250, 250, 250, 0.75);
border: none;
color: #0d3fa4;
/*border-color: rgba(255, 255, 255, 0.7);*/
}
.stf-vnc-navbar-buttons {
@ -229,8 +226,6 @@ device-screen input {
}
.stf-device-control .stf-vnc-device-name {
/*padding: 6px 2px 6px 15px;*/
/*float: left;*/
font-size: 16px;
line-height: 20px;
text-overflow: ellipsis;
@ -240,7 +235,6 @@ device-screen input {
}
.stf-device-control .device-name-container {
/*overflow: hidden;*/
text-overflow: ellipsis;
}

View file

@ -11,7 +11,6 @@
ng-model='currentRotation', btn-radio='"landscape"').pointer
i.fa.fa-mobile.fa-rotate-90(tooltip='{{ "Landscape" | translate }} (Current rotation: {{ device.display.rotation }}°)', tooltip-placement='bottom')
.button-spacer
// NOTE: ui-bootstrap bug: tooltip breaks btn-checkbox so don't put in the same button
button(type='button', ng-model='showScreen', btn-checkbox).btn.btn-sm.btn-danger
i(ng-show='showScreen', tooltip-html-unsafe='{{"Hide Screen"|translate}}', tooltip-placement='bottom').fa.fa-eye
i(ng-show='!showScreen', tooltip-html-unsafe='{{"Show Screen"|translate}}', tooltip-placement='bottom').fa.fa-eye-slash
@ -23,7 +22,6 @@
img(ng-src='/static/app/devices/icon/x24/{{ device.image || "E30HT.jpg" }}')
span.device-name-text {{ device.enhancedName }}
span.caret(ng-show='groupDevices.length > 0')
//span(ng-show='device && !device.present', translate) (Absent)
ul.dropdown-menu(role='menu', data-toggle='dropdown', ng-show='groupDevices.length > 0').pointer.unselectable
li(ng-repeat='groupDevice in groupDevices')

View file

@ -11,15 +11,10 @@
.stf-info .table-infocard tbody > tr > td:first-child {
text-align: right;
margin-right: 20px;
/*color: #111111;*/
font-weight: bold;
white-space: nowrap;
}
.stf-info .table-infocard tbody > tr > td:last-child {
/*color: #555;*/
}
.stf-info .progress {
margin-bottom: 0;
height: 15px;

View file

@ -1,10 +1,6 @@
.stf-inspect(ng-controller='InspectCtrl')
nothing-to-show(ng-if='$root.browser != "webview"', message='{{"Inspecting is currently only supported in WebView"|translate}}', icon='fa-search-plus')
.something-white(ng-if='$root.browser == "webview"')
//.btn-group.padded
button.btn.btn-sm.btn-primary(ng-click='inspect()')
i.fa.fa-bug
span(translate) Inspect Current Page
nothing-to-show(ng-if='!results.length', message='{{"Nothing to inspect"|translate}}', icon='fa-search-plus')
table.table.table-striped(ng-table='tableParams', ng-show='results.length').selectable
@ -16,7 +12,5 @@
button(ng-click='setUrl(result.value.clientUrl)').btn.btn-primary
i.fa.fa-search-plus
span(translate) Inspect Device
//a.btn.btn-primary(href='{{ result.value.clientUrl}}', target='_blank')
i.fa.fa-share-alt Launch
.weinre-window(ng-show='urlToShow')
iframe.weinre-content(type='text/html', width='100%', height='100%', ng-src='{{trustSrc(urlToShow)}}', frameborder='0')

View file

@ -50,10 +50,4 @@ module.exports = function LogsCtrl($scope, LogcatService) {
'tag',
'priority'
])
// $scope.$watchCollection('filters', function (newValue, oldValue) {
// console.log(newValue)
// });
}

View file

@ -1,45 +1,13 @@
.stf-logs(ng-controller='LogsCtrl')
.widget-container.fluid-height
//.heading
.form-inline
button(ng-click='toggle()', ng-class="{active: started}", title='Start/Stop Logging').btn.btn-sm.btn-primary-outline
i.fa.fa-list-alt
span {{ started ? 'Stop Logging' : 'Start Logging' }}
clear-button(ng-click='clear()', ng-disabled='!hasLines')
label.checkbox.pull-right
input(type='checkbox', ng-model='autoScroll')
span Auto Scroll
.widget-content
//nothing-to-show(ng-show='!hasLines', message='No logs captured', icon='fa-list-alt')
//table.table.table-condensed(ng-show='filters.show')
//
table.table.table-condensed.logcat-filters-table(ng-show='true')
//tr
th(width='4%')//Line
th(width='10%') Device
th(width='8%') Level
th(width='8%') Time
th(width='4%') PID
th(width='4%') TID
th(width='10%') App
th(width='16%') Tag
th(width='46%') Text
tr
td(width='1%')
button(ng-model='started', btn-checkbox, title='{{"Start/Stop Logging"|translate}}').btn.btn-xs.btn-primary-outline
i.fa.fa-list-alt
span(ng-if='started') {{"Stop"|translate}}
span(ng-if='!started') {{"Get"|translate}}
//td(width='10%')
select(ng-model='filters.deviceName', ng-options='d for d in filters.devicesList')
option(value='') {{"Device"|translate}}
td(width='6%')
select(ng-model='filters.priority', ng-options='l.name for l in filters.levelNumbers')
option(value='', disabled, selected) {{"Level"|translate}}
@ -49,8 +17,6 @@
input(ng-model='filters.pid', type='text', placeholder='{{"PID"|translate}}').input-sm.form-control
td(width='8%', ng-if='$root.platform == "native"')
input(ng-model='filters.tid', type='text', placeholder='{{"TID"|translate}}').input-sm.form-control
//td(width='14%', ng-if='$root.platform == "native"')
input(ng-model='filters.app', type='text', placeholder='{{"App"|translate}}').input-sm.form-control
td(width='14%', ng-if='$root.platform == "native"')
input(ng-model='filters.tag', type='text', placeholder='{{"Tag"|translate}}').input-sm.form-control
td(width='40%')
@ -61,19 +27,3 @@
span(translate) Clear
logcat-table(add-row='lastEntry')
//#logcatParent.force-gpu
table#logcatTable.console-message-text.tableX.table-condensedX.selectableX
//thead
tr
th(width='4%')
th(width='10%')
th(width='8%')
th(width='8%')
th(width='4%')
th(width='4%')
th(width='10%')
th(width='16%')
th(width='46%')
tbody#logcatBody
pre {{ logEntries | json }}
br

View file

@ -1,5 +1,4 @@
.stf-logs {
.logcat-filters-table {
margin-bottom: 0;
box-shadow: 0 1px 5px rgba(0, 0, 0, 0.1);
@ -17,17 +16,4 @@
.logcat-filters-table tfoot > tr > td {
border-top: none;
}
}
/*#logcatMax {*/
/*overflow-y: auto;*/
/*position: absolute;*/
/*top: 180px;*/
/*left: 20px;*/
/*bottom: 0;*/
/*bottom: 0;*/
/*background: hotpink;*/
/*}*/

View file

@ -1,79 +1,3 @@
module.exports = function CpuCtrl() {
//var RealTimeData = function (layers) {
// this.layers = layers;
// this.timestamp = ((new Date()).getTime() / 1000) | 0;
//};
//
//RealTimeData.prototype.rand = function () {
// return parseInt(Math.random() * 100) + 50;
//};
//
//RealTimeData.prototype.history = function (entries) {
// if (typeof(entries) != 'number' || !entries) {
// entries = 60;
// }
//
// var history = [];
// for (var k = 0; k < this.layers; k++) {
// history.push({values: []});
// }
//
// for (var i = 0; i < entries; i++) {
// for (var j = 0; j < this.layers; j++) {
// history[j].values.push({time: this.timestamp, y: this.rand()});
// }
// this.timestamp++;
// }
//
// return history;
//};
//
//RealTimeData.prototype.next = function () {
// var entry = [];
// for (var i = 0; i < this.layers; i++) {
// entry.push({time: this.timestamp, y: this.rand()});
// }
// this.timestamp++;
// return entry;
//}
//
//window.RealTimeData = RealTimeData;
//
//
//var liveAreaData = new RealTimeData(4)
//
//
//function generateAreaData() {
// var values = [];
// var data = [
// {label: 'Sqrt', values: []},
// {label: 'Cbrt', values: []},
// {label: '4th', values: []}
// ];
// for (var i = 0; i <= 128; i++) {
// var x2 = 20 * (i / 128);
// data[0].values.push({x: x2, y: Math.sqrt(x2)});
// data[1].values.push({x: x2, y: Math.pow(x2, (1 / 3))});
// data[2].values.push({x: x2, y: Math.pow(x2, (1 / 4))});
// }
// return data;
//}
//
//$scope.areaData = generateAreaData()
//
//$scope.realtimeArea = liveAreaData.history();
//$scope.realtimeAreaFeed = liveAreaData.next();
//$scope.getNextLiveArea = function () {
// $scope.realtimeAreaFeed = liveAreaData.next();
// $timeout($scope.getNextLiveArea, 1000);
//}
//$timeout($scope.getNextLiveArea, 1000);
//
//
//$scope.areaAxes = ['left', 'right', 'bottom'];
//$scope.lineAxes = ['right', 'bottom'];
//$scope.scatterAxes = ['left', 'right', 'top', 'bottom'];
}

View file

@ -4,7 +4,3 @@
span(translate) CPU
.widget-content.padded
div
//epoch-live-area(chart-class='category10', chart-height='200',
chart-data='realtimeArea', chart-stream='realtimeAreaFeed',
chart-axes='areaAxes')

View file

@ -35,31 +35,8 @@
input(select-on-click, ng-model='newCookie.domain', placeholder='http')
td(width='10%', data-title="'Path'|translate")
input(select-on-click, ng-model='newCookie.path', placeholder='/')
//td(width='5%', data-title="'Expires'")
span(contenteditable="true") {{ newCookie.expiry }}
td(width='5%', data-title="'Secure'|translate")
input(type='checkbox', indeterminate='true', ng-model='newCookie.secure')
td(title="'Add'|translate")
button.btn.btn-default(ng-click='addCookie()')
i.fa.fa-plus-circle
//| Add
//table.table.table-hover.table-condensed(ng-table='tableParams')
tbody(ng-repeat='group in $groups')
tr.ng-table-group
td(colspan='{{$columns.length}}').unselectable.pointer
a(ng-click='group.$hideRows = !group.$hideRows')
img(ng-src='{{ group.data[0].deviceImage }}').device-icon-smallest
//i.fa(ng-class='{"fa-chevron-right": group.$hideRows, "fa-chevron-down": !group.$hideRows}')
strong {{group.value}}
tr(ng-hide='group.$hideRows', ng-repeat='cookie in group.data')
td(sortable='name', data-title="'Name'|translate")
strong {{cookie.name}}
td(width='50%', sortable='value', data-title="'Value'|translate")
span {{cookie.value}}
td(width='15%', sortable='domain', data-title="'Domain'|translate")
span {{cookie.domain}}
td(idth='10%', sortable='path', data-title="'Path'|translate")
span {{cookie.path}}
td(idth='5%', sortable='secure', data-title="'Secure'|translate")
span {{cookie.secure ? 'Yes' : 'No'}}

View file

@ -6,11 +6,6 @@ module.exports = function ScreenshotsCtrl($scope) {
$scope.screenshots = []
}
//SettingsService.bind($scope, {
// target: 'screenShotSize',
// defaultValue: 200
//})
$scope.shotSizeParameter = function (maxSize, multiplier) {
var finalSize = $scope.screenShotSize * multiplier
var finalMaxSize = maxSize * multiplier
@ -36,5 +31,4 @@ module.exports = function ScreenshotsCtrl($scope) {
}
$scope.screenShotSize = newValue
}
}

View file

@ -9,8 +9,6 @@
.stf-screenshots .screenshot-image {
-webkit-transition: 1000ms;
transition: 1000ms;
/*-webkit-transition: width 2s; */
/*transition: width 2s;*/
}
.stf-screenshots .screenshot-image.ng-image-not-loaded {