每年的汇合用户宏

时间:2017-05-15 12:51:10

标签: java macros confluence

我希望对于经常编写用户宏以进行汇合的人来说,这应该是一个简单的问题。

我只是想在页面上显示一年中的一周。我创建了具有常用元数据的用户宏,并包含以下内容以仅显示当前的当前日期:

## @noparams
<div>$content.currentDate</div>

汇合的版本是5.9.8,我搜索了documentation,试图找到&#39; currentDate&#39;的任何方法。属性,但没有记录,currentDate字段甚至存在于ContentEntityObject($ content)上。我曾尝试使用&#39; $ content.currentDate.get(3)&#39;因为我相信Java会返回一年中的一周,但Confluence只会将整个块呈现为纯文本。

2 个答案:

答案 0 :(得分:0)

访问Java对象的速度可能会变得棘手。

理论上,如果你能够访问SimpleDateFormat,你会做这样的事情......

@noparams
#set( $dow = new SimpleDateFormat("EEEE").format($content.currentDate()) )
<div>$dow</div>

但遗憾的是,SimpleDateFormat无法通过速度轻松访问。

如果客户端渲染是可以接受的,那么它就更容易了 - 只需滚动自己的JavaScript:

@noparams
<div class="dow"></div>
<script>
  (function() {
      var days = ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'];
      Date.prototype.getDayName = function() {
          return days[ this.getDay() ];
      };
  })();

  AJS.toInit(function ($) {
    $('.dow').text( (new Date()).getDayName() );
  });
</script>

答案 1 :(得分:0)

基于@dvdsmpsn提供的内容,我的宏目前看起来像这样:

## @noparams

<div id='weeknumber'></div>

<script>
function getWeekNumber(d) {
    d.setHours(0,0,0,0);
    d.setDate(d.getDate() + 4 - (d.getDay()||7));
    var yearStart = new Date(d.getFullYear(),0,1);
    var weekNo = Math.ceil(( ( (d - yearStart) / 86400000) + 1)/7);
    return weekNo;
}

AJS.toInit(function ($) {
    $('#weeknumber').text(getWeekNumber(new Date()));
  });
</script>

有一些麻烦:

  1. 片刻已经在汇合处加载,但我似乎无法从宏环境中访问它
  2. 必须启用HTML宏环境才能使用Javascript。
  3. 宏必须在汇合页面的基础上使用,因为它的使用似乎覆盖了以只读格式查看时在编辑器中编写的所有后续文本(在运行jQuery方法之后)