Ignore the very last line. Cut and paste error.
On Friday, December 21, 2012 12:43:34 AM UTC-6, Massimo Di Pierro wrote:
>
> Actually I like your solution. It could be even easier.
>
> class attr(object):
> def __init__(self,key,value):
> self.key=key
> self.value=value
>
> class DIV(object):
> def __init__(self,*components,**attributes):
> self.components = []
> self.attributes = attributes
> for x in components:
> if isinstance(x,attr): self.attributes[x.key]=x.value
> else: self.components.append(x)
>
> print DIV('hello','world',attr('data-something','value'),_class='myclass')
> <div data-something='value' class='myclass'>helloworld</div>
> ...
>
> DIV('hello','world',attr('data-something')='value')
>
>
>
>
>
>
>
> On Thursday, December 20, 2012 4:02:45 PM UTC-6, Arnon Marcus wrote:
>>
>> Pfff...
>>
>> The creator of web2py says he wishes he could do web3py some other way,
>> but can't...
>>
>> Am I the only one that finds that funny? :)
>>
>> web3py will end up however you wish it to end up as...
>>
>> You can do whatever you want with it, as it's already inherently
>> backwards incompatible (python 3.x), and is not even fully planned yet...
>>
>> If anyone at any time could change things, it would be you guys and at
>> this time...
>>
>> How about putting auxiliary attributes "front and center"?
>> Data-* attributes are already a part of the standard of HTML5 and
>> most-if-not-all browsers support them.
>>
>> Single-Page apps are also not even considered a novelty anymore, and
>> we're in a Renaissance of data-binding frameworks...
>>
>> I mean, I guess I could do this:
>>
>> def DATA(name, value):
>> return {('_data-' + name):str(value)}
>>
>>
>> Then:
>>
>> DIV( "{{MyVar}}", **DATA( "ng-controller", "MyController" ) )
>> =>
>> DIV( "{{MyVar}}", **{ "_data-ng-controller": "MyController" } )
>> =>
>> <div data-ng-controller="MyController">{{MyVar}}</div>
>>
>> and:
>>
>> DIV( "{{MyVar}}", **DATA( "bind", "text: MyVar" ) )
>> =>
>> DIV( "{{MyVar}}", **{ "_data-bind": "text: MyVar" } )
>> =>
>> <div data-bind="text: MyVar">{{MyVar}}</div>
>>
>>
>> But hell, you can make the TAG classes able to receive DATA
>> class-instances, that other people can sub-class/modify to implenet the
>> interface for different frameworks.
>>
>> A generic DATA class may look something like this:
>>
>> class DATA:
>>
>> namespace = ""
>>
>> aggregate = False
>> seperator = ": "
>> delimiter = ", "
>>
>> def __init__(self, **attrs):
>> self.attrs = dict(**attrs)
>> ...
>>
>> def parse( self ):
>> parsed = ""
>>
>> if aggregatre:
>> parsed += 'data-' + ns + '="'
>> for k, v in items(self.attrs):
>> parsed += k + seperator + v + delimiter
>> parsed = parsed[:-len(delimiter)] + '"'
>> else:
>> ns = namespace + '-' if namespace else ''
>> for k, v in items(self.attrs):
>> parsed += 'data-' + ns + k + '="' + v + '"'
>>
>> return parsed
>>
>>
>> And have your TAG classes do something like:
>>
>> class <TAG>:
>> def __init__(self, content, *vars, **args):
>> ...
>> parsed = [ var.parsed() for var in *vars if isinstanceof(var,
>> DATA) ]
>> ...
>> <use parsed somehow>
>> ...
>>
>>
>> Angular guys may then do something like this:
>>
>> DATA.namespace = "ng"
>> BUTTON( "Delete", DATA( click="destroy()", show="project._id".) )
>> =>
>> <button data-ng-click="destroy()"
>> data-ng-show="project._id">Delete</button>
>>
>> or:
>>
>> class ngDATA( DATA ):
>> namespace = "ng"
>>
>> + <use ngDATA instead of DATA in the html helpers>
>>
>>
>> Knockout guys could do this:
>>
>> DATA.namespace = "bind"
>> DATA.aggregate = True
>> SELECT( "", DATA( options = "$root.availableMeals",
>> value = "meal".
>> optionsText = "'mealName'" ) )
>> =>
>> <select data-bind="options: $root.availableMeals, value: meal,
>> optionsText: 'mealName'"></select>
>>
>> or:
>>
>> class koDATA( DATA ):
>> namespace = "bind"
>> aggregated = False
>>
>> + <use koDATA instead of DATA in the html helpers>
>>
>>
>> More advanced usages can then sub-class DATA and just re-implement the
>> parse function...
>>
>>
>> What say you?
>>
>> On Thursday, December 20, 2012 7:17:48 AM UTC-8, Massimo Di Pierro wrote:
>>>
>>> Oops. right. I wish there was a simple syntax but I cannot think about
>>> one.
>>>
>>> On Thursday, 20 December 2012 09:07:21 UTC-6, Niphlod wrote:
>>>>
>>>> correction, the _ in front is needed as always ....
>>>> DIV('content',**{'_data-something':'something value'})
>>>>
>>>> Il giorno giovedì 20 dicembre 2012 15:58:25 UTC+1, Massimo Di Pierro ha
>>>> scritto:
>>>>>
>>>>> They always did although the syntax is cumbersone
>>>>>
>>>>> DIV('content',**{'data-something':'something value'})
>>>>>
>>>>> On Thursday, 20 December 2012 04:16:54 UTC-6, Arnon Marcus wrote:
>>>>>>
>>>>>> Cool (!)
>>>>>>
>>>>>> Do the HTML helpers support HTML5's " data-* " attributes?
>>>>>> Can that be used for javascriupt frameworks like Knockout.js or
>>>>>> Angular.js ?
>>>>>>
>>>>>
--