##// END OF EJS Templates
registrar: add templatefunc to mark a function as template function (API)...
FUJIWARA Katsunori -
r28695:cc103bd0 default
parent child Browse files
Show More
@@ -37,6 +37,7 b' from . import ('
37 revset,
37 revset,
38 templatefilters,
38 templatefilters,
39 templatekw,
39 templatekw,
40 templater,
40 ui as uimod,
41 ui as uimod,
41 util,
42 util,
42 )
43 )
@@ -768,6 +769,7 b' extraloaders = ['
768 ('filesetpredicate', fileset, 'loadpredicate'),
769 ('filesetpredicate', fileset, 'loadpredicate'),
769 ('revsetpredicate', revset, 'loadpredicate'),
770 ('revsetpredicate', revset, 'loadpredicate'),
770 ('templatefilter', templatefilters, 'loadfilter'),
771 ('templatefilter', templatefilters, 'loadfilter'),
772 ('templatefunc', templater, 'loadfunction'),
771 ('templatekeyword', templatekw, 'loadkeyword'),
773 ('templatekeyword', templatekw, 'loadkeyword'),
772 ]
774 ]
773
775
@@ -216,3 +216,29 b' class templatefilter(_templateregistrarb'
216
216
217 Otherwise, explicit 'templatefilters.loadkeyword()' is needed.
217 Otherwise, explicit 'templatefilters.loadkeyword()' is needed.
218 """
218 """
219
220 class templatefunc(_templateregistrarbase):
221 """Decorator to register template function
222
223 Usage::
224
225 templatefunc = registrar.templatefunc()
226
227 @templatefunc('myfunc(arg1, arg2[, arg3])')
228 def myfuncfunc(context, mapping, args):
229 '''Explanation of this template function ....
230 '''
231 pass
232
233 The first string argument is used also in online help.
234
235 'templatefunc' instance in example above can be used to
236 decorate multiple functions.
237
238 Decorated functions are registered automatically at loading
239 extension, if an instance named as 'templatefunc' is used for
240 decorating in extension.
241
242 Otherwise, explicit 'templater.loadfunction()' is needed.
243 """
244 _getname = _funcregistrarbase._parsefuncdecl
@@ -1069,5 +1069,11 b' def stylemap(styles, paths=None):'
1069
1069
1070 raise RuntimeError("No hgweb templates found in %r" % paths)
1070 raise RuntimeError("No hgweb templates found in %r" % paths)
1071
1071
1072 def loadfunction(ui, extname, registrarobj):
1073 """Load template function from specified registrarobj
1074 """
1075 for name, func in registrarobj._table.iteritems():
1076 funcs[name] = func
1077
1072 # tell hggettext to extract docstrings from these functions:
1078 # tell hggettext to extract docstrings from these functions:
1073 i18nfunctions = funcs.values()
1079 i18nfunctions = funcs.values()
@@ -3693,3 +3693,26 b' utf8 filter:'
3693 [255]
3693 [255]
3694
3694
3695 $ cd ..
3695 $ cd ..
3696
3697 Test that template function in extension is registered as expected
3698
3699 $ cd a
3700
3701 $ cat <<EOF > $TESTTMP/customfunc.py
3702 > from mercurial import registrar
3703 >
3704 > templatefunc = registrar.templatefunc()
3705 >
3706 > @templatefunc('custom()')
3707 > def custom(context, mapping, args):
3708 > return 'custom'
3709 > EOF
3710 $ cat <<EOF > .hg/hgrc
3711 > [extensions]
3712 > customfunc = $TESTTMP/customfunc.py
3713 > EOF
3714
3715 $ hg log -r . -T "{custom()}\n" --config customfunc.enabled=true
3716 custom
3717
3718 $ cd ..
General Comments 0
You need to be logged in to leave comments. Login now