There is an "official" syntax for this. 

    @{component:controller/function/args}

To enable this and enable OEMBED I do:

def markmin(body):
    from gluon.contrib.autolinks import expand_one
    def component(text):
        items = text.split('/')
        controller, function, args = items[0], items[1], items[2:]
        return LOAD(controller, function, args=args, ajax=True).xml()
    return MARKMIN(body, url=True, environment={'component':component},
                   autolinks=lambda link: expand_one(link, {})).xml()
db.table.field.represent = lambda v,r: markmin(v or '')

This is done automatically by auth.wiki()

Massimo

On Wednesday, 8 May 2013 09:16:21 UTC-5, villas wrote:
>
> For anyone interested in my monologue... 

Function to my previous ideas,  a function as follows could handle both 
> internal and external URLs.  
> I also included a simple check for allowed domains:
>
> def __component(text):
>     if text and text.lower().strip().startswith('http'):
>         from urlparse import urlparse               
>         allowed_domains = [
>                          'www.domain1.com', 
>                          'www.domain2.com', 
>                        ]
>         if allowed_domains and not any(i in urlparse(text)[1] for i 
> inallowed_domains
> ): 
>             return H1('domain not allowed').xml()
>         else:
>             return LOAD(url=text, ajax=True).xml()
>     else:
>         items = text.split('/')
>         controller, function, args = items[0], items[1], items[2:]
>         return LOAD(controller, function, args=args, ajax=True).xml()
>
> MARKMIN(mytext,url=True,extra=dict(component = lambda value: __component(
> value)))
>
> In our Markmin we can then include...
>
> ``http://www.domain1.com/app/mycont/myfunc/arg1``:component<http://www.domain1.com/app/mycont/myfunc/arg1:component>
>
> and/or
>
> ``mycont/myfunc/arg1``:component
>
> .  
> Maybe someone has other better, or more flexibile, ideas?
>
>
> On Wednesday, May 8, 2013 2:09:28 AM UTC+1, villas wrote:
>>
>> I can do something like this...
>> mytext = """
>>
>> ``default/get_cms_article/4``:component
>>
>> """
>>
>> def __component(text):
>>     items = text.split('/')
>>     controller, function, args = items[0], items[1], items[2:]
>>     return LOAD(controller, function, args=args, ajax=True).xml()
>>
>> MARKMIN_ENV = dict( 
>>     component = lambda value: __component(value)
>> )  
>>
>> MARKMIN(mytext,url=True,extra=MARKMIN_ENV)
>>
>>
>> This uses LOAD.  What is recommended for loading components from other 
>> domains?  I think I have used JSON for that in the past,  but maybe there 
>> are other ways,  I am not sure that I am using the currently recommended 
>> methods for Markmin.
>>
>> Thanks!
>>
>>
>>
>>>

-- 

--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to