o k` @sddlZddlmZddlTddlmZmZmZmZddl m Z m Z m Z ddl mZddlmZddlmZGd d d eZdS) N) ConfigSection)*)ElementFragment find_elementtag)N__tag_)IRequestHandler)IWikiMacroProvider) extract_linkc@sPeZdZdZeeedZeddZ ddZ ddZ d d Z d d Z d dZdS)InterTracDispatcherzInterTrac dispatcher.F intertraca0This section configures InterTrac prefixes. Option names in this section that contain a `.` are of the format `.`. Option names that don't contain a `.` define an alias. The `.url` attribute is mandatory and is used for locating the other Trac. This can be a relative path when the other Trac environment is located on the same server. The `.title` attribute is used for generating a tooltip when the cursor is hovered over an InterTrac link. Example configuration: {{{#!ini [intertrac] # -- Example of setting up an alias: t = trac # -- Link to an external Trac: genshi.title = Edgewall's Trac for Genshi genshi.url = https://genshi.edgewall.org }}} cCs4td|j}|r|dr|d|jd<dSdS)Nz^/intertrac/(.*)linkT)rematch path_infogroupargs)selfreqrr5/usr/lib/python3/dist-packages/trac/wiki/intertrac.py match_request>s  z!InterTracDispatcher.match_requestc Cs|jdd}|dd}t|dkr+|\}}|dd|dddvr+d||f}dd lm}t|j|||}t|t t fr[t |d }|durRt t d |d |jd } n||d} || dS) Nr:r)z""z''z%s:"%s"r) web_contexthrefzVCan't view %(link)s. Resource doesn't exist or you don't have the required permission.)r)rgetsplitlentrac.web.chromerr env isinstancerrr TracErrorr attribunescaper rstripredirect) rrrpartsresolvertargetr link_frageltr rrrprocess_requestEs&     z#InterTracDispatcher.process_requestccs dVdS)N InterTracr)rrrr get_macros[s zInterTracDispatcher.get_macroscCs dtdfS)Nmessagesz+Provide a list of known InterTrac prefixes.)r)rnamerrrget_macro_description^s z)InterTracDispatcher.get_macro_descriptionc si|jD]6\}}|d}|dkr9|d|||dd}}|i} z|| |<Wqty8Yqw||<qdtdddfdd tjd d tt t td t t td fddt DS)N.rrtraczThe Trac Projectzhttps://trac.edgewall.org)titleurlc 3s|}t|tr#ttt|ttdt|dVdS|d}|rN|d|}tttjt||ddttj||dVdSdS)NzAlias for %(name)s)r5r:r9z /timeline)r ) r&strrtrtdstrongr r!a)prefixrr:r9) intertracsrrgenerate_prefixqs"    z9InterTracDispatcher.expand_macro..generate_prefixzwiki intertrac)class_Prefixz Trac Sitecsg|]}|qSrr).0p)rBrr sz4InterTracDispatcher.expand_macro..) intertrac_sectionoptionsrfind setdefault TypeErrorr rtabler<themsorted) r formatterr5contentkeyvalueidxr@ attributerr)rBrAr expand_macroas,        z InterTracDispatcher.expand_macroN)__name__ __module__ __qualname____doc__ implementsr r is_valid_default_handlerrrHrr1r3r6rWrrrrrs  r)r trac.configr trac.coretrac.util.htmlrrrrtrac.util.translationrr r trac.web.apir trac.wiki.apir trac.wiki.formatterr Componentrrrrrs