138
139
This creates calendars of the format Yearly/MM-DD
139
140
By leaving out the year, you can set birthdays, and anniversaries in this
140
141
calendar and not have to re-enter each year.
143
This creates a calendar which uses MonthCalendarTemplate for directly editing
144
nonexisting day pages:
145
[[MonthCalendar(,,,,,,MonthCalendarTemplate)]]
143
148
Dependencies = ['namespace','time']
174
179
return year, month
176
def parseargs(args, defpagename, defyear, defmonth, defoffset, defoffset2, defheight6, defanniversary):
181
def parseargs(args, defpagename, defyear, defmonth, defoffset, defoffset2, defheight6, defanniversary, deftemplate):
177
182
strpagename = args.group('basepage')
179
184
parmpagename = wikiutil.unquoteWikiname(strpagename)
219
224
parmanniversary = defanniversary
221
return parmpagename, parmyear, parmmonth, parmoffset, parmoffset2, parmheight6, parmanniversary
226
strtemplate = args.group('template')
228
parmtemplate = wikiutil.unquoteWikiname(strtemplate)
230
parmtemplate = deftemplate
231
return parmpagename, parmyear, parmmonth, parmoffset, parmoffset2, parmheight6, parmanniversary, parmtemplate
223
233
# FIXME: vvvvvv is there a better way for matching a pagename ?
224
234
_arg_basepage = r'\s*(?P<basepage>[^, ]+)?\s*'
228
238
_arg_offset2 = r',\s*(?P<offset2>[+-]?\d+)?\s*'
229
239
_arg_height6 = r',\s*(?P<height6>[+-]?\d+)?\s*'
230
240
_arg_anniversary = r',\s*(?P<anniversary>[+-]?\d+)?\s*'
231
_args_re_pattern = r'^(%s)?(%s)?(%s)?(%s)?(%s)?(%s)?(%s)?$' % \
241
_arg_template = r',\s*(?P<template>[^, ]+)?\s*' # XXX see basepage comment
242
_args_re_pattern = r'^(%s)?(%s)?(%s)?(%s)?(%s)?(%s)?(%s)?(%s)?$' % \
232
243
(_arg_basepage,_arg_year,_arg_month, \
233
_arg_offset,_arg_offset2,_arg_height6,_arg_anniversary)
244
_arg_offset,_arg_offset2,_arg_height6,_arg_anniversary,_arg_template)
236
247
def execute(macro, text):
254
265
return ('<p><strong class="error">%s</strong></p>' % _('Invalid MonthCalendar calparms "%s"!')) % (text2,)
256
267
has_calparms = 1 # yes!
257
cparmpagename, cparmyear, cparmmonth, cparmoffset, cparmoffset2, cparmheight6, cparmanniversary = \
258
parseargs(args2, thispage, currentyear, currentmonth, 0, 0, 0, 0)
268
cparmpagename, cparmyear, cparmmonth, cparmoffset, cparmoffset2, cparmheight6, cparmanniversary, cparmtemplate = \
269
parseargs(args2, thispage, currentyear, currentmonth, 0, 0, 0, 0, '')
262
273
if text is None: # macro call without parameters
263
parmpagename, parmyear, parmmonth, parmoffset, parmoffset2, parmheight6, anniversary = \
264
[thispage], currentyear, currentmonth, 0, 0, 0, 0
274
parmpagename, parmyear, parmmonth, parmoffset, parmoffset2, parmheight6, anniversary, parmtemplate = \
275
[thispage], currentyear, currentmonth, 0, 0, 0, 0, ''
266
277
# parse and check arguments
267
278
args = args_re.match(text)
269
280
return ('<p><strong class="error">%s</strong></p>' % _('Invalid MonthCalendar arguments "%s"!')) % (text,)
271
parmpagename, parmyear, parmmonth, parmoffset, parmoffset2, parmheight6, anniversary = \
272
parseargs(args, thispage, currentyear, currentmonth, 0, 0, 0, 0)
282
parmpagename, parmyear, parmmonth, parmoffset, parmoffset2, parmheight6, anniversary, parmtemplate = \
283
parseargs(args, thispage, currentyear, currentmonth, 0, 0, 0, 0, '')
274
285
# does url have calendar params and is THIS the right calendar to modify (we can have multiple
275
286
# calendars on the same page)?
299
311
p = Page(request, thispage)
300
312
qpagenames = '*'.join(map(wikiutil.quoteWikinameURL, parmpagename))
301
querystr = "calparms=%%s,%d,%d,%d,%%d" % (parmyear, parmmonth, parmoffset)
302
prevlink = p.url(request, querystr % (qpagenames, parmoffset2 - 1), 0)
303
nextlink = p.url(request, querystr % (qpagenames, parmoffset2 + 1), 0)
304
prevylink = p.url(request, querystr % (qpagenames, parmoffset2 - 12), 0)
305
nextylink = p.url(request, querystr % (qpagenames, parmoffset2 + 12), 0)
313
qtemplate = wikiutil.quoteWikinameURL(parmtemplate)
314
querystr = "calparms=%s,%d,%d,%d,%%d,%s" % (qpagenames, parmyear, parmmonth, parmoffset, qtemplate)
315
prevlink = p.url(request, querystr % (parmoffset2 - 1), 0)
316
nextlink = p.url(request, querystr % (parmoffset2 + 1), 0)
317
prevylink = p.url(request, querystr % (parmoffset2 - 12), 0)
318
nextylink = p.url(request, querystr % (parmoffset2 + 12), 0)
306
319
prevmonth = formatter.url(1, prevlink, 'cal-link') + '<' + formatter.url(0)
307
320
nextmonth = formatter.url(1, nextlink, 'cal-link') + '>' + formatter.url(0)
308
321
prevyear = formatter.url(1, prevylink, 'cal-link') + '<<' + formatter.url(0)
392
406
tiptext = '<br>'.join(titletext)
393
407
maketip_js.append("maketip('%s','%s','%s');" % (tipname, tiptitle, tiptext))
394
onmouse = '''onMouseOver="tip('%s')" onMouseOut="untip()"''' % tipname
408
onmouse = {'onMouseOver': "tip('%s')" % tipname,
409
'onMouseOut': "untip()"}
396
411
csslink = "cal-emptyday"
413
query = {'action': 'edit', 'template': parmtemplate}
397
416
r, g, b, u = (255, 255, 255, 0)
398
417
if wkday in wkend:
399
418
csslink = "cal-weekend"
401
420
for otherpage in parmpagename[1:]:
402
421
otherlink = "%s/%4d-%02d-%02d" % (otherpage, year, month, day)
403
422
otherdaypage = Page(request, otherlink)
409
428
r, g, b = (r, g+colorstep, b)
410
429
r, g, b = cliprgb(r, g, b)
411
430
style = 'background-color:#%02x%02x%02x' % (r, g, b)
412
fmtlink = formatter.url(1, daypage.url(request), csslink, attrs=onmouse) + str(day) + formatter.url(0)
431
fmtlink = formatter.url(1, daypage.url(request, query), csslink, **onmouse) + str(day) + formatter.url(0)
413
432
if day == currentday and month == currentmonth and year == currentyear:
414
433
cssday = "cal-today"
415
434
fmtlink = "<b>%s</b>" % fmtlink # for browser with CSS probs