~ubuntu-branches/ubuntu/intrepid/moin/intrepid-updates

« back to all changes in this revision

Viewing changes to MoinMoin/macro/MonthCalendar.py

  • Committer: Bazaar Package Importer
  • Author(s): Sivan Greenberg
  • Date: 2006-07-09 19:28:02 UTC
  • Revision ID: james.westby@ubuntu.com-20060709192802-oaeuvt4v3e9300uj
Tags: 1.5.3-1ubuntu1
* Merge new debian version.
* Reapply Ubuntu changes:
    + debian/rules:
      - Comment out usage of control.ubuntu.in (doesn't fit!).
    + debian/control.in:
      - Dropped python2.3 binary package.
    + debian/control:
      - Dropped python2.3 binary, again.
      - Dropped python2.3-dev from Build-Depends-Indep.
    + debian/patches/001-attachment-xss-fix.patch:
      - Dropped this patch. It's now in upstream's distribution.

Show diffs side-by-side

added added

removed removed

Lines of Context:
85
85
        * fixed CSS for IE users
86
86
        * fix javascript for IE4
87
87
        * do a correct calculation of "today" using user's timezone
88
 
 
 
88
    * 2.2:
 
89
        * added template argument for specifying an edit template for new pages
89
90
 
90
91
    Usage:
91
92
        [[MonthCalendar(BasePage,year,month,monthoffset,monthoffset2,height6)]]
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.
 
142
 
 
143
This creates a calendar which uses MonthCalendarTemplate for directly editing
 
144
nonexisting day pages:
 
145
[[MonthCalendar(,,,,,,MonthCalendarTemplate)]]
141
146
"""
142
147
 
143
148
Dependencies = ['namespace','time']
173
178
        year = year + 1
174
179
    return year, month
175
180
 
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')
178
183
    if strpagename:
179
184
        parmpagename = wikiutil.unquoteWikiname(strpagename)
218
223
    else:
219
224
        parmanniversary = defanniversary
220
225
 
221
 
    return parmpagename, parmyear, parmmonth, parmoffset, parmoffset2, parmheight6, parmanniversary
 
226
    strtemplate = args.group('template')
 
227
    if strtemplate:
 
228
        parmtemplate = wikiutil.unquoteWikiname(strtemplate)
 
229
    else:
 
230
        parmtemplate = deftemplate
 
231
    return parmpagename, parmyear, parmmonth, parmoffset, parmoffset2, parmheight6, parmanniversary, parmtemplate
222
232
        
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)
234
245
 
235
246
 
236
247
def execute(macro, text):
254
265
            return ('<p><strong class="error">%s</strong></p>' % _('Invalid MonthCalendar calparms "%s"!')) % (text2,)
255
266
        else:
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, '')
259
270
    else:
260
271
        has_calparms = 0
261
272
 
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, ''
265
276
    else:
266
277
        # parse and check arguments
267
278
        args = args_re.match(text)
268
279
        if not args:
269
280
            return ('<p><strong class="error">%s</strong></p>' % _('Invalid MonthCalendar arguments "%s"!')) % (text,)
270
281
        else:
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, '')
273
284
 
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)?
279
290
    if has_calparms and cparmpagename == parmpagename:
280
291
        year,month = yearmonthplusoffset(parmyear, parmmonth, parmoffset + cparmoffset2)
281
292
        parmoffset2 = cparmoffset2
 
293
        parmtemplate = cparmtemplate
282
294
    else:
283
295
        year,month = yearmonthplusoffset(parmyear, parmmonth, parmoffset)
284
296
 
298
310
    colorstep = 85
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') + '&lt;' + formatter.url(0)
307
320
    nextmonth = formatter.url(1, nextlink, 'cal-link') + '&gt;' + formatter.url(0)
308
321
    prevyear  = formatter.url(1, prevylink, 'cal-link') + '&lt;&lt;' + formatter.url(0)
378
391
                daypage = Page(request, link)
379
392
                if daypage.exists():
380
393
                    csslink = "cal-usedday"
 
394
                    query = {}
381
395
                    r, g, b, u = (255, 0, 0, 1)
382
396
                    daycontent = daypage.get_raw_body()
383
397
                    header1_re = re.compile(r'^\s*=\s(.*)\s=$', re.MULTILINE) # re.UNICODE
391
405
                    tiptitle = link
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()"}
395
410
                else:
396
411
                    csslink = "cal-emptyday"
 
412
                    if parmtemplate:
 
413
                        query = {'action': 'edit', 'template': parmtemplate}
 
414
                    else:
 
415
                        query = {}
397
416
                    r, g, b, u = (255, 255, 255, 0)
398
417
                    if wkday in wkend:
399
418
                        csslink = "cal-weekend"
400
 
                    onmouse = ''
 
419
                    onmouse = {}
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