ZEXPc¾(cOFS.Folder Folder q)tq.}q(UxmlqUcqQU empty.htmlqUcqQUziddlyqUcq QUtitleq UU index_htmlq Ucq QUyamlq UcqQU_ownerq(]qU acl_usersqaU timmorganqtqUactionsqUc qQU _propertiesq(}q(UtypeqUstringqUidqUtitleqUmodeqUwdqutqU_objectsq(}q (U meta_typeq!UFolderq"Uidq#Uactionsq$u}q%(U meta_typeq&UScript (Python)q'Uidq(hu}q)(h&UFolderq*h(U javascriptsq+u}q,(U meta_typeq-UScript (Python)q.Uidq/U index_htmlq0u}q1(U meta_typeq2U DTML Documentq3Uidq4hu}q5(U meta_typeq6U DTML Methodq7Uidq8Uxmlq9u}q:(h6h7h8Uyamlq;utqQU__ac_local_roles__q?}q@UadminqA]qBUOwnerqCasUidqDU ZiddlyWikiqEu.cù(cOFS.DTMLMethod DTMLMethod q)tq.}q(U_varsq}qU _proxy_rolesq(UManagerqtqUtitleq UUrawq T= <dtml-try><dtml-var expr="root.tiddlers.SiteTitle" html_quote><dtml-except><dtml-var expr="root.title_or_id"></dtml-try> en-us <dtml-var title_or_id html_quote> q Uglobalsq }q U__name__qUxmlqU__ac_local_roles__q}qUtimq]qUOwnerqasu.c|®(cOFS.DTMLDocument DTMLDocument q)tq.}q(U_varsq}qUtitleqUTiddlyWiki 2.0.10qUrawqTó{ TiddlyWiki - a reusable non-linear personal web notebook
q Uglobalsq }q U__name__q U empty.htmlq U__ac_local_roles__q}qUtimq]qUOwnerqasu.cÇ(cProducts.PythonScripts.PythonScript PythonScript q)tq.}q(U Python_magicqU;ò qUerrorsq)Uwarningsq)U Script_magicqKU_bodyq T§ # Grab the TiddlyWiki source, insert some stuff, # and return the modified source to the client ziddly_point_release = 1 if get_release: return ziddly_point_release if root: context = root path = '/'.join(context.getPhysicalPath()) format = context.REQUEST.get('format', None) if format: return container[format](root=root, zw=container) action = context.REQUEST.get('action', None) if action: return container.actions[action](root=root) # make sure our tiddlers folder exists if not hasattr(context, 'tiddlers'): context.manage_addFolder(id='tiddlers') javascript_tag = '\n' stylesheet_tag = '\n' js_path = container.javascripts.absolute_url() # get ready to insert some extra stuff user = context.REQUEST.AUTHENTICATED_USER status_vars = """ """ % ( ('Authenticated' in user.getRoles()) and 'true' or 'false', getattr(context, 'zw_anon_edit', None) and 'true' or 'false', container.absolute_url(), ('Manager' in context.REQUEST.AUTHENTICATED_USER.getRoles()) and 'true' or 'false', container.actions.get_timestamp(root=root), user.getUserName(), ziddly_point_release, ) base_css = """ """ rss = '\n' scripts = '' # get the javascript ready scripts = scripts + javascript_tag % (js_path + '/ajax.js') scripts = scripts + javascript_tag % (js_path + '/ziddly.js') # insert additional js and css (if specified) for src in js: scripts = scripts + javascript_tag % src for src in css: scripts = scripts + stylesheet_tag % src # disable caching context.REQUEST.RESPONSE.appendHeader('Cache-Control', 'no-cache') # get the TiddlyWiki source src = container['empty.html']() # hack out the automatic Zope tag src = src.replace('', '\n', 1) # change the title try: title = root.tiddlers.SiteTitle(context, context.REQUEST).replace('<', '<').replace('>', '>').replace('[[', '').replace(']]', '') except: title = context.title_or_id() #src = src.replace('TiddlyWiki - a reusable non-linear personal web notebook', '%s' % title) pre_title = src.split('')[0] post_title = ''.join(src.split('')[1:]) src = pre_title + '' + title + '' + post_title # insert the extra stuff src = src.replace('', '%s' % (status_vars + base_css + rss + scripts)) # insert all the tiddlers from the "tiddlers" folder store_area = '
\n%s\n
' % container.actions.get_all_as_divs(root) src = src.split('
')[0] + store_area + '\n\n' # give the client the modified TiddlyWiki source return src q Uidq Uziddlyq U_codeq Tc@seedggd„ZdS(Nic1CsHd}|o|Sn|o |antddƒttdƒƒƒ}tttdƒdƒdtƒ} | o tt | ƒd|d t ƒSntttdƒdƒd tƒ} | o#ttt d ƒ| ƒd|ƒSnt td ƒ ottd ƒdd ƒnd}d}ttt dƒdƒƒ}tttdƒdƒ}ddt|dƒƒjodpdttdtƒodpdtt dƒƒdttttdƒdƒdƒƒjodpdttt d ƒdƒd|ƒt|dƒƒ|f}d}d}d}|||d }|||d!}x"t|ƒD]}|||}qEWx"t|ƒD]}|||}qjWttttdƒd"ƒd#ƒd$d%ƒtt d&ƒƒ}t|d'ƒd(d)dƒ}yvtttttt|d ƒd*ƒtttdƒƒd'ƒd+d,ƒd'ƒd-d.ƒd'ƒd/dƒd'ƒd0dƒ}Wnttd1ƒƒ}nXtt|d2ƒd3ƒd4ƒ}td5dƒtt|d2ƒd5ƒdd…ƒƒ}|d3|d5|}t|d'ƒd6d7||||ƒ}d8ttt d ƒd9ƒ|ƒ}tt|d2ƒd:ƒd4ƒ|d;}|SdS(<Nis/sjoinsgetPhysicalPathsREQUESTsgetsformatsrootszwsactionsactionsstiddlerssmanage_addFoldersids2 s0 s javascriptss absolute_urlsAUTHENTICATED_USERsÔ s AuthenticatedsgetRolesstruesfalses zw_anon_editsManagers get_timestamps getUserNames sQ ss/ajax.jss /ziddly.jssRESPONSEs appendHeaders Cache-Controlsno-caches empty.htmlsreplacess* s SiteTitless>s[[s]]s title_or_idssplitsi����s���ss %ss
%s
sget_all_as_divss
s (sziddly_point_releases get_releasesrootscontexts _getattr_spathsNonesformats _getitem_s containersactionshasattrsjavascript_tagsstylesheet_tagsjs_pathsusersgetattrs status_varssbase_csssrsssscriptss _getiter_sjsssrcscssstitles pre_titles post_titles store_area(srootsskins get_releasesjsscsssziddly_point_releasescontexts _getattr_spathsNonesformats _getitem_s containersactionshasattrsjavascript_tagsstylesheet_tagsjs_pathsusersgetattrs status_varssbase_csssrsssscriptss _getiter_ssrcstitles pre_titles post_titles store_area((sScript (Python)sziddlys^!! !#  /    !|3("&(sNonesziddly(sNonesziddly((sScript (Python)ssqU func_defaultsq(NNK]q]qtqU _bind_namesq(cShared.DC.Scripts.Bindings NameAssignments qoq}qU_asgnsq}q(U name_contextqUcontextqU name_subpathqUtraverse_subpathqU name_m_selfqUscriptqUname_containerqU containerq usbU__ac_local_roles__q!}q"Uadminq#]q$UOwnerq%asU _filepathq&U5Script (Python):/ziddlywiki_com/new/ZiddlyWiki/ziddlyq'U_paramsq(U2root=None, skin=None, get_release=0, js=[], css=[]q)U func_codeq*(cShared.DC.Scripts.Signature FuncCode q+oq,}q-(U co_argcountq.KU co_varnamesq/(Urootq0Uskinq1U get_releaseq2Ujsq3Ucssq4Uziddly_point_releaseq5Ucontextq6U _getattr_q7Upathq8UNoneq9Uformatq:U _getitem_q;U containerqUjavascript_tagq?Ustylesheet_tagq@Ujs_pathqAUuserqBUgetattrqCU status_varsqDUbase_cssqEUrssqFUscriptsqGU _getiter_qHUsrcqIUtitleqJU pre_titleqKU post_titleqLU store_areaqMtqNubu.c%(cProducts.PythonScripts.PythonScript PythonScript q)tq.}q(U Python_magicqU;ò qUerrorsq)UtitleqUU Script_magicqKU_bodyq U3return container.ZiddlyWiki.ziddly(root=container) q Uwarningsq )Uidq U index_htmlq U_codeqT_c@s d„ZdS(NcCs#tttdƒdƒdtƒSdS(Ns ZiddlyWikisziddlysroot(s _getattr_s container(s _getattr_s container((sScript (Python)s index_htmls(s index_html(s index_html((sScript (Python)ssqU func_defaultsqNU _bind_namesq(cShared.DC.Scripts.Bindings NameAssignments qoq}qU_asgnsq}q(U name_contextqUcontextqU name_subpathqUtraverse_subpathqU name_m_selfqUscriptqUname_containerqU containerqusbU__ac_local_roles__q}q Utimq!]q"UOwnerq#asU _filepathq$U9Script (Python):/ziddlywiki_com/new/ZiddlyWiki/index_htmlq%U_paramsq&UU func_codeq'(cShared.DC.Scripts.Signature FuncCode q(oq)}q*(U co_argcountq+KU co_varnamesq,(U _getattr_q-htq.ubu.c(cOFS.DTMLMethod DTMLMethod q)tq.}q(U_varsq}qU _proxy_rolesq(UManagerqtqUtitleq UUrawq TU ---- title: link: description: tiddlers: - title: link: modifier: modified: tags: - body: > q Uglobalsq }q U__name__qUyamlqU__ac_local_roles__q}qUtimq]qUOwnerqasu.c N(cOFS.Folder Folder q)tq.}q(Uget_allqUc qQUlockqUc qQU get_locksqUc q QUunlockq Ucq QUexportq Ucq QUget_all_as_divsqUcqQUimportqUcqQUidqUactionsqUtitleqUUcleanupqUcqQU_objectsq(}q(U meta_typeqUFolderqUidqUscriptsqu}q(U meta_typeqUScript (Python)qUidq Udeleteq!u}q"(hhh Uexportq#u}q$(hhh Ugetq%u}q&(hhh Uget_allq'u}q((hhh Uget_all_as_divsq)u}q*(hhh U get_revisionsq+u}q,(hhh Uimportq-u}q.(hhh Uloginq/u}q0(hhh Ulogoutq1u}q2(hhh Usaveq3u}q4(U meta_typeq5UScript (Python)q6Uidq7Ulockq8u}q9(h5h6h7h u}q:(U meta_typeq;UScript (Python)qu}q?(U meta_typeq@UScript (Python)qAUidqBUbackupqCu}qD(h@hAhBhu}qE(U meta_typeqFUScript (Python)qGUidqHUrefreshqIu}qJ(hFhGhHU get_timestampqKutqLUsaveqMUcqNQU get_revisionsqOUcqPQUgetqQUcqRQhKUcqSQUlogoutqTUcqUQUscriptsqVUcqWQhCUcqXQUrefreshqYUcqZQUloginq[Ucq\QU__ac_local_roles__q]}q^Uadminq_]q`UOwnerqaasUdeleteqbUcqcQu.c (cOFS.Folder Folder q)tq.}q(UtitleqUU ziddly.jsqUcqQU_objectsq(}q(U meta_typeq U DTML Documentq Uidq Uajax.jsq u}q (U meta_typeqU DTML DocumentqUidqhutqU__ac_local_roles__q}qUadminq]qUOwnerqash U javascriptsqUajax.jsqUcqQu.c 4(cProducts.PythonScripts.PythonScript PythonScript q)tq.}q(U Python_magicqU;ò qUerrorsq)Uwarningsq)U Script_magicqKU_bodyq Tif root: context = root path = '/'.join(context.getPhysicalPath()) tiddlers = [] for tiddler in context.tiddlers.objectValues('DTML Document'): # get basic details modified = container.scripts.get_modified(tiddler) # add necessary properties (for backwards compat) if not hasattr(tiddler, 'modified'): tiddler.manage_addProperty('modified', modified, 'string') if not hasattr(tiddler, 'created'): tiddler.manage_addProperty('created', modified, 'string') # get other basic details title = tiddler.title_or_id() created = tiddler.created modifier = getattr(tiddler, 'modifier', '') tags = getattr(tiddler, 'tags', '') body = tiddler(context, context.REQUEST).replace('\\', '\\s').replace('\n', '\\n').replace('<', '<').replace('>', '>') # check that the tiddler's id is correct (for backwards compat) id = container.scripts.sanitize_id(title) if id != tiddler.id(): try: context.tiddlers.manage_renameObject(tiddler.id(), id) except: raise Exception, 'I was unable to automatically migrate your tiddler ids because you have two or more tiddlers with the title "%s". Please browse to %s and delete the tiddler(s) you do not want to keep.' % (tiddler.title, context.tiddlers.absolute_url()+'/manage/') # check for special tags and privileges if 'private' in tags.split() and 'Authenticated' not in context.REQUEST.AUTHENTICATED_USER.getRoles(): continue if 'onlyAdmin' in tags.split() and 'Manager' not in context.REQUEST.AUTHENTICATED_USER.getRoles(): continue if 'deleted' in tags.split(): continue # assemble the details tiddler = { 'title': title, 'created': created, 'modified': modified, 'modifier': modifier, 'tags': tags, 'body': body, } tiddlers.append(tiddler) return tiddlers q Uidq Uget_allq U_codeq TÍc@sed„ZdS(Nc&Cs<|o |antddƒttdƒƒƒ}g}xùttttdƒdƒdƒƒD]Ó}tttdƒdƒ|ƒ}t |d ƒ ot|d ƒd |d ƒnt |d ƒ ot|d ƒd |d ƒnt|d ƒƒ} t|d ƒ} t |ddƒ} t |ddƒ}tttt|tttdƒƒdƒddƒdƒddƒdƒddƒdƒddƒ}tttdƒdƒ| ƒ}|t|dƒƒjory/tttdƒdƒt|dƒƒ|ƒWq+tdt|dƒtttdƒd ƒƒd!f‚q+Xnd"t|d#ƒƒjo(d$ttttdƒd%ƒd&ƒƒjoq]nd't|d#ƒƒjo(d(ttttdƒd%ƒd&ƒƒjoq]nd)t|d#ƒƒjoq]nhd| <d | <d |<d| <d|<d*|<}t|d+ƒ|ƒq]W|SdS(,Ns/sjoinsgetPhysicalPathstiddlerss objectValuess DTML Documentsscriptss get_modifiedsmodifiedsmanage_addPropertysstringscreateds title_or_idsmodifiersstagssREQUESTsreplaces\s\ss s\nss>s sanitize_idsidsmanage_renameObjects¸I was unable to automatically migrate your tiddler ids because you have two or more tiddlers with the title "%s". Please browse to %s and delete the tiddler(s) you do not want to keep.stitles absolute_urls/manage/sprivatessplits AuthenticatedsAUTHENTICATED_USERsgetRoless onlyAdminsManagersdeletedsbodysappend(srootscontexts _getattr_spathstiddlerss _getiter_stiddlers containersmodifiedshasattrstitlescreatedsgetattrsmodifierstagssbodysids Exception(srootscontexts _getattr_spathstiddlerss _getiter_stiddlers containersmodifiedshasattrstitlescreatedsgetattrsmodifierstagssbodysids Exception((sScript (Python)sget_allsD!%` ,C> >      (sNonesget_all(sNonesget_all((sScript (Python)ssqU func_defaultsq(NtqU _proxy_rolesq(UManagerqtqU _bind_namesq(cShared.DC.Scripts.Bindings NameAssignments qoq}qU_asgnsq}q(U name_contextqUcontextqU name_subpathqUtraverse_subpathqU name_m_selfqUscriptqUname_containerq U containerq!usbU__ac_local_roles__q"}q#Uadminq$]q%UOwnerq&asU _filepathq'U+Script (Python):/ZiddlyWiki/actions/get_allq(U_paramsq)U root=Noneq*U func_codeq+(cShared.DC.Scripts.Signature FuncCode q,oq-}q.(U co_argcountq/KU co_varnamesq0(Urootq1Ucontextq2U _getattr_q3Upathq4Utiddlersq5U _getiter_q6Utiddlerq7U containerq8Umodifiedq9Uhasattrq:Utitleq;UcreatedqUtagsq?Ubodyq@UidqAU ExceptionqBtqCubu.c ´(cProducts.PythonScripts.PythonScript PythonScript q)tq.}q(U Python_magicqU;ò qUerrorsq)Uwarningsq)U Script_magicqKU_bodyq TÁif root: context = root req = context.REQUEST id = container.scripts.sanitize_id(req.get('id')) username = context.REQUEST.AUTHENTICATED_USER.getUserName() # restrict anonymous unless anonymous editing is enabled anon_edit = getattr(context, 'zw_anon_edit', 0) if not anon_edit and 'Authenticated' not in context.REQUEST.AUTHENTICATED_USER.getRoles(): raise 'Unauthorized' try: tiddler = context.tiddlers[id] except: return '-' if hasattr(tiddler, 'lock_time'): length = (DateTime() - tiddler.lock_time) * 24.0 * 60.0 # minutes if length > getattr(context, 'zw_lock_minutes', 5.0): tiddler.manage_delProperties(['lock_time', 'lock_user']) else: return 'already locked by %s' % tiddler.lock_user tiddler.manage_addProperty('lock_time', DateTime(), 'date') tiddler.manage_addProperty('lock_user', username, 'string') try: tiddler.manage_addProperty('ignore_revision', 1, 'boolean') except: pass return 'locked\n' + container.get(root=root) q U _filepathq U-Script (Python):/beta/ZiddlyWiki/actions/lockq U_codeq T¾c@sed„ZdS(NcCsÝ|o |anttdƒ}tttdƒdƒt|dƒdƒƒ}ttttdƒdƒdƒƒ}ttdd ƒ}| o(d ttttdƒdƒd ƒƒjo d ‚nyt ttd ƒ|ƒ} Wn dSnXt | dƒoit ƒt| dƒdd} | ttddƒjot| dƒddgƒqcdt| dƒSnt| dƒdt ƒdƒt| dƒd|dƒyt| dƒdddƒWnnXdttdƒd|ƒSdS(NsREQUESTsscriptss sanitize_idsgetsidsAUTHENTICATED_USERs getUserNames zw_anon_editis AuthenticatedsgetRoless Unauthorizedstiddlerss-s lock_timef24.0f60.0szw_lock_minutesf5.0smanage_delPropertiess lock_usersalready locked by %ssmanage_addPropertysdatesstringsignore_revisionisbooleanslocked sroot(srootscontexts _getattr_sreqs containersidsusernamesgetattrs anon_edits _getitem_stiddlershasattrsDateTimeslength(srootscontexts _getattr_sreqs containersidsusernamesgetattrs anon_edits _getitem_stiddlershasattrsDateTimeslength((sScript (Python)slocks$-$3 "#(sNoneslock(sNoneslock((sScript (Python)ssqU func_defaultsq(NtqU _proxy_rolesq(UManagerqtqU _bind_namesq(cShared.DC.Scripts.Bindings NameAssignments qoq}qU_asgnsq}q(Uname_containerqU containerqU name_contextqUcontextqU name_subpathqUtraverse_subpathqU name_m_selfq Uscriptq!usbU__ac_local_roles__q"}q#U timmorganq$]q%UOwnerq&asUidq'Ulockq(U_paramsq)U root=Noneq*U func_codeq+(cShared.DC.Scripts.Signature FuncCode q,oq-}q.(U co_argcountq/KU co_varnamesq0(Urootq1Ucontextq2U _getattr_q3Ureqq4U containerq5Uidq6Uusernameq7Ugetattrq8U anon_editq9U _getitem_q:Utiddlerq;Uhasattrqtq?ubu.c ²(cProducts.PythonScripts.PythonScript PythonScript q)tq.}q(U Python_magicqU;ò qUerrorsq)Uwarningsq)U Script_magicqKU_bodyq TÊcontext = root users = [] for tiddler in context.tiddlers.objectValues('DTML Document'): if hasattr(tiddler, 'lock_time'): length = (DateTime() - tiddler.lock_time) * 24.0 * 60.0 # minutes if length > getattr(context, 'zw_lock_minutes', 5.0): tiddler.manage_delProperties(['lock_time', 'lock_user']) user = getattr(tiddler, 'lock_user', None) if user and user not in users: users.append(user) users.sort() return '\n'.join(users) q Uidq U get_locksq U_codeq TÑc@sed„ZdS(Nc Cs|ag}xÑttttdƒdƒdƒƒD]«}t|dƒoXtƒt|dƒdd}|t tddƒjot|d ƒdd gƒqŸnt |d t ƒ} | o | |jot|d ƒ| ƒq1q1Wt|d ƒƒtd dƒ|ƒSdS(Nstiddlerss objectValuess DTML Documents lock_timef24.0f60.0szw_lock_minutesf5.0smanage_delPropertiess lock_usersappendssorts sjoin( srootscontextsuserss _getiter_s _getattr_stiddlershasattrsDateTimeslengthsgetattrsNonesuser( srootscontextsuserss _getiter_s _getattr_stiddlershasattrsDateTimeslengthsgetattrsNonesuser((sScript (Python)s get_lockss% (sNones get_locks(sNones get_locks((sScript (Python)ssqU func_defaultsq(NtqU _proxy_rolesq(UManagerqtqU _bind_namesq(cShared.DC.Scripts.Bindings NameAssignments qoq}qU_asgnsq}q(U name_contextqUcontextqU name_subpathqUtraverse_subpathqU name_m_selfqUscriptqUname_containerq U containerq!usbU__ac_local_roles__q"}q#U timmorganq$]q%UOwnerq&asU _filepathq'U-Script (Python):/ZiddlyWiki/actions/get_locksq(U_paramsq)U root=Noneq*U func_codeq+(cShared.DC.Scripts.Signature FuncCode q,oq-}q.(U co_argcountq/KU co_varnamesq0(Urootq1hUusersq2U _getiter_q3U _getattr_q4Utiddlerq5Uhasattrq6UDateTimeq7Ulengthq8Ugetattrq9UNoneq:Uuserq;tqsqU func_defaultsq(NtqU _proxy_rolesq(UManagerqtqU _bind_namesq(cShared.DC.Scripts.Bindings NameAssignments qoq}qU_asgnsq}q(U name_contextqUcontextqU name_subpathqUtraverse_subpathqU name_m_selfqUscriptqUname_containerq U containerq!usbU__ac_local_roles__q"}q#U timmorganq$]q%UOwnerq&asU _filepathq'U/Script (Python):/beta/ZiddlyWiki/actions/unlockq(U_paramsq)U root=Noneq*U func_codeq+(cShared.DC.Scripts.Signature FuncCode q,oq-}q.(U co_argcountq/KU co_varnamesq0(Urootq1Ucontextq2U _getattr_q3Ureqq4U containerq5Uidq6Uusernameq7Ugetattrq8U anon_editq9U _getitem_q:Utiddlerq;tq tag src = src.replace('', '\n', 1) # change the title try: title = root.tiddlers.SiteTitle(context, context.REQUEST).replace('<', '<').replace('>', '>').replace('[[', '').replace(']]', '') except: title = context.title_or_id() #src = src.replace('TiddlyWiki - a reusable non-linear personal web notebook', '%s' % title) pre_title = src.split('')[0] post_title = ''.join(src.split('')[1:]) src = pre_title + '' + title + '' + post_title # insert all the tiddlers from the "tiddlers" folder store_area = '
%s
' % container.actions.get_all_as_divs(for_export=1, root=root) src = src.split('
')[0] + store_area + '
' # force file to download context.REQUEST.RESPONSE.setHeader('Content-disposition', 'attachment; filename=%s.html' % title.replace(' ', '_')) # give the client the modified TiddlyWiki source return src q Uidq Uexportq U_codeq TÃc@sed„ZdS(Nc CsÔ|o |anttdƒdƒƒ}t|dƒdddƒ}yvtttttt|dƒdƒtttd ƒƒdƒd d ƒdƒd d ƒdƒddƒdƒddƒ}Wnttdƒƒ}nXtt|dƒdƒdƒ}tddƒtt|dƒdƒdd…ƒƒ}|d|d|}dtttdƒdƒddd|ƒ} tt|dƒdƒdƒ| d}ttttd ƒdƒdƒd d!t|dƒd"d#ƒƒ|SdS($NsrestrictedTraverses empty.htmlsreplacess* istiddlerss SiteTitlesREQUESTss>s[[ss]]s title_or_idssplitsi����s���sjoins
%s
sactionssget_all_as_divss for_exportsroots
s
sRESPONSEs setHeadersContent-dispositionsattachment; filename=%s.htmls s_( srootscontexts _getattr_s containerssrcstitles _getitem_s pre_titles post_titles store_area( srootscontexts _getattr_s containerssrcstitles _getitem_s pre_titles post_titles store_area((sScript (Python)sexports|3+/5(sNonesexport(sNonesexport((sScript (Python)ssqU func_defaultsq(NtqU _bind_namesq(cShared.DC.Scripts.Bindings NameAssignments qoq}qU_asgnsq}q(U name_contextqUcontextqU name_subpathqUtraverse_subpathqU name_m_selfqUscriptqUname_containerqU containerqusbU__ac_local_roles__q}q Utimq!]q"UOwnerq#asU _filepathq$U*Script (Python):/ZiddlyWiki/actions/exportq%U_paramsq&U root=Noneq'U func_codeq((cShared.DC.Scripts.Signature FuncCode q)oq*}q+(U co_argcountq,KU co_varnamesq-(Urootq.Ucontextq/U _getattr_q0U containerq1Usrcq2Utitleq3U _getitem_q4U pre_titleq5U post_titleq6U store_areaq7tq8ubu.cã(cProducts.PythonScripts.PythonScript PythonScript q)tq.}q(U Python_magicqU;ò qUerrorsq)Uwarningsq)U Script_magicqKU_bodyq T0tiddlers = [] for t in container.get_all(root=root): tiddler = '
%s
' % (t['title'].replace('"', '"'), t['modifier'], t['modified'], t['created'], t['tags'], t['body']) tiddlers.append(tiddler) return '\n'.join(tiddlers) q Uidq Uget_all_as_divsq U_codeq Tƒc@sedd„ZdS(Nic Cs½g}xtttdƒd|ƒƒD]}}dtt|dƒdƒddƒt|dƒt|d ƒt|d ƒt|d ƒt|d ƒf}t|d ƒ|ƒq%Wtddƒ|ƒSdS(Nsget_allsrootsM
%s
stitlesreplaces"s"smodifiersmodifiedscreatedstagssbodysappends sjoin(stiddlerss _getiter_s _getattr_s containersrootsts _getitem_stiddler( sroots for_exportstiddlerss _getiter_s _getattr_s containersts _getitem_stiddler((sScript (Python)sget_all_as_divss g(sNonesget_all_as_divs(sNonesget_all_as_divs((sScript (Python)ssqU func_defaultsq(NKtqU _proxy_rolesq(U AuthenticatedqUManagerqtqU _bind_namesq(cShared.DC.Scripts.Bindings NameAssignments qoq}qU_asgnsq}q(U name_contextqUcontextqU name_subpathqUtraverse_subpathqU name_m_selfqUscriptq Uname_containerq!U containerq"usbU__ac_local_roles__q#}q$Uadminq%]q&UOwnerq'asU _filepathq(U3Script (Python):/ZiddlyWiki/actions/get_all_as_divsq)U_paramsq*Uroot=None, for_export=0q+U func_codeq,(cShared.DC.Scripts.Signature FuncCode q-oq.}q/(U co_argcountq0KU co_varnamesq1(Urootq2U for_exportq3Utiddlersq4U _getiter_q5U _getattr_q6U containerq7UtU _getitem_q8Utiddlerq9tq:ubu.c¬(cProducts.PythonScripts.PythonScript PythonScript q)tq.}q(U Python_magicqU;ò qUerrorsq)Uwarningsq)U Script_magicqKU_bodyq Tc if root: context = root path = '/'.join(context.getPhysicalPath()) req = context.REQUEST file = req.get('file', None) keep_newest = req.get('keep_newest', 0) delete_missing = req.get('delete_missing', 0) redirect_to = req.get('redirect_to', '/') if file: html = file.read() tiddlers = html.split('
')[1].replace('', '').replace('', '').replace('
', '').replace('
', '').replace('', '').split('\n') imported = [] for tiddler in tiddlers: try: details, body = tiddler.split('>') except: pass else: if details.find('created="') > -1: # TiddlyWiki 2.0.0 and later details = details.split('"') title = details[1] modifier = details[3] # not really used modified = details[5] created = details[7] tags = details[9] elif details.find('tiddler="') > -1: # TiddlyWiki 1.2.23 thru TiddlyWiki 1.2.39 details = details.split('"') title = details[1] modified = details[3] modifier = details[5] # not really used tags = details[7] elif details.find('id="') > -1: # TiddlyWiki 1.2.22 and before details = details.split('"') title = details[1][5:] modified = details[3] modifier = details[5] # not really used tags = details[7] else: raise Exception, "Cannot determine TiddlyWiki version. Import failed. Details look like: %s" % details outcome = container.actions.save(root=root, only_if_newer=keep_newest, req_args={'id':title, 'title':title, 'body':body.replace('\\n', '\n'), 'tags':tags, 'modified':modified, 'created':created}) imported.append(title) if delete_missing: for tiddler in context.tiddlers.objectValues('DTML Document'): title = tiddler.title_or_id() if title not in imported: container.actions.delete(context, {'id':title}) return context.REQUEST.RESPONSE.redirect(redirect_to) else: context.REQUEST.RESPONSE.setHeader('Content-Type', 'text/html') html = 'Import to ZiddlyWiki%s %s' message = '

Select a TiddlyWiki file to import into ZiddlyWiki...

' form = '



' return html % (message, form) q Uidq Uimportq U_codeq Tjc@sed„ZdS(Nc'Cs«|o |antddƒttdƒƒƒ}ttdƒ}t|dƒdtƒ}t|dƒddƒ}t|dƒd dƒ}t|dƒd dƒ} |o¯t|d ƒƒ} tttttttt t| d ƒd ƒdƒdƒddƒdƒddƒdƒddƒdƒddƒdƒddƒdƒddƒd ƒdƒ} g} xMt| ƒD]?}y&t|d ƒdƒtƒ\}}WnqfXt|dƒdƒd jodt|d ƒdƒ}t |dƒ}t |dƒ}t |dƒ}t |dƒ}t |dƒ}nt|dƒd ƒd joUt|d ƒdƒ}t |dƒ}t |dƒ}t |dƒ}t |dƒ}nt|dƒd!ƒd jodt|d ƒdƒ}t t |dƒdd…ƒ}t |dƒ}t |dƒ}t |dƒ}ntd"|‚tttd#ƒd$ƒd%|d&|d'hd(|<d)|<d*t|dƒd+dƒ<d,|<d-|<d.|<ƒ}t| d/ƒ|ƒqfW|o~x{ttttd0ƒd1ƒd2ƒƒD]Q}t|d3ƒƒ}|| jo,tttd#ƒd4ƒthd(|<ƒqÕqÕWnttttdƒd5ƒd6ƒ| ƒSnQttttdƒd5ƒd7ƒd8d9ƒd:} d;}d<|d=}| ||fSdS(>Ns/sjoinsgetPhysicalPathsREQUESTsgetsfiles keep_newestisdelete_missings redirect_tosreadssplits
isreplacessss
s
ss s>sfinds created="s"iiii s tiddler="sid="sICannot determine TiddlyWiki version. Import failed. Details look like: %ssactionsssavesroots only_if_newersreq_argssidstitlesbodys\nstagssmodifiedscreatedsappendstiddlerss objectValuess DTML Documents title_or_idsdeletesRESPONSEsredirects setHeaders Content-Types text/htmlsOImport to ZiddlyWiki%s %ss<

Select a TiddlyWiki file to import into ZiddlyWiki...




(srootscontexts _getattr_spathsreqsNonesfiles keep_newestsdelete_missings redirect_toshtmls _getitem_stiddlerssimporteds _getiter_stiddlersdetailssbodystitlesmodifiersmodifiedscreatedstagss Exceptions containersoutcomesmessagesform(srootscontexts _getattr_spathsreqsNonesfiles keep_newestsdelete_missings redirect_toshtmls _getitem_stiddlerssimporteds _getiter_stiddlersdetailssbodystitlesmodifiersmodifiedscreatedstagss Exceptions containersoutcomesmessagesform((sScript (Python)simportsb!™ ) x%.2(sNonesimport(sNonesimport((sScript (Python)ssqU func_defaultsq(NtqU_View_Permissionq(U AuthenticatedqUManagerqtqU _bind_namesq(cShared.DC.Scripts.Bindings NameAssignments qoq}qU_asgnsq}q(U name_contextqUcontextqU name_subpathqUtraverse_subpathqU name_m_selfqUscriptq Uname_containerq!U containerq"usbU__ac_local_roles__q#}q$Utimq%]q&UOwnerq'asU _filepathq(U*Script (Python):/ZiddlyWiki/actions/importq)U_paramsq*U root=Noneq+U func_codeq,(cShared.DC.Scripts.Signature FuncCode q-oq.}q/(U co_argcountq0KU co_varnamesq1(Urootq2Ucontextq3U _getattr_q4Upathq5Ureqq6UNoneq7Ufileq8U keep_newestq9Udelete_missingq:U redirect_toq;UhtmlqUimportedq?U _getiter_q@UtiddlerqAUdetailsqBUbodyqCUtitleqDUmodifierqEUmodifiedqFUcreatedqGUtagsqHU ExceptionqIU containerqJUoutcomeqKUmessageqLUformqMtqNubu.c (cProducts.PythonScripts.PythonScript PythonScript q)tq.}q(U Python_magicqU;ò qUerrorsq)Uwarningsq)U Script_magicqKU_bodyq TÒcontext = root # only Managers please if 'Manager' not in context.REQUEST.AUTHENTICATED_USER.getRoles(): raise 'Unauthorized' to_delete = [] for tiddler in context.tiddlers.objectValues('DTML Document'): if 'deleted' in tiddler.tags.split(): to_delete.append([tiddler.id(), tiddler.title]) context.tiddlers.manage_delObjects([id for id, title in to_delete]) return 'Deleted the following tiddlers:\n%s' % ('\n'.join([title for id, title in to_delete])) q U _filepathq U+Script (Python):/ZiddlyWiki/actions/cleanupq U_codeq TRc@sed„ZdS(Nc Csc|adttttdƒdƒdƒƒjo d‚ng}x€ttttdƒdƒdƒƒD]Z}d tt|d ƒd ƒƒjo2t|d ƒt|d ƒƒt|dƒgƒqfqfWtttdƒdƒgi}t|ƒD]tƒ\}} ||ƒqí~ƒdtddƒgi}t|ƒD]tƒ\}} || ƒq7~ƒSdS(NsManagersREQUESTsAUTHENTICATED_USERsgetRoless Unauthorizedstiddlerss objectValuess DTML Documentsdeletedstagsssplitsappendsidstitlesmanage_delObjectss"Deleted the following tiddlers: %ss sjoin( srootscontexts _getattr_s to_deletes _getiter_stiddlersappends$append0sidstitle( srootscontexts _getattr_s to_deletes _getiter_stiddlersappends$append0sidstitle((sScript (Python)scleanups+ %%9#'#(sNonescleanup(sNonescleanup((sScript (Python)ssqU func_defaultsq(NtqU _bind_namesq(cShared.DC.Scripts.Bindings NameAssignments qoq}qU_asgnsq}q(Uname_containerqU containerqU name_contextqUcontextqU name_subpathqUtraverse_subpathqU name_m_selfqUscriptqusbU__ac_local_roles__q}q U timmorganq!]q"UOwnerq#asUidq$Ucleanupq%U_paramsq&U root=Noneq'U func_codeq((cShared.DC.Scripts.Signature FuncCode q)oq*}q+(U co_argcountq,KU co_varnamesq-(Urootq.hU _getattr_q/U to_deleteq0U _getiter_q1Utiddlerq2Uappendq3U$append0q4h$Utitleq5tq6ubu.c¼(cProducts.PythonScripts.PythonScript PythonScript q)tq.}q(U Python_magicqU;ò qUerrorsq)Uwarningsq)U Script_magicqKU_bodyq TÑ if root: context = root path = '/'.join(context.getPhysicalPath()) req = req_args or context.REQUEST title = req.get('title') body = req.get('body') tags = req.get('tags') modified = req.get('modified', '') created = req.get('created', '') id = req.get('id') id = container.scripts.sanitize_id(id) new_id = container.scripts.sanitize_id(title) # restrict anonymous unless anonymous editing is enabled anon_edit = getattr(context, 'zw_anon_edit', 0) if not anon_edit and 'Authenticated' not in context.REQUEST.AUTHENTICATED_USER.getRoles(): raise 'Unauthorized' # things only a manager (admin) can do if 'Manager' not in context.REQUEST.AUTHENTICATED_USER.getRoles(): if 'systemConfig' in tags.split(): raise 'Unauthorized' if new_id in ['DefaultTiddlers', 'MainMenu', 'SiteTitle', 'SiteSubtitle', 'StyleSheet']: raise 'Unauthorized' # get or create the tiddler just_created = 0 try: tiddler = context.tiddlers[id] except: try: context.tiddlers.manage_addDTMLDocument(id=new_id, title=title) except: pass else: just_created = 1 tiddler = context.tiddlers[new_id] try: tiddler.manage_addProperty('created', modified, 'string') except: pass else: if id != new_id: # name changed - rename it context.tiddlers.manage_renameObject(id, new_id) body = body.replace('\r\n', '\n').replace('"', '"').replace('<', '<').replace('>', '>') # if only_is_newer is specified and the tiddler isn't, then quit is_newer = modified and container.scripts.to_date(modified) > container.scripts.to_date(container.scripts.get_modified(tiddler)) if only_if_newer and not just_created and not is_newer: return 'not newer' try: if tiddler() == body and tiddler.title == title and getattr(tiddler, 'tags', None) == tags: return 'no changes' except: pass tiddler.manage_edit(data=body, title=title) if hasattr(tiddler, 'tags'): tiddler.manage_changeProperties(tags=tags) else: tiddler.manage_addProperty('tags', tags, 'string') if modified: if hasattr(tiddler, 'modified'): tiddler.manage_changeProperties(modified=modified) else: tiddler.manage_addProperty('modified', modified, 'string') if hasattr(tiddler, 'created'): if created: tiddler.manage_changeProperties(created=created) else: if created: tiddler.manage_addProperty('created', created, 'string') else: tiddler.manage_addProperty('created', modified, 'string') username = context.REQUEST.AUTHENTICATED_USER.getUserName() if hasattr(tiddler, 'modifier'): tiddler.manage_changeProperties(modifier=username) else: tiddler.manage_addProperty('modifier', username, 'string') try: tiddler.manage_delProperties(['lock_time', 'lock_user']) except: pass try: tiddler.manage_delProperties(['ignore_revision']) except: pass return 'success' q Uidq Usaveq U_codeq T/ c@sedhd„ZdS(Nic>Cs™|o |antddƒttdƒƒƒ}|p ttdƒ}t|dƒdƒ}t|dƒdƒ}t|dƒdƒ} t|dƒd d ƒ} t|dƒd d ƒ} t|dƒd ƒ} ttt d ƒdƒ| ƒ} ttt d ƒdƒ|ƒ}ttddƒ}| o(dttttdƒdƒdƒƒjo d‚ndttttdƒdƒdƒƒjoMdt| dƒƒjo d‚n|dddddgjo d‚qÏnd}ytttdƒ| ƒ}Wny)tttdƒdƒd |d|ƒWnnXd}tttdƒ|ƒ}yt|d ƒd | d!ƒWq£q£Xn1X| |jo#tttdƒd"ƒ| |ƒntttt|d#ƒd$d%ƒd#ƒd&d'ƒd#ƒd(d)ƒd#ƒd*d+ƒ}| oRttt d ƒd,ƒ| ƒttt d ƒd,ƒttt d ƒd-ƒ|ƒƒj}|o | o| od.SnyK|ƒ|jo,t|dƒ|jot|dtƒ| jod/SnWnnXt|d0ƒd1|d|ƒt|dƒot|d2ƒd| ƒnt|d ƒd| d!ƒ| oGt|d ƒot|d2ƒd | ƒqmt|d ƒd | d!ƒnt|d ƒo%| ot|d2ƒd | ƒqßn>| ot|d ƒd | d!ƒnt|d ƒd | d!ƒttttdƒdƒd3ƒƒ}t|d4ƒot|d2ƒd4|ƒnt|d ƒd4|d!ƒyt|d5ƒd6d7gƒWnnXyt|d5ƒd8gƒWnnXd9SdS(:Ns/sjoinsgetPhysicalPathsREQUESTsgetstitlesbodystagssmodifiedsscreatedsidsscriptss sanitize_ids zw_anon_editis AuthenticatedsAUTHENTICATED_USERsgetRoless UnauthorizedsManagers systemConfigssplitsDefaultTiddlerssMainMenus SiteTitles SiteSubtitles StyleSheetstiddlerssmanage_addDTMLDocumentismanage_addPropertysstringsmanage_renameObjectsreplaces s s"s"ss>sto_dates get_modifieds not newers no changess manage_editsdatasmanage_changePropertiess getUserNamesmodifiersmanage_delPropertiess lock_times lock_usersignore_revisionssuccess(srootscontexts _getattr_spathsreq_argssreqstitlesbodystagssmodifiedscreatedsids containersnew_idsgetattrs anon_edits just_createds _getitem_stiddlersis_newers only_if_newersNoneshasattrsusername(sroots only_if_newersreq_argsscontexts _getattr_spathsreqstitlesbodystagssmodifiedscreatedsids containersnew_idsgetattrs anon_edits just_createds _getitem_stiddlersis_newersNoneshasattrsusername((sScript (Python)ssavesx!3 + /#N[?  $# (sNonessave(sNonessave((sScript (Python)ssqU func_defaultsq(NK}qtqU _proxy_rolesq(UManagerqtqU _bind_namesq(cShared.DC.Scripts.Bindings NameAssignments qoq}qU_asgnsq}q(Uname_containerqU containerqU name_contextqUcontextqU name_subpathqUtraverse_subpathq U name_m_selfq!Uscriptq"usbU__ac_local_roles__q#}q$Uadminq%]q&UOwnerq'asU _filepathq(U(Script (Python):/ZiddlyWiki/actions/saveq)U_paramsq*U'root=None, only_if_newer=0, req_args={}q+U func_codeq,(cShared.DC.Scripts.Signature FuncCode q-oq.}q/(U co_argcountq0KU co_varnamesq1(Urootq2U only_if_newerq3Ureq_argsq4Ucontextq5U _getattr_q6Upathq7Ureqq8Utitleq9Ubodyq:Utagsq;UmodifiedqU containerq?Unew_idq@UgetattrqAU anon_editqBU just_createdqCU _getitem_qDUtiddlerqEUis_newerqFUNoneqGUhasattrqHUusernameqItqJubu.c h(cProducts.PythonScripts.PythonScript PythonScript q)tq.}q(U Python_magicqU;ò qUerrorsq)Uwarningsq)U Script_magicqKU_bodyq Tëif root: context = root path = '/'.join(context.getPhysicalPath()) MAX_REVISIONS = 30 id = container.scripts.sanitize_id(context.REQUEST.get('id')) try: tiddler = context.tiddlers[id] except: return '-' tags = getattr(tiddler, 'tags', '') if 'private' in tags.split() and 'Authenticated' not in context.REQUEST.AUTHENTICATED_USER.getRoles(): return '-' if 'onlyAdmin' in tags.split() and 'Manager' not in context.REQUEST.AUTHENTICATED_USER.getRoles(): return '-' revisions = [ container.scripts.get_modified(tiddler.HistoricalRevisions[rev['key']]) + ' ' + rev['key'] for rev in tiddler.manage_change_history() if not hasattr(tiddler.HistoricalRevisions[rev['key']], 'ignore_revision')][:MAX_REVISIONS] return '\n'.join(revisions) q Uidq U get_revisionsq U_codeq Tc@sed„ZdS(NcCs|o |antddƒttdƒƒƒ}d}tttdƒdƒtttdƒdƒd ƒƒ}ytttd ƒ|ƒ}Wn d SnXt |d d ƒ} dt| dƒƒjo(dttttdƒdƒdƒƒjod Sndt| dƒƒjo(dttttdƒdƒdƒƒjod Sntgi } t t|dƒƒƒD]„}ttt|dƒt|dƒƒdƒ oR| tttdƒdƒtt|dƒt|dƒƒƒdt|dƒƒqeqe~ d|…ƒ}tddƒ|ƒSdS(Ns/sjoinsgetPhysicalPathisscriptss sanitize_idsREQUESTsgetsidstiddlerss-stagsssprivatessplits AuthenticatedsAUTHENTICATED_USERsgetRoless onlyAdminsManagersmanage_change_historysHistoricalRevisionsskeysignore_revisions get_modifieds s (srootscontexts _getattr_spaths MAX_REVISIONSs containersids _getitem_stiddlersgetattrstagssappends$append0s _getiter_srevshasattrs revisions(srootscontexts _getattr_spaths MAX_REVISIONSs containersids _getitem_stiddlersgetattrstagssappends$append0s _getiter_srevshasattrs revisions((sScript (Python)s get_revisionss !6">>‡ (sNones get_revisions(sNones get_revisions((sScript (Python)ssqU func_defaultsq(NtqU _proxy_rolesq(UManagerqtqU _bind_namesq(cShared.DC.Scripts.Bindings NameAssignments qoq}qU_asgnsq}q(U name_contextqUcontextqU name_subpathqUtraverse_subpathqU name_m_selfqUscriptqUname_containerq U containerq!usbU__ac_local_roles__q"}q#U timmorganq$]q%UOwnerq&asU _filepathq'U1Script (Python):/ZiddlyWiki/actions/get_revisionsq(U_paramsq)U root=Noneq*U func_codeq+(cShared.DC.Scripts.Signature FuncCode q,oq-}q.(U co_argcountq/KU co_varnamesq0(Urootq1Ucontextq2U _getattr_q3Upathq4U MAX_REVISIONSq5U containerq6Uidq7U _getitem_q8Utiddlerq9Ugetattrq:Utagsq;UappendqUrevq?Uhasattrq@U revisionsqAtqBubu.cì(cProducts.PythonScripts.PythonScript PythonScript q)tq.}q(U Python_magicqU;ò qUerrorsq)Uwarningsq)U Script_magicqKU_bodyq TÑif root: context = root path = '/'.join(context.getPhysicalPath()) req = context.REQUEST revision = req.get('revision', None) title = req.get('id') update_timeline = req.get('updatetimeline', 0) id = container.scripts.sanitize_id(title) try: tiddler = context.tiddlers[id] except: return '-' tags = getattr(tiddler, 'tags', '') if 'private' in tags.split() and 'Authenticated' not in context.REQUEST.AUTHENTICATED_USER.getRoles(): return '-' if 'onlyAdmin' in tags.split() and 'Manager' not in context.REQUEST.AUTHENTICATED_USER.getRoles(): return '-' if revision: try: tiddler = tiddler.HistoricalRevisions[revision] except: pass modified = container.scripts.get_modified(tiddler) if hasattr(tiddler, 'created'): created = tiddler.created else: created = modified parts = [] parts.append(title) #parts.append(tiddler.title_or_id()) parts.append(tiddler(context, context.REQUEST).replace('\\', '\\s').replace('\n', '\\n').replace('<', '<').replace('>', '>')) parts.append(getattr(tiddler, 'modifier', '')) parts.append(modified) parts.append(created) try: parts.append(tiddler.tags) except: parts.append('') if update_timeline: parts.append('update timeline') else: parts.append('') return '\n'.join(parts) q Uidq Ugetq U_codeq TÀc@sed„ZdS(Nc#Cs@|o |antddƒttdƒƒƒ}ttdƒ}t|dƒdtƒ}t|dƒdƒ}t|dƒdd ƒ}ttt d ƒd ƒ|ƒ} yt ttd ƒ| ƒ} Wn d SnXt | ddƒ}dt|dƒƒjo(dttttdƒdƒdƒƒjod Sndt|dƒƒjo(dttttdƒdƒdƒƒjod Sn|o*yt t| dƒ|ƒ} Wq©q©Xnttt d ƒdƒ| ƒ}t| dƒot| dƒ}n|}g}t|dƒ|ƒt|dƒtttt| tttdƒƒdƒddƒdƒddƒdƒd d!ƒdƒd"d#ƒƒt|dƒt | d$dƒƒt|dƒ|ƒt|dƒ|ƒy t|dƒt| dƒƒWnt|dƒdƒnX|ot|dƒd%ƒnt|dƒdƒtddƒ|ƒSdS(&Ns/sjoinsgetPhysicalPathsREQUESTsgetsrevisionsidsupdatetimelineisscriptss sanitize_idstiddlerss-stagsssprivatessplits AuthenticatedsAUTHENTICATED_USERsgetRoless onlyAdminsManagersHistoricalRevisionss get_modifiedscreatedsappendsreplaces\s\ss s\nss>smodifiersupdate timeline(srootscontexts _getattr_spathsreqsNonesrevisionstitlesupdate_timelines containersids _getitem_stiddlersgetattrstagssmodifiedshasattrscreatedsparts(srootscontexts _getattr_spathsreqsNonesrevisionstitlesupdate_timelines containersids _getitem_stiddlersgetattrstagssmodifiedshasattrscreatedsparts((sScript (Python)sgets>!">>" m)!(sNonesget(sNonesget((sScript (Python)ssqU func_defaultsq(NtqU _proxy_rolesq(UManagerqtqU _bind_namesq(cShared.DC.Scripts.Bindings NameAssignments qoq}qU_asgnsq}q(U name_contextqUcontextqU name_subpathqUtraverse_subpathqU name_m_selfqUscriptqUname_containerq U containerq!usbU__ac_local_roles__q"}q#Uadminq$]q%UOwnerq&asU _filepathq'U'Script (Python):/ZiddlyWiki/actions/getq(U_paramsq)U root=Noneq*U func_codeq+(cShared.DC.Scripts.Signature FuncCode q,oq-}q.(U co_argcountq/KU co_varnamesq0(Urootq1Ucontextq2U _getattr_q3Upathq4Ureqq5UNoneq6Urevisionq7Utitleq8Uupdate_timelineq9U containerq:Uidq;U _getitem_qUtagsq?Umodifiedq@UhasattrqAUcreatedqBUpartsqCtqDubu.co(cProducts.PythonScripts.PythonScript PythonScript q)tq.}q(U Python_magicqU;ò qUerrorsq)Uwarningsq)U Script_magicqKU_bodyq UÜcontext = root latest = 0 for tiddler in context.tiddlers.objectValues('DTML Document'): modified = tiddler.bobobase_modification_time() if modified > latest: latest = modified return int(float(latest) * 100) q U _filepathq U6Script (Python):/beta/ZiddlyWiki/actions/get_timestampq U_codeq T°c@sed„ZdS(Nc Cs||ad}xUttttdƒdƒdƒƒD]/}t|dƒƒ}||jo |}q1q1Wtt|ƒdƒSdS(Nistiddlerss objectValuess DTML Documentsbobobase_modification_timeid( srootscontextslatests _getiter_s _getattr_stiddlersmodifiedsintsfloat( srootscontextslatests _getiter_s _getattr_stiddlersmodifiedsintsfloat((sScript (Python)s get_timestamps% (sNones get_timestamp(sNones get_timestamp((sScript (Python)ssqU func_defaultsq(NtqU _bind_namesq(cShared.DC.Scripts.Bindings NameAssignments qoq}qU_asgnsq}q(Uname_containerqU containerqU name_contextqUcontextqU name_subpathqUtraverse_subpathqU name_m_selfqUscriptqusbU__ac_local_roles__q}q U timmorganq!]q"UOwnerq#asUidq$U get_timestampq%U_paramsq&U root=Noneq'U func_codeq((cShared.DC.Scripts.Signature FuncCode q)oq*}q+(U co_argcountq,KU co_varnamesq-(Urootq.hUlatestq/U _getiter_q0U _getattr_q1Utiddlerq2Umodifiedq3Uintq4Ufloatq5tq6ubu.c(cProducts.PythonScripts.PythonScript PythonScript q)tq.}q(U Python_magicqU;ò qUerrorsq)Uwarningsq)U Script_magicqKU_bodyq T«# This isn't really being used right now cuz it's so ugly. # Logging out with Basic HTTP Auth is all but impossible. raise 'Unauthorized' ie = context.REQUEST.get('ie', 0) redirect_to = context.REQUEST.get('redirect_to', './') if ie: return '' % redirect_to else: return context.REQUEST.RESPONSE.redirect(redirect_to) q U _filepathq U*Script (Python):/ZiddlyWiki/actions/logoutq U_codeq Tc@s d„ZdS(Nc Cs„d‚tttdƒdƒddƒ}tttdƒdƒddƒ}|o d|Sn&ttttdƒd ƒd ƒ|ƒSdS( Ns UnauthorizedsREQUESTsgetsieis redirect_tos./sfsRESPONSEsredirect(s _getattr_scontextsies redirect_to(sroots _getattr_scontextsies redirect_to((sScript (Python)slogouts !! (slogout(slogout((sScript (Python)ssqU func_defaultsqNU_View_Permissionq(U AuthenticatedqtqU _bind_namesq(cShared.DC.Scripts.Bindings NameAssignments qoq}qU_asgnsq}q(Uname_containerqU containerqU name_contextqUcontextqU name_subpathqUtraverse_subpathqU name_m_selfqUscriptq usbU__ac_local_roles__q!}q"Uadminq#]q$UOwnerq%asUidq&Ulogoutq'U_paramsq(Urootq)U func_codeq*(cShared.DC.Scripts.Signature FuncCode q+oq,}q-(U co_argcountq.KU co_varnamesq/(Urootq0U _getattr_q1Ucontextq2Uieq3U redirect_toq4tq5ubu.c`(cOFS.Folder Folder q)tq.}q(UtitleqUU__ac_local_roles__q}qUtimq]qUOwnerq asU tagged_withq Ucq QUto_dateq Uc q QU_objectsq(}q(U meta_typeqUScript (Python)qUidqU get_modifiedqu}q(hhhU sanitize_idqu}q(hhhh u}q(hhhUto_datequtqU sanitize_idqUc!qQUidqUscriptsqU get_modifiedqUc"qQu.cß(cProducts.PythonScripts.PythonScript PythonScript q)tq.}q(U Python_magicqU;ò qUerrorsq)Uwarningsq)U Script_magicqKU_bodyq T›context = root # only Managers please if 'Manager' not in context.REQUEST.AUTHENTICATED_USER.getRoles(): raise 'Unauthorized' backup_id = 'tiddlers_backup_%s' % DateTime().strftime('%Y-%m-%d_%H%M%S') context.manage_addFolder(id=backup_id) tiddlers = context.tiddlers.manage_copyObjects(context.tiddlers.objectIds()) context[backup_id].manage_pasteObjects(tiddlers) return 'Backup saved to %s' % backup_id q U _filepathq U*Script (Python):/ZiddlyWiki/actions/backupq U_codeq Ttc@sed„ZdS(Nc CsÈ|adttttdƒdƒdƒƒjo d‚ndttƒdƒdƒ}ttd ƒd |ƒtttd ƒd ƒtttd ƒd ƒƒƒ}ttt|ƒdƒ|ƒd|SdS(NsManagersREQUESTsAUTHENTICATED_USERsgetRoless Unauthorizedstiddlers_backup_%ssstrftimes%Y-%m-%d_%H%M%Ssmanage_addFoldersidstiddlerssmanage_copyObjectss objectIdssmanage_pasteObjectssBackup saved to %s(srootscontexts _getattr_sDateTimes backup_idstiddlerss _getitem_(srootscontexts _getattr_sDateTimes backup_idstiddlerss _getitem_((sScript (Python)sbackups+ 9(sNonesbackup(sNonesbackup((sScript (Python)ssqU func_defaultsq(NtqU _bind_namesq(cShared.DC.Scripts.Bindings NameAssignments qoq}qU_asgnsq}q(Uname_containerqU containerqU name_contextqUcontextqU name_subpathqUtraverse_subpathqU name_m_selfqUscriptqusbU__ac_local_roles__q}q U timmorganq!]q"UOwnerq#asUidq$Ubackupq%U_paramsq&U root=Noneq'U func_codeq((cShared.DC.Scripts.Signature FuncCode q)oq*}q+(U co_argcountq,KU co_varnamesq-(Urootq.Ucontextq/U _getattr_q0UDateTimeq1U backup_idq2Utiddlersq3U _getitem_q4tq5ubu.c¡(cProducts.PythonScripts.PythonScript PythonScript q)tq.}q(U Python_magicqU;ò qUerrorsq)Uwarningsq)U Script_magicqKU_bodyq T˜context = root req = context.REQUEST try: latest = int(req.get('latest')) except: return '' else: updated = [str(container.get_timestamp(root=root))] for tiddler in context.tiddlers.objectValues('DTML Document'): if int(float(tiddler.bobobase_modification_time()) * 100) > latest: updated.append(tiddler.title) if len(updated) > 1: return '\n'.join(updated) else: return '' q Uidq Urefreshq U_codeq Tæc@sed„ZdS(Nc Cs |attdƒ}ytt|dƒdƒƒ}Wn dSnÈXtttdƒd|ƒƒg}xut tttdƒdƒd ƒƒD]O} tt t| d ƒƒƒd ƒ|jo t|d ƒt| d ƒƒqˆqˆWt |ƒdjotddƒ|ƒSndSdS(NsREQUESTsgetslatestss get_timestampsrootstiddlerss objectValuess DTML Documentsbobobase_modification_timeidsappendstitleis sjoin( srootscontexts _getattr_sreqsintslatestsstrs containersupdateds _getiter_stiddlersfloatslen( srootscontexts _getattr_sreqsintslatestsstrs containersupdateds _getiter_stiddlersfloatslen((sScript (Python)srefreshs"!%,!(sNonesrefresh(sNonesrefresh((sScript (Python)ssqU func_defaultsq(NtqU _proxy_rolesq(UManagerqtqU _bind_namesq(cShared.DC.Scripts.Bindings NameAssignments qoq}qU_asgnsq}q(U name_contextqUcontextqU name_subpathqUtraverse_subpathqU name_m_selfqUscriptqUname_containerq U containerq!usbU__ac_local_roles__q"}q#U timmorganq$]q%UOwnerq&asU _filepathq'U0Script (Python):/beta/ZiddlyWiki/actions/refreshq(U_paramsq)U root=Noneq*U func_codeq+(cShared.DC.Scripts.Signature FuncCode q,oq-}q.(U co_argcountq/KU co_varnamesq0(Urootq1Ucontextq2U _getattr_q3Ureqq4Uintq5Ulatestq6Ustrq7U containerq8Uupdatedq9U _getiter_q:Utiddlerq;Ufloatqubu.cí(cProducts.PythonScripts.PythonScript PythonScript q)tq.}q(U Python_magicqU;ò qUerrorsq)Uwarningsq)U Script_magicqKU_bodyq T# This script simply forces a login. # This should be only viewable by the "Authenticated" role. ie = context.REQUEST.get('ie', 0) redirect_to = context.REQUEST.get('redirect_to', './') if ie: return '' % redirect_to else: return context.REQUEST.RESPONSE.redirect(redirect_to) q U _filepathq U)Script (Python):/ZiddlyWiki/actions/loginq U_codeq T–c@sed„ZdS(Nc Cs~tttdƒdƒddƒ}tttdƒdƒddƒ}|o d|Sn&ttttdƒdƒd ƒ|ƒSdS( NsREQUESTsgetsieis redirect_tos./sfsRESPONSEsredirect(s _getattr_scontextsies redirect_to(sroots _getattr_scontextsies redirect_to((sScript (Python)slogins !! (sNoneslogin(sNoneslogin((sScript (Python)ssqU func_defaultsq(NtqU_View_Permissionq(U AuthenticatedqtqU _bind_namesq(cShared.DC.Scripts.Bindings NameAssignments qoq}qU_asgnsq}q(Uname_containerqU containerqU name_contextqUcontextqU name_subpathqUtraverse_subpathqU name_m_selfq Uscriptq!usbU__ac_local_roles__q"}q#Uadminq$]q%UOwnerq&asUidq'Uloginq(U_paramsq)U root=Noneq*U func_codeq+(cShared.DC.Scripts.Signature FuncCode q,oq-}q.(U co_argcountq/KU co_varnamesq0(Urootq1U _getattr_q2Ucontextq3Uieq4U redirect_toq5tq6ubu.c (cProducts.PythonScripts.PythonScript PythonScript q)tq.}q(U Python_magicqU;ò qUerrorsq)Uwarningsq)U Script_magicqKU_bodyq T¬if root: context = root path = '/'.join(context.getPhysicalPath()) req = req_args or context.REQUEST id = req.get('id') anon_edit = getattr(context, 'zw_anon_edit', 0) if not anon_edit and 'Authenticated' not in context.REQUEST.AUTHENTICATED_USER.getRoles(): raise 'Unauthorized' id = container.scripts.sanitize_id(id) tiddler = context.tiddlers[id] # add "deleted" tag if hasattr(tiddler, 'tags'): tags = tiddler.tags if tags: tags = tags + ' deleted' else: tags = 'deleted' tiddler.manage_changeProperties(tags=tags) else: tiddler.manage_addProperty('tags', 'deleted', 'string') try: tiddler.manage_delProperties(['ignore_revision']) except: pass return 'success' q U _filepathq U*Script (Python):/ZiddlyWiki/actions/deleteq U_codeq T%c@sehd„ZdS(NcCs{|o |antddƒttdƒƒƒ}|p ttdƒ}t|dƒdƒ}ttddƒ}| o(d ttttdƒd ƒd ƒƒjo d ‚nttt d ƒdƒ|ƒ}t ttdƒ|ƒ} t | dƒoDt| dƒ} | o| d} nd} t| dƒd| ƒnt| dƒdddƒyt| dƒdgƒWnnXdSdS(Ns/sjoinsgetPhysicalPathsREQUESTsgetsids zw_anon_editis AuthenticatedsAUTHENTICATED_USERsgetRoless Unauthorizedsscriptss sanitize_idstiddlersstagss deletedsdeletedsmanage_changePropertiessmanage_addPropertysstringsmanage_delPropertiessignore_revisionssuccess(srootscontexts _getattr_spathsreq_argssreqsidsgetattrs anon_edits containers _getitem_stiddlershasattrstags(srootsreq_argsscontexts _getattr_spathsreqsidsgetattrs anon_edits containers _getitem_stiddlershasattrstags((sScript (Python)sdeletes"!3   (sNonesdelete(sNonesdelete((sScript (Python)ssqU func_defaultsq(N}qtqU _proxy_rolesq(UManagerqtqU _bind_namesq(cShared.DC.Scripts.Bindings NameAssignments qoq}qU_asgnsq}q(Uname_containerqU containerqU name_contextqUcontextqU name_subpathqUtraverse_subpathq U name_m_selfq!Uscriptq"usbU__ac_local_roles__q#}q$Uadminq%]q&UOwnerq'asUidq(Udeleteq)U_paramsq*Uroot=None, req_args={}q+U func_codeq,(cShared.DC.Scripts.Signature FuncCode q-oq.}q/(U co_argcountq0KU co_varnamesq1(Urootq2Ureq_argsq3Ucontextq4U _getattr_q5Upathq6Ureqq7Uidq8Ugetattrq9U anon_editq:U containerq;U _getitem_qUtagsq?tq@ubu.cC§(cOFS.DTMLDocument DTMLDocument q)tq.}q(U_varsq}qUtitleqUUrawqTþB zw_main = main; main = function() { config.options.chkHttpReadOnly = (zw.loggedIn || zw.anonEdit) ? false : true; zw_main(); }; zw.get_url = function(with_hash) { var p = location.pathname; if(p.substring(p.length-1) != '/') p += '/'; var url = location.protocol + '//' + location.host + p; if(with_hash) url += '%23' + permaviewHash(); return url }; checkUnsavedChanges = false; confirmExit = false; config.messages.loginToEdit = 'You must be logged in to make changes. Click OK to log in now. Click Cancel to view the source.'; config.messages.errorDeleting = 'An error has occurred. Review your Zope error log for details.'; config.messages.errorSaving = 'An error has occurred. Review your Zope error log for details. If you navigate away from this page now, you will lose your changes.'; config.messages.noChangesMade = 'No changes were made, so nothing was saved.'; config.messages.protectedTiddler = 'You are not allowed to edit here. Click OK to view the source.'; config.messages.lockedTiddler = 'This tiddler is currently being edited by %s. Please try again in a few minutes.'; config.messages.lockedTiddlerYou = 'This tiddler is currently locked by you. Would you like to edit anyway?'; config.messages.viewRevisionTooltip = 'View this revision.'; config.messages.exportLinkLabel = 'save to file'; config.messages.exportLinkPrompt = 'Export to a TiddlyWiki file'; config.messages.importLinkLabel = 'update from file'; config.messages.importLinkPrompt = 'Import a TiddlyWiki file'; config.views.wikified.toolbarRevisions = {text: "revisions", tooltip: "View another revision of this tiddler", popupNone: "No revisions"}; config.shadowTiddlers.SiteTitle = "My ZiddlyWiki"; config.shadowTiddlers.SiteSubtitle = "a reusable non-linear personal/public/collaborative web notebook"; config.shadowTiddlers.GettingStarted = "To get started with this blank ZiddlyWiki, you'll need to modify the following tiddlers:\n* SiteTitle & SiteSubtitle: The title and subtitle of the site, as shown above\n* MainMenu: The menu (usually on the left)\n* DefaultTiddlers: Contains the names of the tiddlers that you want to appear when the ZiddlyWiki is opened\n"; config.shadowTiddlers.PageTemplate = "
\n
\n \n\n
\n
\n \n\n
\n
\n\n\n
\n
\n
\n
"; config.shadowTiddlers.ViewTemplate = "
\n
\n
, (created )
\n
\n
\n
\n
"; config.shadowTiddlers.SideBarOptions = "<><><><><><><><><>"; config.shadowTiddlers.OptionsPanel = "These InterfaceOptions are saved in your browser\n\n<