Changeset 1715


Ignore:
Timestamp:
27.10.2011 22:01:19 (7 months ago)
Author:
zmsdev
Message:

Added support for anchors in ZMS internal-links: e.g. {$e1/e2#a3} provide details to link-object.

Location:
ZMS/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • ZMS/trunk/_objattrs.py

    r1557 r1715  
    617617        try: 
    618618          old = value 
    619           ref_obj = self.getLinkObj(value) 
    620           if ref_obj is not None: 
    621             # Repair link. 
    622             value = self.getRefObjPath( ref_obj) 
    623           elif value.find('{$__') < 0: 
    624             # Broken link. 
    625             value = '{$__' + value[2:-1] + '__}' 
     619          value = self.validateLinkObj(value) 
    626620          set = old != value 
    627621        except: 
     
    986980      #-- Url-Fields 
    987981      if datatype == _globals.DT_URL and v.startswith('{$') and not v.startswith('{$__') and self.getConfProperty('ZMS.InternalLinks.autocorrection',0)==1: 
    988         ref_obj = self.getLinkObj(v) 
    989         if ref_obj is not None: 
    990           # Repair link. 
    991           v = self.getRefObjPath(ref_obj) 
    992         elif v.find('{$') == 0 and v.find('{$__') < 0: 
    993           # Broken link. 
    994           v = '{$__' + v[2:-1] + '__}' 
     982        v = self.validateLinkObj(v) 
    995983       
    996984      # Hook for custom formatting. 
     
    11781166        if ref_obj is not None: 
    11791167          ref_obj.registerRefObj(self,self.REQUEST) 
    1180           # Repair link. 
    1181           value = self.getRefObjPath(ref_obj) 
    1182         elif value.startswith('{$') and not value.startswith('{$__'): 
    1183           # Broken link. 
    1184           value = '{$__' + value[2:-1] + '__}' 
     1168        value = self.validateLinkObj(value) 
    11851169       
    11861170      #-- Notify metaobj_manager. 
  • ZMS/trunk/_zreferableitem.py

    r1630 r1715  
    140140  #  ZReferableItem.getRefObjPath: 
    141141  # ---------------------------------------------------------------------------- 
    142   def getRefObjPath(self, ob): 
     142  def getRefObjPath(self, ob, anchor=''): 
    143143    ref = '' 
    144144    if ob is not None: 
     
    160160            s += clientId 
    161161          path = s + '@' + path 
    162       ref = '{$' + path + '}' 
     162      ref = '{$' + path + anchor + '}' 
    163163    return ref 
    164164 
     
    423423 
    424424  # ---------------------------------------------------------------------------- 
     425  #  ZReferableItem.validateLinkObj: 
     426  # 
     427  #  Validates internal links. 
     428  # ---------------------------------------------------------------------------- 
     429  def validateLinkObj(self, url): 
     430    if url.startswith('{$') and not url.startswith('{$__'): 
     431      ref_obj = self.getLinkObj(url) 
     432      ref_anchor = '' 
     433      if url.find('#') > 0: 
     434        ref_anchor = url[url.find('#'):-1] 
     435      if ref_obj is not None: 
     436        # Repair link. 
     437        url = self.getRefObjPath( ref_obj, ref_anchor) 
     438      else: 
     439        # Broken link. 
     440        url = '{$__' + url[2:-1] + '__}' 
     441    return url 
     442 
     443 
     444  # ---------------------------------------------------------------------------- 
    425445  #  ZReferableItem.getLinkObj: 
    426446  # 
     
    430450    ob = None 
    431451    if isInternalLink(url): 
    432       if url.find('{$__') != 0: 
     452      if not url.startswith('{$__'): 
    433453        docElmnt = None 
    434454        path = url[2:-1] 
     455        i = path.find('#') 
     456        if i > 0: 
     457          path = path[:i] 
    435458        i = path.find('@') 
    436459        if i > 0: 
     
    467490    REQUEST = _globals.nvl( REQUEST, self.REQUEST) 
    468491    if isInternalLink(url): 
     492      ref_anchor = '' 
     493      if url.find('#') > 0: 
     494        ref_anchor = url[url.find('#'):-1] 
    469495      ob = self.getLinkObj(url,REQUEST) 
    470496      if ob is None: 
     
    474500        if index_html == '': 
    475501          index_html = ob.getHref2IndexHtml(REQUEST) 
    476       return index_html 
     502      return index_html + ref_anchor 
    477503    elif isMailLink (url):  
    478504      prefix = 'mailto:' 
Note: See TracChangeset for help on using the changeset viewer.