admin2 - experimental
This commit is contained in:
@@ -12,29 +12,24 @@ def button(href, label):
|
|||||||
if is_mobile:
|
if is_mobile:
|
||||||
ret = A_button(SPAN(label), _href=href)
|
ret = A_button(SPAN(label), _href=href)
|
||||||
else:
|
else:
|
||||||
ret = A(SPAN(label), _class='button btn', _href=href)
|
ret = A(SPAN(label), _class='btn rounded', _href=href)
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
def button_enable(href, app):
|
def button_enable(href, app):
|
||||||
if os.path.exists(os.path.join(apath(app, r=request), 'DISABLED')):
|
if os.path.exists(os.path.join(apath(app, r=request), 'DISABLED')):
|
||||||
label = SPAN(T('Enable'), _style='color:red')
|
text, classes = T("Enable"), "btn rounded red"
|
||||||
else:
|
else:
|
||||||
label = SPAN(T('Disable'), _style='color:green')
|
text, classes = T("Disable"), "btn rounded gree"
|
||||||
id = 'enable_' + app
|
id = 'enable_' + app
|
||||||
return A(label, _class='button btn', _id=id, callback=href, target=id)
|
return A(text, _class=classes, _id=id, callback=href, target=id)
|
||||||
|
|
||||||
def sp_button(href, label):
|
def sp_button(href, label):
|
||||||
if request.user_agent().get('is_mobile'):
|
if request.user_agent().get('is_mobile'):
|
||||||
ret = A_button(SPAN(label), _href=href)
|
ret = A_button(SPAN(label), _href=href)
|
||||||
else:
|
else:
|
||||||
ret = A(SPAN(label), _class='button special btn btn-inverse', _href=href)
|
ret = A(SPAN(label), _class='btn pink rounded', _href=href)
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
def helpicon():
|
def helpicon():
|
||||||
return IMG(_src=URL('static', 'images/help.png'), _alt='help')
|
return IMG(_src=URL('static', 'images/help.png'), _alt='help')
|
||||||
|
|
||||||
def searchbox(elementid):
|
|
||||||
return SPAN(LABEL(IMG(_id="search_start", _src=URL('static', 'images/search.png'), _alt=T('filter')),
|
|
||||||
_class='icon', _for=elementid), ' ',
|
|
||||||
INPUT(_id=elementid, _type='text', _size=12, _class="input-medium"),
|
|
||||||
_class="searchbox")
|
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,489 +0,0 @@
|
|||||||
|
|
||||||
/*=============================================================
|
|
||||||
GENERAL
|
|
||||||
==============================================================*/
|
|
||||||
body { /*remember to account for the hidden area underneath
|
|
||||||
fixed navbar by adding at least 40px padding to the <body>.
|
|
||||||
Be sure to add this after the core Bootstrap CSS
|
|
||||||
and before the optional responsive CSS.
|
|
||||||
An alternative solution is to set top-margin to div#main padding-top:60px; comment this for alternative solution*/ height:auto; /*uncomment this for alternative solution*/ }
|
|
||||||
|
|
||||||
/*=============================================================
|
|
||||||
BOOTSTRAP ICONS FOLDER FIX
|
|
||||||
==============================================================*/
|
|
||||||
[class^="icon-"], [class*=" icon-"] { /* right folder for bootstrap black images/icons*/ background-image:url("../images/glyphicons-halflings.png") }
|
|
||||||
|
|
||||||
.icon-white, .nav-tabs>.active >a>[class^="icon-"], .nav-tabs>.active>a>[class*=" icon-"], .nav-pills>.active>a>[class^="icon-"], .nav-pills>.active>a>[class*=" icon-"], .nav-list>.active>a>[class^="icon-"], .nav-list>.active>a>[class*=" icon-"], .navbar-inverse .nav>.active>a>[class^="icon-"], .navbar-inverse .nav>.active>a>[class*=" icon-"], .dropdown-menu>li>a:hover>[class^="icon-"], .dropdown-menu>li>a:hover>[class*=" icon-"], .dropdown-menu>.active>a>[class^="icon-"], .dropdown-menu>.active>a>[class*=" icon-"] { /* right folder for bootstrap white images/icons*/ background-image:url("../images/glyphicons-halflings-white.png"); }
|
|
||||||
|
|
||||||
/*=============================================================
|
|
||||||
INPUT BORDER HIGHLIGHT WHEN INPUT IS FOCUSED
|
|
||||||
==============================================================*/
|
|
||||||
textarea:focus, input[type="text"]:focus, input[type="password"]:focus, input[type="datetime"]:focus, input[type="datetime-local"]:focus, input[type="date"]:focus, input[type="month"]:focus, input[type="time"]:focus, input[type="week"]:focus, input[type="number"]:focus, input[type="email"]:focus, input[type="url"]:focus, input[type="search"]:focus, input[type="tel"]:focus, input[type="color"]:focus, input[type="file"]:focus, select:focus, .uneditable-input:focus { /* outline color*/ border-color:rgba(232, 149, 60, 0.8); outline:0; /*outline:thin dotted \9;*/ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(232, 149, 60, 0.6); -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(232, 149, 60, 0.6); box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(232, 149, 60, 0.6); }
|
|
||||||
|
|
||||||
.web2py_grid .dropdown-menu li > a:hover, .web2py_grid .dropdown-menu li > a:focus { filter:progid:DXImageTransform.Microsoft.gradient(enabled=false); /* IE6-9*/ background-image:none; background-color:#E8953C; }
|
|
||||||
|
|
||||||
/*=============================================================
|
|
||||||
COLOR OF LINKS
|
|
||||||
==============================================================*/
|
|
||||||
a, a:hover { color:#E8953C; text-decoration:none; }
|
|
||||||
|
|
||||||
a:hover { color:#e2821b; }
|
|
||||||
|
|
||||||
/*=============================================================
|
|
||||||
CONTROLS and CONTAINERS
|
|
||||||
==============================================================*/
|
|
||||||
.row-buttons .btn { margin-bottom:7px; }
|
|
||||||
|
|
||||||
.sidebar .box { clear:right; margin-top:2em; border-top:1px solid #d1d1d1; padding:0 1em; }
|
|
||||||
|
|
||||||
.pwdchange>.button { margin-bottom:10px; }
|
|
||||||
|
|
||||||
input[type="file"] { margin-bottom:9px; }
|
|
||||||
|
|
||||||
.form-inline input[type="file"] { margin-bottom:0px; }
|
|
||||||
|
|
||||||
input + .help-block { margin-top:-10px; margin-bottom:4px; }
|
|
||||||
|
|
||||||
#confirm_form input.btn, .generatedbyw2p input { margin-right:4px; }
|
|
||||||
|
|
||||||
a[rel='tooltip'] span, div[rel='tooltip'] span { display:none; margin-left:-9999px; }
|
|
||||||
|
|
||||||
/*in-page browsing*/
|
|
||||||
[rel="pagebookmark"] { position:relative; }
|
|
||||||
|
|
||||||
[rel="pagebookmark"]>.component { cursor:pointer; }
|
|
||||||
|
|
||||||
[rel="pagebookmark"]>.hashstick { position:absolute; top:-54px; left:-9999px; visibility:visible; }
|
|
||||||
|
|
||||||
/* following 2 rules set the style of a small button for going to top of page*/
|
|
||||||
.tophashlink.btn { padding:2px 3px; visibility:hidden; }
|
|
||||||
|
|
||||||
.hashstick:target+.tophashlink.btn { visibility:visible; }
|
|
||||||
|
|
||||||
ul.act_edit { margin-top:4px; margin-left:20px; }
|
|
||||||
|
|
||||||
ul.act_edit .btn { margin-top:4px; margin-bottom:4px; }
|
|
||||||
|
|
||||||
ul.act_edit .file>a { white-space:pre; }
|
|
||||||
|
|
||||||
.right-full { text-align:right; }
|
|
||||||
|
|
||||||
.searchbox, .searchbox label, .searchbox input { display:inline-block; }
|
|
||||||
|
|
||||||
.buttons-row .btn { margin-bottom:9px; }
|
|
||||||
|
|
||||||
.li-controls { display:inline-block; width:180px; vertical-align:middle; }
|
|
||||||
|
|
||||||
.celled { display:inline-block; padding: 0 0 0 4px; vertical-align:top; margin-top:4px; width:700px; }
|
|
||||||
|
|
||||||
.folder { list-style-type:none; #border-left: 1px dotted #AAA; }
|
|
||||||
|
|
||||||
.folder li { list-style-type:none; }
|
|
||||||
|
|
||||||
.folder>i { display:inline-block; width:5px; height:5px; border:1px solid; background-color:#FAA732; margin-left:-4px; margin-top:-2px; border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); border-radius:1px; }
|
|
||||||
|
|
||||||
.folder>i+a { padding-left:0.5em; }
|
|
||||||
|
|
||||||
.folder ul { margin-top:0.5em; margin-bottom:0.5em; }
|
|
||||||
|
|
||||||
.controls-inline .btn { margin-right:5px; }
|
|
||||||
|
|
||||||
div.web2py_counter.span6 { min-height:24px; text-align:right; }
|
|
||||||
|
|
||||||
.pagination { margin:0; }
|
|
||||||
|
|
||||||
.table { margin-bottom:10px; }
|
|
||||||
|
|
||||||
.row_buttons .btn { margin-right:4px; }
|
|
||||||
|
|
||||||
.editor-bar-column { display:inline-block; vertical-align:top; margin-right:4px; }
|
|
||||||
|
|
||||||
.editor-bar-column .input-long { width:270px; }
|
|
||||||
|
|
||||||
.editor-bar-column .input-normal { width:206px; }
|
|
||||||
|
|
||||||
.keybindings li { margin-bottom:0.5em; }
|
|
||||||
|
|
||||||
.keybindings span { padding:0.3em; border:1px solid transparent; vertical-align:middle; }
|
|
||||||
|
|
||||||
.teletype-text { font-family:monospace; font-weight:bold; font-style:normal; border-color:#999; background:#333; color:#DDD; -moz-border-radius:0.3em; border-radius:0.3em; }
|
|
||||||
|
|
||||||
.edit_language .tab_row div { display:inline-block; vertical-align:top; margin-right:4px; }
|
|
||||||
|
|
||||||
.edit_language .fake-input { height:18px; padding:4px; font-size:13px; line-height:18px; overflow:hidden; white-space:nowrap; display:inline-block; margin-bottom:9px; }
|
|
||||||
|
|
||||||
.test h3 { padding-left:9px; margin:0; font-size:16px; line-height:1; border-left:9px solid transparent; }
|
|
||||||
|
|
||||||
.test h3.passed { border-color:#009900; }
|
|
||||||
|
|
||||||
.test h3.failed { border-color:#CC0000; }
|
|
||||||
|
|
||||||
.test h3.nodoctests { border-color:#CCCC99; }
|
|
||||||
|
|
||||||
.test .test_report { width:100%; overflow:auto; }
|
|
||||||
|
|
||||||
.test_report pre { white-space:pre; }
|
|
||||||
|
|
||||||
.test div[id^="output_"]>h2 { font-size:18px; line-height:1; color:grey; }
|
|
||||||
|
|
||||||
div.center { text-align:center; }
|
|
||||||
|
|
||||||
.delete h2 { word-wrap:break-word; }
|
|
||||||
|
|
||||||
/*=============================================================
|
|
||||||
SHELL
|
|
||||||
==============================================================*/
|
|
||||||
.shell .output-wrapper { width:100%; height:30em; border:1px solid #333; }
|
|
||||||
|
|
||||||
.shell .prompt-wrapper { float:left; width:100%; overflow:hidden; height:auto; border:1px solid #333; }
|
|
||||||
|
|
||||||
.shell .prompt-container { margin-left:2.5em; }
|
|
||||||
|
|
||||||
.shell #caret { width:2.5em; float:left; margin-left:-100%; }
|
|
||||||
|
|
||||||
.shell #shellwrapper { background:white; color:#E8953C; width:100%; margin:1em 0; border:0; }
|
|
||||||
|
|
||||||
.shell #output, .shell .prompt { color:#E8953C; background:white; resize:none; border:none; width:100%; height:100%; cursor:default; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; }
|
|
||||||
|
|
||||||
.shell #output:focus, .shell .prompt:focus { border-color:transparent; outline:0; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; }
|
|
||||||
|
|
||||||
.shell #output pre { color: #E8953C; }
|
|
||||||
|
|
||||||
.shell #autoscroll { cursor:pointer; float:right; }
|
|
||||||
|
|
||||||
.shell .prompt, .shell #output, .shell #caret { font-size: 11pt; padding: 6px; padding-right: 0em; }
|
|
||||||
|
|
||||||
.shell #caret { padding-top:9px; }
|
|
||||||
|
|
||||||
.shell .prompt, .shell #output, .shell pre, .shell #caret { font-family: monospace; }
|
|
||||||
|
|
||||||
.shell a[rel="tooltip"] { margin-left:8px; }
|
|
||||||
|
|
||||||
/*=============================================================
|
|
||||||
PEEK
|
|
||||||
==============================================================*/
|
|
||||||
.peek .code-wrapper { width:100%; overflow:auto; white-space:pre; }
|
|
||||||
|
|
||||||
.peek table td pre { word-break:normal; white-space:pre; }
|
|
||||||
|
|
||||||
/*=============================================================
|
|
||||||
FOOTER
|
|
||||||
==============================================================*/
|
|
||||||
#footer { border-top:1px solid; text-align:center; padding:1em 0; }
|
|
||||||
|
|
||||||
#footer span, #footer select { display:inline-block; margin-bottom:0; vertical-align:middle; }
|
|
||||||
|
|
||||||
#footer select { width:auto; }
|
|
||||||
|
|
||||||
/*=============================================================
|
|
||||||
MAIN
|
|
||||||
==============================================================*/
|
|
||||||
#main { margin-top:60px; /*uncomment this for alternative solution to hidden area underneath fixed navbar issue*/ margin-bottom:60px; }
|
|
||||||
|
|
||||||
/*=============================================================
|
|
||||||
WIZARD
|
|
||||||
==============================================================*/
|
|
||||||
#wizard_nav .box { border-bottom:1px dotted; }
|
|
||||||
|
|
||||||
#wizard_nav li { margin-left:1em; margin-top:0.5em; }
|
|
||||||
|
|
||||||
.step textarea { width:auto; }
|
|
||||||
|
|
||||||
select[name='layout_theme'] { vertical-align:top; }
|
|
||||||
|
|
||||||
img#preview { margin-bottom:9px; }
|
|
||||||
|
|
||||||
/* multiselect customization*/
|
|
||||||
.ms-container { margin-bottom:5px; }
|
|
||||||
|
|
||||||
.ms-selectable, .step .ms-selection { text-align:center; }
|
|
||||||
|
|
||||||
.ms-list { text-align:left; background:white; }
|
|
||||||
|
|
||||||
.ms-container li.ms-elem-selectable:not(.disabled).ms-hover, .ms-container .ms-selection li:not(.disabled).ms-hover { background-color:#E8953C; }
|
|
||||||
|
|
||||||
.ms-container .ms-selectable { margin-right:25px; }
|
|
||||||
|
|
||||||
.ms-container .ms-selectable, .ms-container .ms-selection { background:transparent; }
|
|
||||||
|
|
||||||
.ms-container .ms-list.ms-focus { border-color:rgba(232, 149, 60, 0.8); -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(232, 149, 60, 0.6); -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(232, 149, 60, 0.6); box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(232, 149, 60, 0.6); }
|
|
||||||
|
|
||||||
/* grow_input*/
|
|
||||||
ul[id$="_grow_input"] { margin-left:0; }
|
|
||||||
|
|
||||||
/* generate_form*/
|
|
||||||
#generate_form .control-group { margin-bottom:0; }
|
|
||||||
|
|
||||||
#generate_form .control-label { text-align:left; }
|
|
||||||
|
|
||||||
#generate_form .controls { padding-left:18px; margin-left:0; }
|
|
||||||
|
|
||||||
#generate_form .control-label.empty { width:142px; }
|
|
||||||
|
|
||||||
.step [rel="pagebookmark"]>.hashstick { display:none; }
|
|
||||||
|
|
||||||
/*generated page*/
|
|
||||||
.generated iframe { border:1px inset #e3e3e3; }
|
|
||||||
|
|
||||||
/*=============================================================
|
|
||||||
ERRORS TABLE / TICKET PAGE
|
|
||||||
==============================================================*/
|
|
||||||
.tablebar { margin:7px 0 7px 0; }
|
|
||||||
|
|
||||||
.tablebar input { margin-right:27px; }
|
|
||||||
|
|
||||||
.tablebar span { vertical-align:bottom; }
|
|
||||||
|
|
||||||
.table th { background: #e9e9e9; background: -moz-linear-gradient(top, #FAFAFA 0%, #E9E9E9 100%); background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #FAFAFA), color-stop(100%, #E9E9E9)); background: -webkit-linear-gradient(top, #FAFAFA 0%, #E9E9E9 100%); background: -o-linear-gradient(top, #FAFAFA 0%, #E9E9E9 100%); background: -ms-linear-gradient(top, #FAFAFA 0%, #E9E9E9 100%); background: linear-gradient(top, #FAFAFA 0%, #E9E9E9 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FAFAFA', endColorstr='#E9E9E9'); -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#FAFAFA', endColorstr='#E9E9E9')"; /*font-size:10px; color:#444; text-transform:uppercase;*/ }
|
|
||||||
|
|
||||||
td.cbcentered, th.cbcentered { text-align:center; }
|
|
||||||
|
|
||||||
td.cbcentered>input, th.cbcentered>input { margin-top:-1px; }
|
|
||||||
|
|
||||||
.traceback div { }
|
|
||||||
|
|
||||||
.ticket_code>table td:first-child { border-left:0; }
|
|
||||||
|
|
||||||
#trck_errors table td pre { word-break:normal; white-space:pre; }
|
|
||||||
|
|
||||||
.inspect pre, .errorsource pre { word-break:normal; white-space:pre; }
|
|
||||||
|
|
||||||
.ticket_code { background-color:lightyellow; }
|
|
||||||
|
|
||||||
.ticket_code table, .ticket_code td { border-width:0px; border-collapse:collapse; width:100%; }
|
|
||||||
|
|
||||||
.ticket_code tbody tr:hover td { background-color:transparent; }
|
|
||||||
|
|
||||||
/*=============================================================
|
|
||||||
FLOT GRAPHS
|
|
||||||
==============================================================*/
|
|
||||||
.about #placeholder { width:auto; max-width:600px; height:300px; position:relative; margin:0 auto; /* for centering*/ }
|
|
||||||
|
|
||||||
/*=============================================================
|
|
||||||
THE GRID
|
|
||||||
==============================================================*/
|
|
||||||
#w2p_query_panel { min-width:20px; min-height:20px; padding:10px; margin-top:1em; background-color:#f5f5f5; border: 1px solid #e3e3e3; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); }
|
|
||||||
|
|
||||||
#w2p_query_panel select, #w2p_query_panel input { margin-bottom:0; margin-right:4px; }
|
|
||||||
|
|
||||||
.web2py_grid .hidden { visibility:visible; }
|
|
||||||
|
|
||||||
.qry_pnl_btns { display:inline-block; }
|
|
||||||
|
|
||||||
#w2p_grid_addbtn, #w2p_search-form { margin-top:9px; margin-bottom:9px; }
|
|
||||||
|
|
||||||
#w2p_search-form { margin-bottom:0; }
|
|
||||||
|
|
||||||
#w2p_search-form form { margin-bottom:0; }
|
|
||||||
|
|
||||||
/*----- translate page ---*/
|
|
||||||
.languageform input { margin-bottom:0; }
|
|
||||||
|
|
||||||
.languageform input.untranslated { background-color:#FC0; }
|
|
||||||
|
|
||||||
/*=============================================================
|
|
||||||
MASKED UPLOAD INPUT (NO BOOTSTRAP RELATED)
|
|
||||||
==============================================================*/
|
|
||||||
#appupdate_file.masked {
|
|
||||||
margin: 0;
|
|
||||||
opacity: 0;
|
|
||||||
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; /* IE 8 */
|
|
||||||
filter: alpha(opacity=0); /* IE 7 */
|
|
||||||
font-size: 100px;
|
|
||||||
position: absolute;
|
|
||||||
top: 0;
|
|
||||||
right: 0;
|
|
||||||
z-index: 410;
|
|
||||||
}
|
|
||||||
|
|
||||||
#fileselect {
|
|
||||||
padding: 4px 6px;
|
|
||||||
border: 1px solid #ccc;
|
|
||||||
border-radius: 4px;
|
|
||||||
color: #555;
|
|
||||||
cursor: default;
|
|
||||||
position: relative;
|
|
||||||
z-index: 400;
|
|
||||||
font-size: 14px;
|
|
||||||
background-color: #fff;
|
|
||||||
margin-bottom: 10px;
|
|
||||||
overflow: hidden;
|
|
||||||
}
|
|
||||||
|
|
||||||
#fileselect span {
|
|
||||||
position: absolute;
|
|
||||||
left: 6px;
|
|
||||||
top: 4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.uploadbtn {
|
|
||||||
position: absolute;
|
|
||||||
top: 3px;
|
|
||||||
right: 3px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.txtPlaceholder {
|
|
||||||
font-style: italic;
|
|
||||||
color: #ccc;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*=============================================================
|
|
||||||
EDIT PAGE SLIDING FILES MENU
|
|
||||||
==============================================================*/
|
|
||||||
@media (max-width: 979px) {
|
|
||||||
body.edit div#header {position:relative; z-index: 1030 !important;}
|
|
||||||
}
|
|
||||||
|
|
||||||
#editor_area, #edit_placeholder {
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#editor_area {
|
|
||||||
position: relative;
|
|
||||||
box-sizing: border-box;
|
|
||||||
}
|
|
||||||
|
|
||||||
#files {
|
|
||||||
width: auto;
|
|
||||||
height: 100%;
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
position: fixed;
|
|
||||||
top: 0px;
|
|
||||||
left: 0px;
|
|
||||||
z-index: 1031;
|
|
||||||
border-right: 3px solid #000;
|
|
||||||
/* animation (it doesn't work in IE<10) */
|
|
||||||
-moz-transition: all 0.4s;
|
|
||||||
-webkit-transition: all 0.4s;
|
|
||||||
-o-transition: all 0.4s;
|
|
||||||
transition: all 0.4s;
|
|
||||||
}
|
|
||||||
|
|
||||||
#files:hover, #files:focus {
|
|
||||||
left: 0px !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
#files, .files-toggle {
|
|
||||||
background: #1b1b1b;
|
|
||||||
opacity: 0.98;
|
|
||||||
}
|
|
||||||
|
|
||||||
.files-toggle {
|
|
||||||
width: 18px;
|
|
||||||
height: 86px;
|
|
||||||
border-radius: 0px 4px 4px 0px;
|
|
||||||
color: #999;
|
|
||||||
position: absolute;
|
|
||||||
top: 60px;
|
|
||||||
right: -18px;
|
|
||||||
cursor: default;
|
|
||||||
}
|
|
||||||
|
|
||||||
.arrow {
|
|
||||||
display: block;
|
|
||||||
position: absolute;
|
|
||||||
top: 8px;
|
|
||||||
width: 18px;
|
|
||||||
height: 70px;
|
|
||||||
background: url(../images/files_toggle.png) no-repeat;
|
|
||||||
}
|
|
||||||
|
|
||||||
.files-menu {
|
|
||||||
height: 100%;
|
|
||||||
overflow: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
#filelist {
|
|
||||||
position: relative;
|
|
||||||
top: 60px;
|
|
||||||
padding-bottom: 60px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#filelist li {
|
|
||||||
padding-right: 8px;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
#filelist li>a {
|
|
||||||
text-shadow: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*=============================================================
|
|
||||||
MEDIA QUERIES
|
|
||||||
==============================================================*/
|
|
||||||
@media (max-width: 800px) { .step [rel="pagebookmark"]>.hashstick { /*top:-54px;*/ display:block; }
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (max-width: 767px) { [rel="pagebookmark"]>.hashstick { top:0; }
|
|
||||||
|
|
||||||
/*-----------------------------------
|
|
||||||
main
|
|
||||||
-------------------------------------*/
|
|
||||||
#main { margin-top:0; }
|
|
||||||
|
|
||||||
/*-----------------------------------
|
|
||||||
footer
|
|
||||||
-------------------------------------*/
|
|
||||||
#footer { margin-left: -20px; margin-right: -20px; padding-left: 20px; padding-right: 20px; }
|
|
||||||
|
|
||||||
/*-----------------------------------
|
|
||||||
errors page
|
|
||||||
-------------------------------------*/
|
|
||||||
#trck_errors { table-layout:fixed; }
|
|
||||||
|
|
||||||
#trck_errors .column1 { width:20px; }
|
|
||||||
|
|
||||||
#trck_errors .column2 { width:45px; }
|
|
||||||
|
|
||||||
#trck_errors .column3 { width:150px; }
|
|
||||||
|
|
||||||
#trck_errors .columnN { width:55px; }
|
|
||||||
|
|
||||||
#trck_errors .columnN1 { width:138px; }
|
|
||||||
|
|
||||||
.ticket_code, .inspect.resp1, .inspect.controls pre, .errorsource { width:100%; overflow:auto; }
|
|
||||||
|
|
||||||
.ticket_code>table { width:100%; }
|
|
||||||
|
|
||||||
.celled { width:320px; }
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (max-width: 480px) { .qry_pnl_btns { display:block; margin-top:4px; }
|
|
||||||
|
|
||||||
/*-----------------------------------
|
|
||||||
wizard
|
|
||||||
-------------------------------------*/
|
|
||||||
#generate_form .control-label { float:left; width:160px; padding-top:5px; }
|
|
||||||
|
|
||||||
.inspect>code { display:block; white-space:normal; }
|
|
||||||
|
|
||||||
.li-controls { }
|
|
||||||
|
|
||||||
.celled { width:165px; }
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/*-----------------------------------
|
|
||||||
miscellaneous
|
|
||||||
-------------------------------------*/
|
|
||||||
h4.editableapp, h4.currentapp { padding: 5px 0 5px 54px; display: inline; }
|
|
||||||
|
|
||||||
h4.editableapp { background: #fff url(../images/folder.png) no-repeat; }
|
|
||||||
|
|
||||||
h4.currentapp { background: #fff url(../images/folder_locked.png) no-repeat; }
|
|
||||||
|
|
||||||
.w2p_flash { position:fixed; width:50%; top:49px; left:25%; right:25%; cursor:default; text-align:center; z-index:5620; }
|
|
||||||
span#closeflash {position:absolute; top:1px; right:-1px; font-size:150%; border:1px solid black; border-color: transparent transparent #fbeed5 #fbeed5; border-radius: 0 0 0 4px; width:22px; }
|
|
||||||
span#closeflash:hover {font-weight:bold; cursor:pointer; }
|
|
||||||
|
|
||||||
table.twitter{ background-color: transparent; }
|
|
||||||
table.twitter tr td {vertical-align: top; padding: 5px; }
|
|
||||||
table.twitter tr { border-bottom: 1px solid #a0a0a0; }
|
|
||||||
|
|
||||||
div.error_wrapper {margin-top:-10px; margin-bottom:8px; padding-left:2px; color:#d62e2b; }
|
|
||||||
|
|
||||||
.twitter-timeline >iframe{padding: 1em 0;}
|
|
||||||
@@ -1,7 +1,11 @@
|
|||||||
.calendar{z-index:99;position:relative;display:none;background:#fff;border:2px solid #000;font-size:11px;color:#000;cursor:default;font-family:Arial,Helvetica,sans-serif;
|
.calendar {z-index:2000;position:relative;margin-top:140px;display:none;background-color:white;border:1px solid #000;color:#000;cursor:default;box-shadow:0 0 10px #666}.calendar * {text-align: center;font-size:10px!important}
|
||||||
border-radius: 10px;
|
.calendar table {border-collapse:collapse}
|
||||||
-moz-border-radius: 10px;
|
.calendar tbody tr:hover {background-color:#fbf6d9}
|
||||||
-webkit-border-radius: 10px;
|
.calendar td, th {padding:5px; vertical-align:top; text-align:left; border:0}
|
||||||
}.calendar table{margin:0px;font-size:11px;color:#000;cursor:default;font-family:tahoma,verdana,sans-serif;}.calendar .button{text-align:center;padding:1px;color:#fff;background:#000;}.calendar .nav{background:#000;color:#fff}.calendar thead .title{font-weight:bold;padding:1px;background:#000;color:#fff;text-align:center;}.calendar thead .name{padding:2px;text-align:center;background:#bbb;}.calendar thead .weekend{color:#f00;}.calendar thead .hilite {background-color:#666;}.calendar thead .active{padding:2px 0 0 2px;background-color:#c4c0b8;}.calendar tbody .day{width:2em;text-align:right;padding:2px 4px 2px 2px;}.calendar tbody .day.othermonth{color:#aaa;}.calendar tbody .day.othermonth.oweekend{color:#faa;}.calendar table .wn{padding:2px 3px 2px 2px;background:#bbb;}.calendar tbody .rowhilite td{background:#ddd;}.calendar tbody td.hilite{background:#bbb;}.calendar tbody td.active{background:#bbb;}.calendar tbody td.selected{font-weight:bold;background:#ddd;}.calendar tbody td.weekend{color:#f00;}.calendar tbody td.today{font-weight:bold;color:#00f;}.calendar tbody .disabled{color:#999;}.calendar tbody .emptycell{visibility:hidden;}.calendar tbody .emptyrow{display:none;}.calendar tfoot .ttip{background:#bbb;padding:1px;background:#000;color:#fff;text-align:center;}.calendar tfoot .hilite{background:#ddd;}.calendar tfoot .active{}.calendar .combo{position:absolute;display:none;width:4em;top:0;left:0;cursor:default;background:#e4e0d8;padding:1px;z-index:100;}.calendar .combo .label,.calendar .combo .label-IEfix{text-align:center;padding:1px;}.calendar .combo .label-IEfix{width:4em;}.calendar .combo .active{background:#c4c0b8;}.calendar .combo .hilite{background:#048;color:#fea;}.calendar td.time{padding:1px 0;text-align:center;background-color:#bbb;}.calendar td.time .hour,.calendar td.time .minute,.calendar td.time .ampm{padding:0 3px 0 4px;font-weight:bold;}.calendar td.time .ampm{text-align:center;}.calendar td.time .colon{padding:0 2px 0 3px;font-weight:bold;}.calendar td.time span.hilite{}.calendar td.time span.active{border-color:#f00;background-color:#000;color:#0f0;}.hour,.minute{font-size:2em;}
|
.calendar thead tr {background-color:#f1f1f1}
|
||||||
|
.calendar tbody tr {border-bottom:2px solid #f1f1f1}
|
||||||
|
.calendar th {font-weight:string; padding:5px; vertical-align:bottom; text-align:left}
|
||||||
|
.calendar thead th {vertical-align:bottom}
|
||||||
|
.calendar tbody th {vertical-align:top}
|
||||||
|
|
||||||
#CP_hourcont{z-index:99;padding:0;position:absolute;border:1px dashed #666;background-color:#eee;display:none;}#CP_minutecont{z-index:99;background-color:#ddd;padding:1px;position:absolute;width:45px;display:none;}.floatleft{float:left;}.CP_hour{z-index:99;padding:1px;font-family:Arial,Helvetica,sans-serif;font-size:9px;white-space:nowrap;cursor:pointer;width:35px;}.CP_minute{z-index:99;padding:1px;font-family:Arial,Helvetica,sans-serif;font-size:9px;white-space:nowrap;cursor:pointer;width:auto;}.CP_over{background-color:#fff;z-index:99}
|
#CP_hourcont{z-index:2000;padding:0;position:absolute;border:1px dashed #666;background-color:#eee;display:none;}#CP_minutecont{z-index:2000;background-color:#ddd;padding:1px;position:absolute;width:45px;display:none;}.floatleft{float:left;}.CP_hour{z-index:2000;padding:1px;font-family:Arial,Helvetica,sans-serif;font-size:9px;white-space:nowrap;cursor:pointer;width:35px;}.CP_minute{z-index:2000;padding:1px;font-family:Arial,Helvetica,sans-serif;font-size:9px;white-space:nowrap;cursor:pointer;width:auto;}.CP_over{background-color:#fff;z-index:2000}
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 8.6 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 12 KiB |
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,33 +0,0 @@
|
|||||||
// this code improves bootstrap menus and adds dropdown support
|
|
||||||
jQuery(function(){
|
|
||||||
jQuery('.nav>li>a').each(function(){
|
|
||||||
if(jQuery(this).parent().find('ul').length)
|
|
||||||
jQuery(this).attr({'class':'dropdown-toggle','data-toggle':'dropdown'}).append('<b class="caret"></b>');
|
|
||||||
});
|
|
||||||
jQuery('.nav li li').each(function(){
|
|
||||||
if(jQuery(this).find('ul').length)
|
|
||||||
jQuery(this).addClass('dropdown-submenu');
|
|
||||||
});
|
|
||||||
function adjust_height_of_collapsed_nav() {
|
|
||||||
var cn = jQuery('div.collapse');
|
|
||||||
if (cn.get(0)) {
|
|
||||||
var cnh = cn.get(0).style.height;
|
|
||||||
if (cnh>'0px'){
|
|
||||||
cn.css('height','auto');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function hoverMenu(){
|
|
||||||
jQuery('ul.nav a.dropdown-toggle').parent().hover(function(){
|
|
||||||
adjust_height_of_collapsed_nav();
|
|
||||||
var mi = jQuery(this).addClass('open');
|
|
||||||
mi.children('.dropdown-menu').stop(true, true).delay(200).fadeIn(400);
|
|
||||||
}, function(){
|
|
||||||
var mi = jQuery(this);
|
|
||||||
mi.children('.dropdown-menu').stop(true, true).delay(200).fadeOut(function(){mi.removeClass('open')});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
hoverMenu(); // first page load
|
|
||||||
jQuery(window).resize(hoverMenu); // on resize event
|
|
||||||
jQuery('ul.nav li.dropdown a').click(function(){window.location=jQuery(this).attr('href');});
|
|
||||||
});
|
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
{{extend 'layout.html'}}
|
{{extend 'layout.html'}}
|
||||||
{{block sectionclass}}about{{end}}
|
|
||||||
<!-- begin "about" block -->
|
<!-- begin "about" block -->
|
||||||
<h2>{{=T("About application")}} "{{=app}}"</h2>
|
<h2>{{=T("About application")}} "{{=app}}"</h2>
|
||||||
<h3>{{=T("About")}} {{=app}}</h3>
|
<h3>{{=T("About")}} {{=app}}</h3>
|
||||||
|
|||||||
@@ -9,19 +9,16 @@ def peekfile(path,file,vars={},title=None):
|
|||||||
return A(file.replace('\\\\','/'),_title=title,_href=URL('peek', args=args, vars=vars))
|
return A(file.replace('\\\\','/'),_title=title,_href=URL('peek', args=args, vars=vars))
|
||||||
def editfile(path,file,vars={}):
|
def editfile(path,file,vars={}):
|
||||||
args=(path,file) if 'app' in vars else (app,path,file)
|
args=(path,file) if 'app' in vars else (app,path,file)
|
||||||
return A(SPAN(T('Edit')),_class='button editbutton btn btn-mini',_href=URL('edit', args=args, vars=vars))
|
return A(T('Edit'),_class='btn small rounded black',_href=URL('edit', args=args, vars=vars))
|
||||||
def testfile(path,file):
|
def testfile(path,file):
|
||||||
return A(TAG[''](IMG(_src=URL('static', 'images/test_icon.png'), _alt=T('test')),
|
return A(I(_class="fa fa-cog"),**{
|
||||||
SPAN(T("Run tests in this file (to run all files, you may also use the button labelled 'test')"))),
|
'_class':'btn small rounded black',
|
||||||
_class='icon test',
|
'_data-tooltip':T("Run tests in this file (to run all files, you may also use the but\
|
||||||
_href=URL('test', args=(app, file)),
|
ton labelled 'test')")})
|
||||||
_rel="tooltip",
|
|
||||||
**{'_data-placement':'right',
|
|
||||||
'_data-original-title':T("Run tests in this file (to run all files, you may also use the button labelled 'test')")})
|
|
||||||
def editlanguagefile(path,file,vars={}):
|
def editlanguagefile(path,file,vars={}):
|
||||||
return A(SPAN(T('Edit')),_class='button editbutton btn btn-mini',_href=URL('edit_language', args=(app, path, file), vars=vars))
|
return A(T('Edit'),_class='button editbutton btn rounded small',_href=URL('edit_language', args=(app, path, file), vars=vars))
|
||||||
def editpluralsfile(path,file,vars={}):
|
def editpluralsfile(path,file,vars={}):
|
||||||
return A(SPAN(T('Edit')),_class='button editbutton btn btn-mini',_href=URL('edit_plurals', args=(app, path, file), vars=vars))
|
return A(T('Edit'),_class='button editbutton btn rounded small',_href=URL('edit_plurals', args=(app, path, file), vars=vars))
|
||||||
def file_upload_form(location, anchor=None):
|
def file_upload_form(location, anchor=None):
|
||||||
form=FORM(
|
form=FORM(
|
||||||
LABEL(T("upload file:")),
|
LABEL(T("upload file:")),
|
||||||
@@ -59,13 +56,8 @@ def upload_plugin_form(app, anchor=None):
|
|||||||
return form
|
return form
|
||||||
def deletefile(arglist, vars={}):
|
def deletefile(arglist, vars={}):
|
||||||
vars.update({'sender':request.function+'/'+app})
|
vars.update({'sender':request.function+'/'+app})
|
||||||
return A(TAG[''](IMG(_src=URL('static', 'images/delete_icon.png')),
|
return A(I(_class='fa fa-trash'),_class="red rounded small btn",
|
||||||
SPAN(T('Delete this file (you will be asked to confirm deletion)'))),
|
_href=URL('delete',args=arglist,vars=vars))
|
||||||
_href=URL('delete',args=arglist,vars=vars),
|
|
||||||
_class='icon delete',
|
|
||||||
_rel="tooltip",
|
|
||||||
**{'_data-placement':'right',
|
|
||||||
'_data-original-title':T('Delete this file (you will be asked to confirm deletion)')})
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
{{block sectionclass}}design{{end}}
|
{{block sectionclass}}design{{end}}
|
||||||
@@ -74,64 +66,66 @@ def deletefile(arglist, vars={}):
|
|||||||
<h2>{{=T("Edit application")}} "{{=A(app,_href=URL(app,'default','index'),_target="_blank")}}"</h2>
|
<h2>{{=T("Edit application")}} "{{=A(app,_href=URL(app,'default','index'),_target="_blank")}}"</h2>
|
||||||
|
|
||||||
<!-- COLLAPSE/JUMP-TO BUTTONS -->
|
<!-- COLLAPSE/JUMP-TO BUTTONS -->
|
||||||
<div class="right-full controls">
|
<div class="container">
|
||||||
<p class="buttons-row">
|
<div class="fill">
|
||||||
{{=searchbox('search')}}
|
<input placeholder="filter" id="search" style="left:100px"/>
|
||||||
<a class="button special btn btn-inverse" href="#" onclick="jQuery('h3>span').click();return false"><span>{{=T("collapse/expand all")}}</span></a>
|
</div>
|
||||||
<span class="buttongroup">
|
<div class="fill">
|
||||||
{{=button('#models', T("models"))}}
|
<div class="padded">
|
||||||
{{=button('#controllers', T("controllers"))}}
|
<a class="btn rounded small black" href="#" onclick="jQuery('.accordion>[type=checkbox]').click();return false">{{=T("collapse/expand all")}}</a>
|
||||||
{{=button('#views', T("views"))}}
|
<a href="#models" class="btn small rounded orange">{{=T("models")}}</a>
|
||||||
{{=button('#languages', T("languages"))}}
|
<a href="#controllers" class="btn small rounded orange">{{=T("controllers")}}</a>
|
||||||
{{=button('#static', T("static"))}}
|
<a href="#views" class="btn small rounded orange">{{=T("views")}}</a>
|
||||||
{{=button('#modules', T("modules"))}}
|
<a href="#models" class="btn small rounded orange">{{=T("languages")}}</a>
|
||||||
{{=button('#private', T("private files"))}}
|
<a href="#static" class="btn small rounded orange">{{=T("static")}}</a>
|
||||||
{{=button('#plugins', T("plugins"))}}
|
<a href="#models" class="btn small rounded orange">{{=T("modules")}}</a>
|
||||||
</span>
|
<a href="#private" class="btn small rounded orange">{{=T("private files")}}</a>
|
||||||
</p>
|
<a href="#plugins" class="btn small rounded orange">{{=T("plugins")}}</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- MODELS -->
|
<!-- MODELS -->
|
||||||
<h3 id="_models" rel="pagebookmark">
|
<h5 id="_models">
|
||||||
<span class="component" onclick="collapse('models_inner');">{{=T("Models")}}</span>
|
<label class="component" for="models_inner" data-tooltip="{{=T('The data representation, define database tables and sets')}}">{{=T("Models")}}</label>
|
||||||
<a href="#models" rel="tooltip" data-placement="right" data-original-title="{{=T('The data representation, define database tables and sets')}}">
|
</h5>
|
||||||
{{=helpicon()}}
|
<div class="accordion">
|
||||||
<span>{{=T("The data representation, define database tables and sets")}}</span>
|
<input type="checkbox" id="models_inner" checked>
|
||||||
</a><span id="models" class="hashstick"> </span><a href="#" class="tophashlink btn btn-mini btn-warning"><span>top</span></a>
|
<div>
|
||||||
</h3>
|
<a href="#" class="right btn rounded small yellow">top</a>
|
||||||
<div id="models_inner" class="component_contents">
|
|
||||||
{{if not models:}}<p><strong>{{=T("There are no models")}}</strong></p>{{else:}}
|
{{if not models:}}<p><strong>{{=T("There are no models")}}</strong></p>{{else:}}
|
||||||
<div class="controls comptools">
|
<div class="controls comptools">
|
||||||
{{=button(URL(a=app,c='appadmin',f='index'), T('database administration'))}}
|
{{=button(URL(a=app,c='appadmin',f='index'), T('database administration'))}}
|
||||||
{{if os.access(os.path.join(request.folder,'..',app,'databases','sql.log'),os.R_OK):}}
|
{{if os.access(os.path.join(request.folder,'..',app,'databases','sql.log'),os.R_OK):}}
|
||||||
{{=button(URL('peek/%s/databases/sql.log'%app), 'sql.log')}}
|
{{=button(URL('peek/%s/databases/sql.log'%app), 'sql.log')}}
|
||||||
{{pass}}
|
{{pass}}
|
||||||
{{=button(URL(a=app, c='appadmin',f='graph_model'), T('graph model'))}}
|
{{=button(URL(a=app, c='appadmin',f='graph_model'), T('graph model'))}}
|
||||||
</div>
|
</div>
|
||||||
<ul class="unstyled act_edit">
|
<ul class="unstyled act_edit">
|
||||||
{{for m in models:}}
|
{{for m in models:}}
|
||||||
{{id="models__"+m.replace('.','__')}}
|
{{id="models__"+m.replace('.','__')}}
|
||||||
<li id="{{='_'+id}}" rel="pagebookmark"><span id="{{=id}}" class="hashstick"> </span>
|
<li id="{{='_'+id}}"><span id="{{=id}}" class="hashstick"> </span>
|
||||||
<span class="filetools controls">
|
<span class="filetools controls">
|
||||||
{{=editfile('models',m, dict(id=id))}}
|
{{=editfile('models',m, dict(id=id))}}
|
||||||
{{=deletefile([app, 'models', m], dict(id=id, id2='models'))}}
|
{{=deletefile([app, 'models', m], dict(id=id, id2='models'))}}
|
||||||
</span>
|
</span>
|
||||||
<span class="file">
|
<span class="file">
|
||||||
{{=peekfile('models',m, dict(id=id))}}
|
{{=peekfile('models',m, dict(id=id))}}
|
||||||
</span>
|
</span>
|
||||||
<span class="extras">
|
<span class="extras">
|
||||||
{{if len(defines[m]):}}{{=T("defines tables")}} {{pass}}{{=XML(', '.join([B(table).xml() for table in defines[m]]))}}
|
{{if len(defines[m]):}}{{=T("defines tables")}} {{pass}}{{=XML(', '.join([B(table).xml() for table in defines[m]]))}}
|
||||||
</span>
|
</span>
|
||||||
</li>
|
</li>
|
||||||
{{pass}}
|
{{pass}}
|
||||||
</ul>
|
</ul>
|
||||||
{{pass}}
|
{{pass}}
|
||||||
<div class="controls formfield">
|
<div class="silver rounded padded">
|
||||||
<button onclick="jQuery('#form1').slideToggle()" class="btn btn-mini">{{=T('Create')}}</button>
|
<button onclick="jQuery('#form1').slideToggle()" class="btn rounded small">{{=T('Create')}}</button>
|
||||||
<div id="form1" class="row-fluid" style="display:none">
|
<div id="form1" class="row-fluid" style="display:none">
|
||||||
<div class="span3">{{=file_create_form('%s/models/' % app, 'models')}}</div>
|
<div class="span3">{{=file_create_form('%s/models/' % app, 'models')}}</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- FIND CONTROLLER FUNCTIONS -->
|
<!-- FIND CONTROLLER FUNCTIONS -->
|
||||||
@@ -141,163 +135,162 @@ for c in controllers: controller_functions+=[c[:-3]+'/%s.html'%x for x in functi
|
|||||||
}}
|
}}
|
||||||
|
|
||||||
<!-- CONTROLLERS -->
|
<!-- CONTROLLERS -->
|
||||||
<h3 id="_controllers" rel="pagebookmark">
|
<h5 id="_controllers">
|
||||||
<span class="component" onclick="collapse('controllers_inner');">{{=T("Controllers")}}</span>
|
<label class="component" for="controllers_inner" data-tooltip="{{=T('The application logic, each URL path is mapped in one exposed function in the controller')}}">{{=T("Controllers")}}</label>
|
||||||
<a href="#controllers" rel="tooltip" data-placement="right" data-original-title="{{=T('The application logic, each URL path is mapped in one exposed function in the controller')}}">
|
</h5>
|
||||||
{{=helpicon()}}
|
<div class="accordion">
|
||||||
<span>{{=T("The application logic, each URL path is mapped in one exposed function in the controller")}}</span>
|
<input type="checkbox" id="controllers_inner" checked>
|
||||||
</a><span id="controllers" class="hashstick"> </span><a href="#" class="tophashlink btn btn-mini btn-warning"><span>top</span></a>
|
<div>
|
||||||
</h3>
|
<a href="#" class="right btn rounded small yellow">top</a>
|
||||||
<div id="controllers_inner" class="component_contents">
|
|
||||||
{{if not controllers:}}<p><strong>{{=T("There are no controllers")}}</strong></p>{{else:}}
|
{{if not controllers:}}<p><strong>{{=T("There are no controllers")}}</strong></p>{{else:}}
|
||||||
<div class="controls comptools">
|
<div class="controls comptools">
|
||||||
{{=button(URL(r=request,c='shell',f='index',args=app), T("shell"))}}
|
{{=button(URL(r=request,c='shell',f='index',args=app), T("shell"))}}
|
||||||
{{=button(URL('test',args=app), T("test"))}}
|
{{=button(URL('test',args=app), T("test"))}}
|
||||||
{{=button(URL('edit',args=[app,'cron','crontab']), T("crontab"))}}
|
{{=button(URL('edit',args=[app,'cron','crontab']), T("crontab"))}}
|
||||||
</div>
|
</div>
|
||||||
<ul class="unstyled act_edit">
|
<ul class="unstyled act_edit">
|
||||||
{{for c in controllers:}}
|
{{for c in controllers:}}
|
||||||
{{id="controllers__"+c.replace('.','__')}}
|
{{id="controllers__"+c.replace('.','__')}}
|
||||||
<li id="{{='_'+id}}" rel="pagebookmark"><span id="{{=id}}" class="hashstick"> </span>
|
<li id="{{='_'+id}}"><span id="{{=id}}" class="hashstick"> </span>
|
||||||
<span class="filetools controls">
|
<span class="filetools controls">
|
||||||
{{=editfile('controllers',c, dict(id=id))}}
|
{{=editfile('controllers',c, dict(id=id))}}
|
||||||
{{=deletefile([app, 'controllers', c], dict(id=id, id2='controllers'))}}
|
{{=deletefile([app, 'controllers', c], dict(id=id, id2='controllers'))}}
|
||||||
{{=testfile('controllers',c)}}
|
{{=testfile('controllers',c)}}
|
||||||
</span>
|
</span>
|
||||||
<span class="file">
|
<span class="file">
|
||||||
{{=peekfile('controllers',c, dict(id=id))}}
|
{{=peekfile('controllers',c, dict(id=id))}}
|
||||||
</span>
|
</span>
|
||||||
<span class="extras celled">
|
<span class="extras celled">
|
||||||
{{if functions[c]:}}{{=T("exposes")}}{{pass}} {{=XML(', '.join([A(f,_href=URL(a=app,c=c[:-3],f=f)).xml() for f in functions[c]]))}}
|
{{if functions[c]:}}{{=T("exposes")}}{{pass}} {{=XML(', '.join([A(f,_href=URL(a=app,c=c[:-3],f=f)).xml() for f in functions[c]]))}}
|
||||||
</span>
|
</span>
|
||||||
</li>
|
</li>
|
||||||
{{pass}}
|
{{pass}}
|
||||||
</ul>
|
</ul>
|
||||||
{{pass}}
|
{{pass}}
|
||||||
<div class="controls formfield">
|
<div class="silver rounded padded">
|
||||||
<button onclick="jQuery('#form2').slideToggle()" class="btn btn-mini">{{=T('Create')}}</button>
|
<button onclick="jQuery('#form2').slideToggle()" class="btn rounded small">{{=T('Create')}}</button>
|
||||||
<div id="form2" class="row-fluid" style="display:none">
|
<div id="form2" class="row-fluid" style="display:none">
|
||||||
<div class="span3">{{=file_create_form('%s/controllers/' % app, 'controllers')}}</div>
|
<div class="span3">{{=file_create_form('%s/controllers/' % app, 'controllers')}}</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- VIEWS -->
|
<!-- VIEWS -->
|
||||||
<h3 id="_views" rel="pagebookmark">
|
<h5 id="_views">
|
||||||
<span class="component" onclick="collapse('views_inner');">{{=T("Views")}}</span>
|
<label class="component" for="views_inner" data-tooltip="{{=T('The presentations layer, views are also known as templates')}}">{{=T("Views")}}</label>
|
||||||
<a href="#views" rel="tooltip" data-placement="right" data-original-title="{{=T('The presentations layer, views are also known as templates')}}">
|
</h5>
|
||||||
{{=helpicon()}}
|
<div class="accordion">
|
||||||
<span>{{=T("The presentations layer, views are also known as templates")}}</span>
|
<input type="checkbox" id="views_inner" checked>
|
||||||
</a><span id="views" class="hashstick"> </span><a href="#" class="tophashlink btn btn-mini btn-warning"><span>top</span></a>
|
<div>
|
||||||
</h3>
|
<a href="#" class="right btn rounded small yellow">top</a>
|
||||||
<div id="views_inner" class="component_contents">
|
{{if not views:}}<p><strong>{{=T("There are no views")}}</strong></p>{{else:}}
|
||||||
{{if not views:}}<p><strong>{{=T("There are no views")}}</strong></p>{{else:}}
|
|
||||||
<div class="controls comptools">
|
<div class="controls comptools">
|
||||||
{{=button(LAYOUTS_APP, T("Download layouts from repository"))}}
|
{{=button(LAYOUTS_APP, T("Download layouts from repository"))}}
|
||||||
</div>
|
</div>
|
||||||
<ul class="unstyled act_edit">
|
<ul class="unstyled act_edit">
|
||||||
{{for c in views:}}
|
{{for c in views:}}
|
||||||
{{id="views__"+c.replace('/','__').replace('.','__')}}
|
{{id="views__"+c.replace('/','__').replace('.','__')}}
|
||||||
<li id="{{='_'+id}}" rel="pagebookmark"><span id="{{=id}}" class="hashstick"> </span>
|
<li id="{{='_'+id}}"><span id="{{=id}}" class="hashstick"> </span>
|
||||||
<span class="filetools controls">
|
<span class="filetools controls">
|
||||||
{{=editfile('views',c, dict(id=id))}}
|
{{=editfile('views',c, dict(id=id))}}
|
||||||
{{=deletefile([app, 'views', c], dict(id=id, id2='views'))}}
|
{{=deletefile([app, 'views', c], dict(id=id, id2='views'))}}
|
||||||
</span>
|
</span>
|
||||||
<span class="file">
|
<span class="file">
|
||||||
{{=peekfile('views',c, dict(id=id))}}
|
{{=peekfile('views',c, dict(id=id))}}
|
||||||
</span>
|
</span>
|
||||||
<span class="extras celled celled-one">
|
<span class="extras celled celled-one">
|
||||||
{{if c in extend:}}{{=T("extends")}} <b>{{=extend[c]}}</b> {{pass}}
|
{{if c in extend:}}{{=T("extends")}} <b>{{=extend[c]}}</b> {{pass}}
|
||||||
{{if include[c]:}}{{=T("includes")}} {{pass}}{{=XML(', '.join([B(f).xml() for f in include[c]]))}}
|
{{if include[c]:}}{{=T("includes")}} {{pass}}{{=XML(', '.join([B(f).xml() for f in include[c]]))}}
|
||||||
</span>
|
</span>
|
||||||
</li>
|
</li>
|
||||||
{{pass}}
|
{{pass}}
|
||||||
</ul>
|
</ul>
|
||||||
{{pass}}
|
{{pass}}
|
||||||
<div class="controls formfield">
|
<div class="silver rounded padded">
|
||||||
<button onclick="jQuery('#form3').slideToggle()" class="btn btn-mini">{{=T('Create')}}</button>
|
<button onclick="jQuery('#form3').slideToggle()" class="btn rounded small">{{=T('Create')}}</button>
|
||||||
<div id="form3" class="row-fluid" style="display:none">
|
<div id="form3" class="row-fluid" style="display:none">
|
||||||
<div class="span3">{{=file_create_form('%s/views/' % app, 'views')}}</div>
|
<div class="span3">{{=file_create_form('%s/views/' % app, 'views')}}</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- LANGUAGES -->
|
<!-- LANGUAGES -->
|
||||||
<h3 id="_languages" rel="pagebookmark">
|
<h5 id="_languages">
|
||||||
<span class="component" onclick="collapse('languages_inner');">{{=T("Languages")}}</span>
|
<label class="component" for="languages_inner" data-tooltip="{{=T('Translation strings for the application')}}">{{=T("Languages")}}</label>
|
||||||
<a href="#languages" rel="tooltip" data-placement="right" data-original-title="{{=T('Translation strings for the application')}}">
|
</h5>
|
||||||
{{=helpicon()}}
|
<div class="accordion">
|
||||||
<span>{{=T("Translation strings for the application")}}</span>
|
<input type="checkbox" id="languages_inner" checked>
|
||||||
</a><span id="languages" class="hashstick"> </span><a href="#" class="tophashlink btn btn-mini btn-warning"><span>top</span></a>
|
<div>
|
||||||
</h3>
|
<a href="#" class="right btn rounded small yellow">top</a>
|
||||||
<div id="languages_inner" class="component_contents">
|
|
||||||
{{if not languages:}}<p><strong>{{=T("There are no translators, only default language is supported")}}</strong></p>{{else:}}
|
{{if not languages:}}<p><strong>{{=T("There are no translators, only default language is supported")}}</strong></p>{{else:}}
|
||||||
<div class="controls comptools">
|
<div class="controls comptools">
|
||||||
{{=button(URL('update_languages/'+app), T('update all languages'))}}
|
{{=button(URL('update_languages/'+app), T('update all languages'))}}
|
||||||
</div>
|
</div>
|
||||||
<ul class="unstyled act_edit">
|
<ul class="unstyled act_edit">
|
||||||
{{for lang in sorted(languages):
|
{{for lang in sorted(languages):
|
||||||
file = lang+'.py'
|
file = lang+'.py'
|
||||||
id = "languages__"+file.replace('.','__')}}
|
id = "languages__"+file.replace('.','__')}}
|
||||||
<li id="{{='_'+id}}" rel="pagebookmark" class="li-row"><span id="{{=id}}" class="hashstick"> </span>
|
<li id="{{='_'+id}}" class="li-row"><span id="{{=id}}" class="hashstick"> </span>
|
||||||
<span class="li-controls">
|
<span class="li-controls">
|
||||||
<span class="filetools controls">
|
<span class="filetools controls">
|
||||||
{{=editlanguagefile('languages',file)}}
|
{{=editlanguagefile('languages',file)}}
|
||||||
{{=deletefile([app, 'languages', file], dict(id=id, id2='languages'))}}
|
{{=deletefile([app, 'languages', file], dict(id=id, id2='languages'))}}
|
||||||
</span>
|
</span>
|
||||||
<span class="">
|
<span class="">
|
||||||
{{=peekfile('languages',file, dict(id=id))}}
|
{{=peekfile('languages',file, dict(id=id))}}
|
||||||
</span>
|
</span>
|
||||||
</span> <!-- /li-row -->
|
</span> <!-- /li-row -->
|
||||||
<span class="extras celled">
|
<span class="extras celled">
|
||||||
(
|
(
|
||||||
{{=T("Plural-Forms:")}}
|
{{=T("Plural-Forms:")}}
|
||||||
{{p=languages[lang][3:7]}}
|
{{p=languages[lang][3:7]}}
|
||||||
{{if p[2] == 'default':}}
|
{{if p[2] == 'default':}}
|
||||||
<span class='error text-error'>{{=T("rules are not defined")}}</span> {{=T.M("(file **gluon/contrib/plural_rules/%s.py** is not found)",lang[:2])}}
|
<span class='error text-error'>{{=T("rules are not defined")}}</span> {{=T.M("(file **gluon/contrib/plural_rules/%s.py** is not found)",lang[:2])}}
|
||||||
{{else:}}
|
{{else:}}
|
||||||
{{if p[3] == 1:}}
|
{{if p[3] == 1:}}
|
||||||
{{=B(T("are not used"))}}
|
{{=B(T("are not used"))}}
|
||||||
{{else:}}
|
{{else:}}
|
||||||
{{pfile=p[0]}}
|
{{pfile=p[0]}}
|
||||||
{{if p[1]!=0:}}<span style="display:inline-block;margin-top:-10px;">
|
{{if p[1]!=0:}}<span style="display:inline-block;margin-top:-10px;">
|
||||||
<span class="filetools controls">
|
<span class="filetools controls">
|
||||||
{{=editpluralsfile('languages',pfile,dict(nplurals=p[3]))}}
|
{{=editpluralsfile('languages',pfile,dict(nplurals=p[3]))}}
|
||||||
</span>
|
</span>
|
||||||
<span class="file">
|
<span class="file">
|
||||||
{{=peekfile('languages',pfile,dict(id=id))}}
|
{{=peekfile('languages',pfile,dict(id=id))}}
|
||||||
</span></span>
|
</span></span>
|
||||||
{{else:}}
|
{{else:}}
|
||||||
<b>{{=T("are not used yet")}}</b>
|
<b>{{=T("are not used yet")}}</b>
|
||||||
{{pass}}
|
|
||||||
{{pass}}
|
|
||||||
{{pass}}
|
|
||||||
)
|
|
||||||
</span>
|
|
||||||
</li>
|
|
||||||
{{pass}}
|
{{pass}}
|
||||||
|
{{pass}}
|
||||||
|
{{pass}}
|
||||||
|
)
|
||||||
|
</span>
|
||||||
|
</li>
|
||||||
|
{{pass}}
|
||||||
</ul>
|
</ul>
|
||||||
{{pass}}
|
{{pass}}
|
||||||
<div class="controls formfield">
|
<div class="silver rounded padded">
|
||||||
<button onclick="jQuery('#form4').slideToggle()" class="btn btn-mini">{{=T('Create')}}</button>
|
<button onclick="jQuery('#form4').slideToggle()" class="btn rounded small">{{=T('Create')}}</button>
|
||||||
<div id="form4" class="row-fluid" style="display:none">
|
<div id="form4" class="row-fluid" style="display:none">
|
||||||
<div class="span3">{{=file_create_form('%s/languages/' % app, 'languages', T('(something like "it-it")'))}}</div>
|
<div class="span3">{{=file_create_form('%s/languages/' % app, 'languages', T('(something like "it-it")'))}}</div>
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- STATIC -->
|
<!-- STATIC -->
|
||||||
<h3 id="_static" rel="pagebookmark">
|
<h5 id="_static">
|
||||||
<span class="component" onclick="collapse('static_inner');">{{=T("Static")}}</span>
|
<label class="component" for="static_inner" data-tooltip="{{=T('These files are served without processing, your images go here')}}">{{=T("Static")}}</label>
|
||||||
<a href="#static" rel="tooltip" data-placement="right" data-original-title="{{=T('These files are served without processing, your images go here')}}">
|
</h5>
|
||||||
{{=helpicon()}}
|
<div class="accordion">
|
||||||
<span>{{=T("These files are served without processing, your images go here")}}</span>
|
<input type="checkbox" id="static_inner" checked>
|
||||||
</a><span id="static" class="hashstick"> </span><a href="#" class="tophashlink btn btn-mini btn-warning"><span>top</span></a>
|
<div>
|
||||||
</h3>
|
<a href="#" class="right btn rounded small yellow">top</a>
|
||||||
<div id="static_inner" class="component_contents">
|
|
||||||
{{if not statics:}}<p><strong>{{=T("There are no static files")}}</strong></p>{{else:}}
|
{{if not statics:}}<p><strong>{{=T("There are no static files")}}</strong></p>{{else:}}
|
||||||
<ul class="unstyled act_edit">
|
<ul class="unstyled act_edit">
|
||||||
{{
|
{{
|
||||||
path=[]
|
path=[]
|
||||||
for file in statics+['']:
|
for file in statics+['']:
|
||||||
items=file.split('/')
|
items=file.split('/')
|
||||||
@@ -308,88 +301,89 @@ for c in controllers: controller_functions+=[c[:-3]+'/%s.html'%x for x in functi
|
|||||||
path.append(file_path[len(path)])
|
path.append(file_path[len(path)])
|
||||||
thispath = regex_space.sub('-', 'static__'+'__'.join(path))
|
thispath = regex_space.sub('-', 'static__'+'__'.join(path))
|
||||||
}}
|
}}
|
||||||
<li class="folder"><i> </i>
|
<li class="folder"><i> </i>
|
||||||
<a href="javascript:collapse('{{=thispath}}');" class="file">{{=path[-1]}}/</a>
|
<a href="javascript:collapse('{{=thispath}}');" class="file">{{=path[-1]}}/</a>
|
||||||
<ul id="{{=thispath}}" style="display: none;" class="sublist">{{
|
<ul id="{{=thispath}}" style="display: none;" class="sublist">{{
|
||||||
else:
|
else:
|
||||||
path = path[:-1]
|
path = path[:-1]
|
||||||
}}
|
}}
|
||||||
</ul></li>
|
</ul>
|
||||||
|
</li>
|
||||||
{{
|
{{
|
||||||
pass
|
pass
|
||||||
pass
|
pass
|
||||||
if filename:
|
if filename:
|
||||||
}}
|
}}
|
||||||
<li>
|
<li>
|
||||||
<span class="filetools controls">
|
<span class="filetools controls">
|
||||||
{{=editfile('static',file, dict(id="static"))}} {{=deletefile([app,'static',file], dict(id="static",id2="static"))}}
|
{{=editfile('static',file, dict(id="static"))}} {{=deletefile([app,'static',file], dict(id="static",id2="static"))}}
|
||||||
</span>
|
</span>
|
||||||
<span class="file">
|
<span class="file">
|
||||||
<a href="{{=URL(a=app,c='static',f=file)}}">{{=filename}}</a>
|
<a href="{{=URL(a=app,c='static',f=file)}}">{{=filename}}</a>
|
||||||
</span>
|
</span>
|
||||||
</li>{{
|
</li>{{
|
||||||
pass
|
pass
|
||||||
pass
|
pass
|
||||||
}}
|
}}
|
||||||
</ul>
|
</ul>
|
||||||
{{pass}}
|
{{pass}}
|
||||||
<div class="controls formfield">
|
<div class="silver rounded padded">
|
||||||
<button onclick="jQuery('#form5').slideToggle()" class="btn btn-mini">{{=T('Create/Upload')}}</button>
|
<button onclick="jQuery('#form5').slideToggle()" class="btn rounded small">{{=T('Create/Upload')}}</button>
|
||||||
<div id="form5" class="row-fluid" style="display:none">
|
<div id="form5" class="row-fluid" style="display:none">
|
||||||
<div class="span3">{{=file_create_form('%s/static/' % app, 'static')}}<em>{{=T('or alternatively')}}</em></div>
|
<div class="span3">{{=file_create_form('%s/static/' % app, 'static')}}<em>{{=T('or alternatively')}}</em></div>
|
||||||
<div class="span3">{{=file_upload_form('%s/static/' % app, 'static')}}</div>
|
<div class="span3">{{=file_upload_form('%s/static/' % app, 'static')}}</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- MODULES -->
|
<!-- MODULES -->
|
||||||
<h3 id="_modules" rel="pagebookmark">
|
<h5 id="_modules">
|
||||||
<span class="component" onclick="collapse('modules_inner');">{{=T("Modules")}}</span>
|
<label class="component" for="modules_inner" data-tooltip="{{=T('Additional code for your application')}}">{{=T("Modules")}}</label>
|
||||||
<a href="#modules" rel="tooltip" data-placement="right" data-original-title="{{=T('Additional code for your application')}}">
|
</h5>
|
||||||
{{=helpicon()}}
|
<div class="accordion">
|
||||||
<span>{{=T("Additional code for your application")}}</span>
|
<input type="checkbox" id="modules_inner" checked>
|
||||||
</a><span id="modules" class="hashstick"> </span><a href="#" class="tophashlink btn btn-mini btn-warning"><span>top</span></a>
|
<div>
|
||||||
</h3>
|
<a href="#" class="right btn rounded small yellow">top</a>
|
||||||
<div id="modules_inner" class="component_contents">
|
|
||||||
{{if not modules:}}<p><strong>{{=T("There are no modules")}}</strong></p>{{else:}}
|
{{if not modules:}}<p><strong>{{=T("There are no modules")}}</strong></p>{{else:}}
|
||||||
<ul class="unstyled act_edit">
|
<ul class="unstyled act_edit">
|
||||||
{{for m in modules:}}
|
{{for m in modules:}}
|
||||||
{{id="modules__"+m.replace('/','__').replace('.','__')}}
|
{{id="modules__"+m.replace('/','__').replace('.','__')}}
|
||||||
<li id="{{='_'+id}}" rel="pagebookmark"><span id="{{=id}}" class="hashstick"> </span>
|
<li id="{{='_'+id}}"><span id="{{=id}}" class="hashstick"> </span>
|
||||||
<span class="filetols controls">
|
<span>
|
||||||
{{=editfile('modules',m,dict(id=id))}}
|
{{=editfile('modules',m,dict(id=id))}}
|
||||||
{{if m!='__init__.py':}}
|
{{if m!='__init__.py':}}
|
||||||
{{=deletefile([app, 'modules', m], dict(id=id, id2='modules'))}}
|
{{=deletefile([app, 'modules', m], dict(id=id, id2='modules'))}}
|
||||||
{{pass}}
|
{{pass}}
|
||||||
</span>
|
</span>
|
||||||
<span class="file">
|
<span class="file">
|
||||||
{{=peekfile('modules',m, dict(id=id))}}
|
{{=peekfile('modules',m, dict(id=id))}}
|
||||||
</span>
|
</span>
|
||||||
</li>
|
</li>
|
||||||
{{pass}}
|
{{pass}}
|
||||||
</ul>
|
</ul>
|
||||||
{{pass}}
|
{{pass}}
|
||||||
<div class="controls formfield">
|
<div class="silver rounded padded">
|
||||||
<button onclick="jQuery('#form6').slideToggle()" class="btn btn-mini">{{=T('Create/Upload')}}</button>
|
<button onclick="jQuery('#form6').slideToggle()" class="btn rounded small">{{=T('Create/Upload')}}</button>
|
||||||
<div id="form6" class="row-fluid" style="display:none">
|
<div id="form6" class="row-fluid" style="display:none">
|
||||||
<div class="span3">{{=file_create_form('%s/modules/' % app, 'modules')}}<em>{{=T('or alternatively')}}</em></div>
|
<div class="span3">{{=file_create_form('%s/modules/' % app, 'modules')}}<em>{{=T('or alternatively')}}</em></div>
|
||||||
<div class="span3">{{=file_upload_form('%s/modules/' % app, 'modules')}}</div>
|
<div class="span3">{{=file_upload_form('%s/modules/' % app, 'modules')}}</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- PRIVATE -->
|
<!-- PRIVATE -->
|
||||||
<h3 id="_private" rel="pagebookmark">
|
<h5 id="_private">
|
||||||
<span class="component" onclick="collapse('private_inner');">{{=T("Private files")}}</span>
|
<label class="component" for="private_inner" data-tooltip="{{=T('These files are not served, they are only available from within your app')}}">{{=T("Private files")}}</label>
|
||||||
<a href="#private" rel="tooltip" data-placement="right" data-original-title="{{=T('These files are not served, they are only available from within your app')}}">
|
</h5>
|
||||||
{{=helpicon()}}
|
<div class="accordion">
|
||||||
<span>{{=T("These files are not served, they are only available from within your app")}}</span>
|
<input type="checkbox" id="private_inner" checked>
|
||||||
</a><span id="private" class="hashstick"> </span><a href="#" class="tophashlink btn btn-mini btn-warning"><span>top</span></a>
|
<div>
|
||||||
</h3>
|
<a href="#" class="right btn rounded small yellow">top</a>
|
||||||
<div id="private_inner" class="component_contents">
|
|
||||||
{{if not privates:}}<p><strong>{{=T("There are no private files")}}</strong></p>{{else:}}
|
{{if not privates:}}<p><strong>{{=T("There are no private files")}}</strong></p>{{else:}}
|
||||||
<ul class="unstyled act_edit">
|
<ul class="unstyled act_edit">
|
||||||
{{
|
{{
|
||||||
path=[]
|
path=[]
|
||||||
for file in privates+['']:
|
for file in privates+['']:
|
||||||
items=file.split('/')
|
items=file.split('/')
|
||||||
@@ -400,72 +394,74 @@ for c in controllers: controller_functions+=[c[:-3]+'/%s.html'%x for x in functi
|
|||||||
path.append(file_path[len(path)])
|
path.append(file_path[len(path)])
|
||||||
thispath='private__'+'__'.join(path)
|
thispath='private__'+'__'.join(path)
|
||||||
}}
|
}}
|
||||||
<li class="folder">
|
<li class="folder">
|
||||||
<a href="javascript:collapse('{{=thispath}}');" class="file">{{=path[-1]}}/</a>
|
<a href="javascript:collapse('{{=thispath}}');" class="file">{{=path[-1]}}/</a>
|
||||||
<ul id="{{=thispath}}" style="display: none;" class="sublist">{{
|
<ul id="{{=thispath}}" style="display: none;" class="sublist">{{
|
||||||
else:
|
else:
|
||||||
path = path[:-1]
|
path = path[:-1]
|
||||||
}}
|
}}
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
{{
|
{{
|
||||||
pass
|
pass
|
||||||
pass
|
pass
|
||||||
if filename:
|
if filename:
|
||||||
}}
|
}}
|
||||||
<li>
|
<li>
|
||||||
<span class="filetools controls">
|
<span class="filetools controls">
|
||||||
{{=editfile('private',file, dict(id="private"))}} {{=deletefile([app,'private',file], dict(id="private",id2="private"))}}
|
{{=editfile('private',file, dict(id="private"))}} {{=deletefile([app,'private',file], dict(id="private",id2="private"))}}
|
||||||
</span>
|
</span>
|
||||||
<span class="file">
|
<span class="file">
|
||||||
{{=peekfile('private',file, dict(id="private"))}}
|
{{=peekfile('private',file, dict(id="private"))}}
|
||||||
</span>
|
</span>
|
||||||
</li>{{
|
</li>{{
|
||||||
pass
|
pass
|
||||||
pass
|
pass
|
||||||
}}
|
}}
|
||||||
{{pass}}
|
{{pass}}
|
||||||
</ul>
|
</ul>
|
||||||
<div class="controls formfield">
|
<div class="silver rounded padded">
|
||||||
<button onclick="jQuery('#form7').slideToggle()" class="btn btn-mini">{{=T('Create/Upload')}}</button>
|
<button onclick="jQuery('#form7').slideToggle()" class="btn rounded small">{{=T('Create/Upload')}}</button>
|
||||||
<div id="form7" class="row-fluid" style="display:none">
|
<div id="form7" class="row-fluid" style="display:none">
|
||||||
<div class="span3">{{=file_create_form('%s/private/' % app, 'private')}}<em>{{=T('or alternatively')}}</em></div>
|
<div class="span3">{{=file_create_form('%s/private/' % app, 'private')}}<em>{{=T('or alternatively')}}</em></div>
|
||||||
<div class="span3">{{=file_upload_form('%s/private/' % app, 'private')}}</div>
|
<div class="span3">{{=file_upload_form('%s/private/' % app, 'private')}}</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- PLUGINS -->
|
<!-- PLUGINS -->
|
||||||
<h3 id="_plugins" rel="pagebookmark">
|
<h5 id="_plugins">
|
||||||
<span class="component" onclick="collapse('plugins_inner');">{{=T("Plugins")}}</span>
|
<label class="component" for="plugins_inner" data-tooltip="{{=T('To create a plugin, name a file/folder plugin_[name]')}}">{{=T("Plugins files")}}</label>
|
||||||
<a href="#plugins" rel="tooltip" data-placement="right" data-original-title="{{=T('To create a plugin, name a file/folder plugin_[name]')}}">
|
</h5>
|
||||||
{{=helpicon()}}
|
<div class="accordion">
|
||||||
<span>{{=T("To create a plugin, name a file/folder plugin_[name]")}}</span>
|
<input type="checkbox" id="plugins_inner" checked>
|
||||||
</a><span id="plugins" class="hashstick"> </span><a href="#" class="tophashlink btn btn-mini btn-warning"><span>top</span></a>
|
<div>
|
||||||
</h3>
|
<a href="#" class="right btn rounded small yellow">top</a>
|
||||||
<div id="plugins_inner" class="component_contents">
|
|
||||||
{{if plugins:}}
|
{{if plugins:}}
|
||||||
<ul class="unstyled act_edit">
|
<ul class="unstyled act_edit">
|
||||||
{{for plugin in plugins:}}
|
{{for plugin in plugins:}}
|
||||||
{{id="plugins__"+plugin.replace('/','__').replace('.','__')}}
|
{{id="plugins__"+plugin.replace('/','__').replace('.','__')}}
|
||||||
<li id="{{=id}}">
|
<li id="{{=id}}">
|
||||||
{{=A('plugin_%s' % plugin, _class='file', _href=URL('plugin', args=[app, plugin], vars=dict(id=id, id2='plugins')))}}
|
{{=A('plugin_%s' % plugin, _class='file', _href=URL('plugin', args=[app, plugin], vars=dict(id=id, id2='plugins')))}}
|
||||||
</li>
|
</li>
|
||||||
{{pass}}
|
{{pass}}
|
||||||
</ul>
|
</ul>
|
||||||
{{else:}}
|
{{else:}}
|
||||||
<p><strong>{{=T('There are no plugins')}}</strong></p>
|
<p><strong>{{=T('There are no plugins')}}</strong></p>
|
||||||
{{pass}}
|
{{pass}}
|
||||||
<div class="controls comptools">
|
<div class="controls comptools">
|
||||||
{{=button(URL(c="default", f="plugins", args=[app,]), T('Download plugins from repository'))}}
|
{{=button(URL(c="default", f="plugins", args=[app,]), T('Download plugins from repository'))}}
|
||||||
</div>
|
</div>
|
||||||
<div class="controls formfield">
|
<div class="silver rounded padded">
|
||||||
<button onclick="jQuery('#form8').slideToggle()" class="btn btn-mini">{{=T('Upload')}}</button>
|
<button onclick="jQuery('#form8').slideToggle()" class="btn rounded small">{{=T('Upload')}}</button>
|
||||||
<div id="form8" class="row-fluid" style="display:none">
|
<div id="form8" class="row-fluid" style="display:none">
|
||||||
<div class="row-fluid">
|
<div class="row-fluid">
|
||||||
<div class="span3">{{=upload_plugin_form(app, 'plugins')}}</div>
|
<div class="span3">{{=upload_plugin_form(app, 'plugins')}}</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
@@ -490,6 +486,7 @@ jQuery(document).ready(function(){
|
|||||||
if(code==13) filter_files();
|
if(code==13) filter_files();
|
||||||
});
|
});
|
||||||
jQuery('#search_start').click(function(e){ filter_files(); });
|
jQuery('#search_start').click(function(e){ filter_files(); });
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
<!-- end "design" block -->
|
<!-- end "design" block -->
|
||||||
|
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ def file_create_form(location, anchor=None, helptext=""):
|
|||||||
<!-- begin "edit" block -->
|
<!-- begin "edit" block -->
|
||||||
{{
|
{{
|
||||||
def shortcut(combo, description):
|
def shortcut(combo, description):
|
||||||
return XML('<li class="span5"><span class="teletype-text">%s</span><span>%s</span></li>' % (combo, description))
|
return XML('<li><span class="teletype-text">%s</span><span>%s</span></li>' % (combo, description))
|
||||||
def listfiles(app, dir, regexp='.*\.py$'):
|
def listfiles(app, dir, regexp='.*\.py$'):
|
||||||
files = sorted(
|
files = sorted(
|
||||||
listdir(apath('%(app)s/%(dir)s/' % {'app':app, 'dir':dir}, r=request), regexp))
|
listdir(apath('%(app)s/%(dir)s/' % {'app':app, 'dir':dir}, r=request), regexp))
|
||||||
|
|||||||
@@ -1,23 +1,22 @@
|
|||||||
{{extend 'layout.html'}}
|
{{extend 'layout.html'}}
|
||||||
{{block sectionclass}}login{{end}}
|
|
||||||
<!-- begin "index" block -->
|
<!-- begin "index" block -->
|
||||||
<h2>web2py™ {{=T('Web Framework')}}</h2>
|
<h2>web2py™ {{=T('Web Framework')}}</h2>
|
||||||
<h3>{{=T('Login to the Administrative Interface')}}</h3>
|
<div class="twothirds padded lifted">
|
||||||
<div class="form row-fluid">
|
|
||||||
{{if request.is_https or request.is_local:}}
|
{{if request.is_https or request.is_local:}}
|
||||||
<form action="{{=URL(r=request)}}" method="post" class="span4 well">
|
<form action="{{=URL(r=request)}}" method="post" class="span4 well">
|
||||||
<label for="password">{{=T('Administrator Password:')}}</label>
|
<h5>{{=T('Login to the Administrative Interface')}}</h5>
|
||||||
<input type="password" name="password" id="password"/>
|
<label class="spaced" for="password">{{=T('Administrator Password:')}}</label>
|
||||||
<input type="hidden" name="send" value="{{=send}}"/>
|
<input class="spaced" type="password" name="password" id="password"/>
|
||||||
<div class="controls"><button type="submit" name="login" class="btn">{{=T('Login')}}</button></div>
|
<input class="spaced" type="hidden" name="send" value="{{=send}}"/>
|
||||||
</form>
|
<button class="spaced" type="submit" name="login">{{=T('Login')}}</button>
|
||||||
|
</form>
|
||||||
{{else:}}
|
{{else:}}
|
||||||
<p class="help span7 alert alert-block alert-warning">{{=T('ATTENTION: Login requires a secure (HTTPS) connection or running on localhost.')}}</p>
|
<p class="help span7 alert alert-block alert-warning">{{=T('ATTENTION: Login requires a secure (HTTPS) connection or running on localhost.')}}</p>
|
||||||
{{pass}}
|
{{pass}}
|
||||||
</div>
|
</div>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
jQuery(document).ready(function(){
|
jQuery(document).ready(function(){
|
||||||
jQuery("#password").focus();
|
jQuery("#password").focus();
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
<!-- end "index" block -->
|
<!-- end "index" block -->
|
||||||
@@ -1,19 +1,19 @@
|
|||||||
{{extend 'layout.html'}}
|
{{extend 'layout.html'}}
|
||||||
{{import os, glob}}
|
{{import os, glob}}
|
||||||
{{block sectionclass}}site{{end}}
|
|
||||||
<!-- begin "site" block -->
|
<!-- begin "site" block -->
|
||||||
<div class="row-fluid">
|
<div class="container">
|
||||||
<div class="applist f60 span7">
|
<div class="twothirds">
|
||||||
<div class="applist_inner">
|
<div class="padded">
|
||||||
<h2>{{=T("Installed applications")}}</h2>
|
<h2>{{=T("Installed applications")}}</h2>
|
||||||
<table width="100%" class="table">
|
<table>
|
||||||
{{for a in apps:}}
|
<tbody>
|
||||||
<tr>{{buttons = []}}
|
{{for a in apps:}}
|
||||||
<td>
|
<tr>{{buttons = []}}
|
||||||
|
<td>
|
||||||
{{if a==request.application:}}
|
{{if a==request.application:}}
|
||||||
<h4 class="currentapp">{{=a}} ({{=T('currently running')}})</h4>
|
<a class="btn rounded gray">{{=a}} ({{=T('currently running')}})</a>
|
||||||
{{else:}}
|
{{else:}}
|
||||||
<h4 class="editableapp">{{=A(a,_href=URL(a,'default','index'))}}</h4>
|
<a class="btn rounded orange" href="{{=URL(a,'default','index')}}">{{=a}}</a>
|
||||||
{{if MULTI_USER_MODE and db.app(name=a):}}(created by {{="%(first_name)s %(last_name)s" % db.auth_user[db.app(name=a).owner]}}){{pass}}
|
{{if MULTI_USER_MODE and db.app(name=a):}}(created by {{="%(first_name)s %(last_name)s" % db.auth_user[db.app(name=a).owner]}}){{pass}}
|
||||||
{{if not os.path.exists('applications/%s/compiled' % a):}}
|
{{if not os.path.exists('applications/%s/compiled' % a):}}
|
||||||
{{buttons.append((URL('design',args=a), T("Edit")))}}
|
{{buttons.append((URL('design',args=a), T("Edit")))}}
|
||||||
@@ -43,28 +43,30 @@
|
|||||||
{{if a!=request.application:}}
|
{{if a!=request.application:}}
|
||||||
{{buttons.append((URL('uninstall',args=a), T("Uninstall")))}}
|
{{buttons.append((URL('uninstall',args=a), T("Uninstall")))}}
|
||||||
{{pass}}
|
{{pass}}
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<div class="btn-group">
|
<ul class="menu">
|
||||||
<a class="btn dropdown-toggle" data-toggle="dropdown" href="#">
|
<li>
|
||||||
{{=T('Manage')}}
|
<a class="btn white rounded">{{=T('Manage')}}</a>
|
||||||
<span class="caret"></span>
|
<ul>
|
||||||
</a>
|
{{for link,name in buttons:}}
|
||||||
<ul class="dropdown-menu">
|
{{=LI(A(name,_href=link))}}
|
||||||
{{for link,name in buttons:}}
|
{{pass}}
|
||||||
{{=LI(A(name,_href=link))}}
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
{{=button_enable(URL('enable',args=a), a) if a!='admin' else ''}}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
{{pass}}
|
{{pass}}
|
||||||
</ul>
|
</tbody>
|
||||||
</div>
|
|
||||||
{{=button_enable(URL('enable',args=a), a) if a!='admin' else ''}}
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
{{pass}}
|
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
</div> <!-- /applist -->
|
</div> <!-- /applist -->
|
||||||
<div class="sidebar fl60 span5">
|
<div class="third black">
|
||||||
<div class="sidebar_inner controls well well-small">
|
<div class="padded">
|
||||||
<!-- CHANGE ADMIN PWD -->
|
<!-- CHANGE ADMIN PWD -->
|
||||||
<div class="pwdchange pull-right">
|
<div class="pwdchange pull-right">
|
||||||
{{if MULTI_USER_MODE:}}
|
{{if MULTI_USER_MODE:}}
|
||||||
@@ -77,77 +79,77 @@
|
|||||||
{{if is_manager():}}
|
{{if is_manager():}}
|
||||||
<!-- VERSION -->
|
<!-- VERSION -->
|
||||||
<div class="box">
|
<div class="box">
|
||||||
<h4>{{=T("Version")}}</h4>
|
<h6>{{=T("Version")}}</h6>
|
||||||
<p>
|
<p>
|
||||||
<tt>{{=myversion}}</tt><br/>
|
<tt>{{=myversion}}</tt><br/>
|
||||||
{{running_on = T("Running on %s", request.env.server_software or 'Unknown')}}
|
{{running_on = T("Running on %s", request.env.server_software or 'Unknown')}}
|
||||||
({{="%s, Python %s" % (running_on, myplatform)}})
|
({{="%s, Python %s" % (running_on, myplatform)}})
|
||||||
</p>
|
</p>
|
||||||
<p id="check_version" class="row-buttons">
|
<p id="check_version" class="row-buttons">
|
||||||
{{if session.check_version:}}
|
{{if session.check_version:}}
|
||||||
{{=T('Checking for upgrades...')}}
|
{{=T('Checking for upgrades...')}}
|
||||||
<script>ajax('{{=URL('check_version')}}',[],'check_version');</script>
|
<script>ajax('{{=URL('check_version')}}',[],'check_version');</script>
|
||||||
{{session.check_version=False}}
|
{{session.check_version=False}}
|
||||||
{{else:}}
|
{{else:}}
|
||||||
{{=button("javascript:ajax('"+URL('check_version')+"',[],'check_version')", T('Check for upgrades'))}}
|
{{=button("javascript:ajax('"+URL('check_version')+"',[],'check_version')", T('Check for upgrades'))}}
|
||||||
{{pass}}
|
{{pass}}
|
||||||
</p>
|
</p>
|
||||||
{{if session.is_mobile=='auto':}}
|
{{if session.is_mobile=='auto':}}
|
||||||
<p>{{=A(T('Try the mobile interface'),_href=URL('plugin_jqmobile','about'))}}</p>
|
<p>{{=A(T('Try the mobile interface'),_href=URL('plugin_jqmobile','about'))}}</p>
|
||||||
{{pass}}
|
{{pass}}
|
||||||
</div> <!-- /VERSION -->
|
</div> <!-- /VERSION -->
|
||||||
{{pass}}
|
{{pass}}
|
||||||
{{if MULTI_USER_MODE and is_manager():}}
|
{{if MULTI_USER_MODE and is_manager():}}
|
||||||
<!-- MULTI_USER_INTERFACE -->
|
<!-- MULTI_USER_INTERFACE -->
|
||||||
<div class="box">
|
<div class="box">
|
||||||
<h4>{{=T("Multi User Mode")}}</h4>
|
<h6>{{=T("Multi User Mode")}}</h6>
|
||||||
<p class="row-buttons">
|
<p class="row-buttons">
|
||||||
{{=button(URL('bulk_register'),T('Bulk Register'))}}
|
{{=button(URL('bulk_register'),T('Bulk Register'))}}
|
||||||
{{=button(URL('manage_students',vars={'order':'auth_user.id'}),T('Manage Students'))}}
|
{{=button(URL('manage_students',vars={'order':'auth_user.id'}),T('Manage Students'))}}
|
||||||
</p>
|
</p>
|
||||||
</div> <!-- /MULTI_USER_INTERFACE -->
|
</div> <!-- /MULTI_USER_INTERFACE -->
|
||||||
{{pass}}
|
{{pass}}
|
||||||
<!-- SCAFFOLD APP -->
|
<!-- SCAFFOLD APP -->
|
||||||
<div class="box">
|
<div class="box">
|
||||||
<h4>{{=T("New simple application")}}</h4>
|
<h6>{{=T("New simple application")}}</h6>
|
||||||
{{=form_create.custom.begin}}
|
{{=form_create.custom.begin}}
|
||||||
{{=LABEL(T("Application name:"))}}
|
{{=LABEL(T("Application name:"))}}
|
||||||
{{=form_create.custom.widget.name}}
|
{{=form_create.custom.widget.name}}
|
||||||
<div class="controls"><button type="submit" class="btn">{{=T('Create')}}</button></div>
|
<div class="controls"><button type="submit" class="btn">{{=T('Create')}}</button></div>
|
||||||
{{=form_create.custom.end}}
|
{{=form_create.custom.end}}
|
||||||
</div> <!-- /SCAFFOLD APP -->
|
</div> <!-- /SCAFFOLD APP -->
|
||||||
<!-- UPLOAD PACKAGE -->
|
<!-- UPLOAD PACKAGE -->
|
||||||
<div class="box">
|
<div class="box">
|
||||||
<h4>{{=T("Upload and install packed application")}}</h4>
|
<h6>{{=T("Upload and install packed application")}}</h6>
|
||||||
{{=form_update.custom.begin}}
|
{{=form_update.custom.begin}}
|
||||||
<label for="appupdate_name">{{=T("Application name:")}}</label>
|
<label for="appupdate_name">{{=T("Application name:")}}</label>
|
||||||
{{=form_update.custom.widget.name}}
|
{{=form_update.custom.widget.name}}
|
||||||
<label for="appupdate_file">{{=T("Upload a package:")}}</label>
|
<label for="appupdate_file">{{=T("Upload a package:")}}</label>
|
||||||
{{=form_update.custom.widget.file}}
|
{{=form_update.custom.widget.file}}
|
||||||
<label for="appupdate_url">{{=T("Or Get from URL:")}}</label>
|
<label for="appupdate_url">{{=T("Or Get from URL:")}}</label>
|
||||||
{{=form_update.custom.widget.url}}<small class="help-block">({{=T('can be a git repo')}})</small>
|
{{=form_update.custom.widget.url}}<small class="help-block">({{=T('can be a git repo')}})</small>
|
||||||
<div class="controls">
|
<div class="controls">
|
||||||
<label class="checkbox">
|
<label class="checkbox">
|
||||||
{{=form_update.custom.widget.overwrite}} {{=T("Overwrite installed app")}}
|
{{=form_update.custom.widget.overwrite}} {{=T("Overwrite installed app")}}
|
||||||
</label>
|
</label>
|
||||||
<button type="submit" class='btn'>{{=T('Install')}}</button>
|
<button type="submit" class='btn'>{{=T('Install')}}</button>
|
||||||
</div>
|
</div>
|
||||||
{{=form_update.custom.end}}
|
{{=form_update.custom.end}}
|
||||||
</div> <!-- /UPLOAD PACKAGE -->
|
</div> <!-- /UPLOAD PACKAGE -->
|
||||||
<!-- DEPLOY ON GAE -->
|
<!-- DEPLOY ON GAE -->
|
||||||
<div class="box">
|
<div class="box">
|
||||||
<h4>{{=T("Deploy")}}</h4>
|
<h6>{{=T("Deploy")}}</h6>
|
||||||
<p class="row-buttons">
|
<p class="row-buttons">
|
||||||
{{=button(URL('gae','deploy'), T('Deploy on Google App Engine'))}}
|
{{=button(URL('gae','deploy'), T('Deploy on Google App Engine'))}}
|
||||||
{{=button(URL('openshift','deploy'),T('Deploy to OpenShift'))}}
|
{{=button(URL('openshift','deploy'),T('Deploy to OpenShift'))}}
|
||||||
{{=button(URL('pythonanywhere','deploy'), T('Deploy to PythonAnywhere'))}}
|
{{=button(URL('pythonanywhere','deploy'), T('Deploy to PythonAnywhere'))}}
|
||||||
</p>
|
</p>
|
||||||
</div> <!-- /DEPLOY ON GAE -->
|
</div> <!-- /DEPLOY ON GAE -->
|
||||||
<!-- APP WIZARD -->
|
<!-- APP WIZARD -->
|
||||||
<div class="box">
|
<div class="box">
|
||||||
<h4>{{=T("New application wizard")}}</h4>
|
<h6>{{=T("New application wizard")}}</h6>
|
||||||
<p>{{=button(URL('wizard','index'), T('Start wizard'))}}<br/>
|
<p>{{=button(URL('wizard','index'), T('Start wizard'))}}<br/>
|
||||||
{{=T("(requires internet access, experimental)")}}</p>
|
{{=T("(requires internet access, experimental)")}}</p>
|
||||||
</div> <!-- /APP WIZARD -->
|
</div> <!-- /APP WIZARD -->
|
||||||
<!-- TWITTER TIMELINE -->
|
<!-- TWITTER TIMELINE -->
|
||||||
<div class="box twitter-timeline">
|
<div class="box twitter-timeline">
|
||||||
|
|||||||
@@ -1,114 +1,69 @@
|
|||||||
<!DOCTYPE html>
|
<html>
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
<head>
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||||
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<meta http-equiv="P3P" content="CP=\"IDC DSP COR CURa ADMa OUR IND PHY ONL COM STA\"" />
|
<meta name="apple-mobile-web-app-capable" content="yes" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<link href="{{=URL('static','css/stupid.css')}}" rel="stylesheet" type="text/css"/>
|
||||||
<title>{{=response.title or URL()}}</title>
|
<link href="{{=URL('static','css/calendar.css')}}" rel="stylesheet" type="text/css"/>
|
||||||
{{
|
<link href="{{=URL('static','css/web2py.css')}}" rel="stylesheet" type="text/css"/>
|
||||||
response.files.append(URL('static','css/bootstrap.min.css'))
|
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css">
|
||||||
response.files.append(URL('static','css/bootstrap_essentials.css'))
|
<style>
|
||||||
response.files.append(URL('static','css/bootstrap-responsive.min.css'))
|
th, td {color: black}
|
||||||
}}
|
tbody tr:hover {background-color:transparent}
|
||||||
{{include 'web2py_ajax.html'}}
|
tbody tr {border-bottom: none}
|
||||||
</head>
|
p {text-align: left}
|
||||||
|
pre {background-color: black!important;border-radius:5px; color:white; padding:10px}
|
||||||
<body class="{{=T('direction: ltr') == 'direction: rtl' and 'RTLbody' or ''}} {{block sectionclass}}home{{end}}">
|
a.btn.btn180 {padding:20px; font-size:1.2em; width:200px!important}
|
||||||
|
[type=submit], [type=button] {border-radius:5px!important;padding:5px 10px;margin-top:10px}
|
||||||
<!-- NAVBAR
|
</style>
|
||||||
============== -->
|
{{
|
||||||
<div id="header" class="navbar navbar-inverse navbar-fixed-top">
|
left_sidebar_enabled = globals().get('left_sidebar_enabled', False)
|
||||||
<div class="navbar-inner">
|
right_sidebar_enabled = globals().get('right_sidebar_enabled', False)
|
||||||
<div class="container-fluid">
|
middle_column = {0: 'fill', 1: 'threequarters', 2: 'half'}[
|
||||||
<button type="button" class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
|
(left_sidebar_enabled and 1 or 0)+(right_sidebar_enabled and 1 or 0)]
|
||||||
<span class="icon-bar"></span>
|
}}
|
||||||
<span class="icon-bar"></span>
|
{{include "web2py_ajax.html"}}
|
||||||
<span class="icon-bar"></span>
|
</head>
|
||||||
</button>
|
<body class="black">
|
||||||
<div id="start" class="brand_wrapper">
|
<header class="black padded">
|
||||||
<a href="{{=URL('default', 'index')}}" class="button brand" ><span>web2py™ {{=T('administrative interface')}}</span></a>
|
<div class="container middle max900">
|
||||||
</div>
|
<div class="fill middle">
|
||||||
<div class="nav-collapse">
|
<label class="ham padded fa fa-bars" for="menu"></label>
|
||||||
{{if response.menu is not None:}}
|
<div class="burger accordion">
|
||||||
<ul id="menu" class="nav pull-right">
|
<input type="checkbox" id="menu"/>
|
||||||
{{for _name,_active,_link in response.menu:}}
|
{{=MENU(response.menu,_class='menu')}}
|
||||||
<li>{{=A(SPAN(_name), _href=_link, _class=_active and 'button select' or 'button')}}</li>
|
</div>
|
||||||
{{pass}}
|
</div>
|
||||||
</ul>
|
</div>
|
||||||
{{pass}}
|
</header>
|
||||||
</div><!--/.nav-collapse -->
|
{{if response.flash:}}
|
||||||
</div><!-- /container-fluid -->
|
<div class="w2p_flash">
|
||||||
</div><!-- /navbar-inner -->
|
{{=response.flash}}
|
||||||
</div><!-- /#header -->
|
</div>
|
||||||
|
{{pass}}
|
||||||
<!-- MAIN
|
<main class="white">
|
||||||
=========== -->
|
<div class="hidden">{{block sectionclass}}design{{end}}</div>
|
||||||
<div id="{{=globals().get('main_id', 'main')}}" class="container-fluid">
|
<div class="container max900">
|
||||||
<div id="main_inner" class="row-fluid">
|
{{if left_sidebar_enabled:}}
|
||||||
<div class="span12">
|
<div class="quarter padded">{{block left_sidebar}}{{end}}</div>
|
||||||
<div class="w2p_flash alert">{{=response.flash or ''}}</div>
|
|
||||||
{{include}}
|
|
||||||
</div><!-- /main span12 -->
|
|
||||||
</div><!-- /main row-fluid -->
|
|
||||||
</div><!-- /#main -->
|
|
||||||
|
|
||||||
<!-- FOOTER
|
|
||||||
============== -->
|
|
||||||
{{block footer}}
|
|
||||||
<footer id="footer" class="fixed">
|
|
||||||
<p><span>{{=T('Powered by')}} {{=A('web2py', _href='http://www.web2py.com')}}™ {{=T('created by')}} Massimo Di Pierro ©2007-{{=request.now.year}}
|
|
||||||
{{if hasattr(T,'get_possible_languages_info'):}}
|
|
||||||
- {{=T('Admin language')}}</span>
|
|
||||||
<select name="adminlanguage" onchange="var date = new Date();cookieDate=date.setTime(date.getTime()+(100*24*60*60*1000));document.cookie='adminLanguage='+this.options[this.selectedIndex].id+'; expires='+cookieDate+'; path=/';window.location.reload()">
|
|
||||||
{{for langinfo in sorted([(code,info[1]) for code,info in T.get_possible_languages_info().iteritems() if code != 'default']):}}
|
|
||||||
<option {{=T.accepted_language==langinfo[0] and 'selected' or ''}} {{='id='+langinfo[0]}} >{{=langinfo[1]}}</option>
|
|
||||||
{{pass}}
|
|
||||||
</select>
|
|
||||||
{{else:}}
|
|
||||||
</span>{{pass}}
|
|
||||||
</p>
|
|
||||||
</footer><!-- /#footer -->
|
|
||||||
{{end}}
|
|
||||||
|
|
||||||
<!-- BS JAVASCRIPT
|
|
||||||
====================== -->
|
|
||||||
<script src="{{=URL('static','js/bootstrap.min.js')}}"></script>
|
|
||||||
<script type="text/javascript">
|
|
||||||
jQuery(document).ready(function(){
|
|
||||||
jQuery("[rel=tooltip]").tooltip();
|
|
||||||
jQuery(":input").attr("autocomplete","off");
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
<script>
|
|
||||||
// ====================
|
|
||||||
// upload input mask
|
|
||||||
// ====================
|
|
||||||
|
|
||||||
function FileSelectHandler(e) {
|
|
||||||
e.stopPropagation();
|
|
||||||
var filename = e.target.value.split(/\\|\//).pop();
|
|
||||||
jQuery('#fileselect>span').removeClass('txtPlaceholder').text(filename)
|
|
||||||
}
|
|
||||||
|
|
||||||
jQuery(document).ready(function(){
|
|
||||||
var iupload = jQuery('#appupdate_file');
|
|
||||||
var ow = 300, oh = 20;
|
|
||||||
var iplaceholder = jQuery('<span class="txtPlaceholder">{{=T("no package selected")}}</span>'),
|
|
||||||
iuploadbtn = jQuery('<button class="btn btn-inverse btn-mini uploadbtn"><i class="icon-white icon-circle-arrow-up"></i></button>');
|
|
||||||
iupload
|
|
||||||
.addClass('masked')
|
|
||||||
.wrap('<div id="fileselect" style="width:'+ow+'px;height:'+oh+'px"></div>')
|
|
||||||
.on('change', function(event){FileSelectHandler(event)});
|
|
||||||
jQuery('#fileselect').append(iplaceholder, iuploadbtn);
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
{{if request.function in ('index','site'):}}
|
|
||||||
<a style="position:fixed;bottom:0;left:0;z-index:1000" href="https://groups.google.com/forum/?fromgroups#!forum/web2py" target="_blank">
|
|
||||||
<!-- http://webchat.freenode.net/?channels=web2py" //-->
|
|
||||||
<img src="{{=URL('static','images/questions.png')}}" />
|
|
||||||
</a>
|
|
||||||
{{pass}}
|
{{pass}}
|
||||||
</body>
|
<div class="{{=middle_column}} padded">{{include}}</div>
|
||||||
|
{{if right_sidebar_enabled:}}
|
||||||
|
<div class="quarter padded">{{block right_sidebar}}{{end}}</div>
|
||||||
|
{{pass}}
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
<footer class="black">
|
||||||
|
<div class="container padded max900">
|
||||||
|
<div class="fill">
|
||||||
|
Copyright @ 2016 - Powered by Web2py
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
</body>
|
||||||
|
<script>
|
||||||
|
// prevent android horizontal scrolling
|
||||||
|
window.addEventListener("scroll", function(){window.scroll(0, window.pageYOffset);}, false);
|
||||||
|
</script>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
Reference in New Issue
Block a user