{{extend 'layout.html'}} {{ import re regex_space = re.compile('\s+') def all(items): return reduce(lambda a,b:a and b,items,True) def peekfile(path,file,vars={},title=None): args=(path,file) if 'app' in vars else (app,path,file) return A(file.replace('\\\\','/'),_title=title,_href=URL('peek', args=args, vars=vars)) def editfile(path,file,vars={}): 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)) def testfile(path,file): return A(TAG[''](IMG(_src=URL('static', 'images/test_icon.png'), _alt=T('test')), SPAN(T("Run tests in this file (to run all files, you may also use the button labelled 'test')"))), _class='icon test', _href=URL('test', args=(app, file)), _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={}): return A(SPAN(T('Edit')),_class='button editbutton btn btn-mini',_href=URL('edit_language', args=(app, path, file), vars=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)) def file_upload_form(location, anchor=None): form=FORM( LABEL(T("upload file:")), INPUT(_type="file",_name="file"), LABEL(T("and rename it:")), INPUT(_type="text",_name="filename",requires=IS_NOT_EMPTY(),_class=""), DIV(TAG['BUTTON'](T("Upload"),_type="submit",_class="btn"),_class="controls"), INPUT(_type="hidden",_name="location",_value=location), INPUT(_type="hidden",_name="token",_value=session.token), INPUT(_type="hidden",_name="sender",_value=URL('design',args=app, anchor=anchor)), _action=URL('upload_file'), _class="generatedbyw2p well well-small") return form def file_create_form(location, anchor=None, helptext=""): form=FORM( LABEL(T("create file with filename:")), INPUT(_type="text",_name="filename",requires=IS_NOT_EMPTY(),_class=''), TAG['SMALL'](helptext,_class="help-block"), DIV(TAG['BUTTON'](T("Create"),_type="submit",_class="btn"),_class="controls"), INPUT(_type="hidden",_name="location",_value=location), INPUT(_type="hidden",_name="sender",_value=URL('design',args=app)), INPUT(_type="hidden",_name="token",_value=session.token), INPUT(_type="hidden",_name="id",_value=anchor), _action=URL('create_file'), _class="generatedbyw2p well well-small") return form def upload_plugin_form(app, anchor=None): form=FORM( LABEL(T("upload plugin file:")), INPUT(_type="file",_name="pluginfile"), INPUT(_type="hidden",_name="id",_value=anchor), INPUT(_type="hidden",_name="token",_value=session.token), DIV(TAG['BUTTON'](T("Upload"),_type="submit",_class="btn"),_class="controls"), _class="generatedbyw2p well well-small") return form def deletefile(arglist, vars={}): vars.update({'sender':request.function+'/'+app}) return A(TAG[''](IMG(_src=URL('static', 'images/delete_icon.png')), SPAN(T('Delete this file (you will be asked to confirm deletion)'))), _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}}

{{=T("Edit application")}} "{{=A(app,_href=URL(app,'default','index'),_target="_blank")}}"

{{=searchbox('search')}} {{=T("collapse/expand all")}} {{=button('#models', T("models"))}} {{=button('#controllers', T("controllers"))}} {{=button('#views', T("views"))}} {{=button('#languages', T("languages"))}} {{=button('#static', T("static"))}} {{=button('#modules', T("modules"))}} {{=button('#private', T("private files"))}} {{=button('#plugins', T("plugins"))}}

{{=T("Models")}} {{=helpicon()}} {{=T("The data representation, define database tables and sets")}}  top

{{if not models:}}

{{=T("There are no models")}}

{{else:}}
{{=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):}} {{=button(URL('peek/%s/databases/sql.log'%app), 'sql.log')}} {{pass}} {{if os.access(os.path.join(request.folder,'..','admin','static','js','d3_graph.js'),os.R_OK):}} {{=button(URL(a=app, c='appadmin',f='d3_graph_model'), T('graph model'))}} {{pass}}
{{pass}}
{{ controller_functions=[] for c in controllers: controller_functions+=[c[:-3]+'/%s.html'%x for x in functions[c]] }}

{{=T("Controllers")}} {{=helpicon()}} {{=T("The application logic, each URL path is mapped in one exposed function in the controller")}}  top

{{if not controllers:}}

{{=T("There are no controllers")}}

{{else:}}
{{=button(URL('test',args=app), T("test"))}} {{=button(URL('edit',args=[app,'cron','crontab']), T("crontab"))}}
{{pass}}

{{=T("Views")}} {{=helpicon()}} {{=T("The presentations layer, views are also known as templates")}}  top

{{if not views:}}

{{=T("There are no views")}}

{{else:}}
{{=button(LAYOUTS_APP, T("Download layouts from repository"))}}
{{pass}}

{{=T("Languages")}} {{=helpicon()}} {{=T("Translation strings for the application")}}  top

{{if not languages:}}

{{=T("There are no translators, only default language is supported")}}

{{else:}}
{{=button(URL('update_languages/'+app), T('update all languages'))}}
{{pass}}

{{=T("Static")}} {{=helpicon()}} {{=T("These files are served without processing, your images go here")}}  top

{{if not statics:}}

{{=T("There are no static files")}}

{{else:}} {{pass}}

{{=T("Modules")}} {{=helpicon()}} {{=T("Additional code for your application")}}  top

{{if not modules:}}

{{=T("There are no modules")}}

{{else:}} {{pass}}

{{=T("Private files")}} {{=helpicon()}} {{=T("These files are not served, they are only available from within your app")}}  top

{{if not privates:}}

{{=T("There are no private files")}}

{{else:}}

{{=T("Plugins")}} {{=helpicon()}} {{=T("To create a plugin, name a file/folder plugin_[name]")}}  top

{{if plugins:}} {{else:}}

{{=T('There are no plugins')}}

{{pass}}
{{=button(URL(c="default", f="plugins", args=[app,]), T('Download plugins from repository'))}}