%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /home/waritko/jetty-distribution-9.4.21.v20190926/webapps/ROOT/skins/flamingo/
Upload File :
Create Path :
Current File : //home/waritko/jetty-distribution-9.4.21.v20190926/webapps/ROOT/skins/flamingo/macros.vm

###############################################################
## Contains various standard Velocity macros automatically
## loaded and usable everywhere (in Velocity).
##
## It actually extends the macros.vm defined in the templates
## directory by redefining or adding new macros.
##
## Note that if you modify that file you will need to restart.
###############################################################

###
###    Message box
###
#macro(xwikimessageboxstart $title $message)
    <div class="centered panel panel-default xwikimessage">
     <div class="panel-heading">
      <div class="panel-title">$title</div>
     </div>
     <div class="panel-body">
      <p class="xwikimessage">$message</p>
#end
#macro(xwikimessageboxend)
      </div>
    </div>
#end

#macro(xwikimessagebox $title $message $urlyes $urlno $msgyes $msgno)
#xwikimessageboxstart($title $message)
      <div class="buttons"><a href="$urlyes" class="buttonwrapper"><input type="button" class="button" value="$msgyes" onclick="location='$urlyes'; return false;"/></a> <a href="$urlno" class="buttonwrapper"><input type="button" class="button secondary" value="$msgno" onclick="location='$urlno'; return false;"/></a></div>
#xwikimessageboxend()
#end

#**
 * Displays a submit button, i.e. an <tt>input</tt> element with <tt>type=submit</tt>.
 * For styling purposes, the button is wrapped in a span element.
 * @param name The value of the <tt>name</tt> attribute
 * @param shortcut The keyboard shortcut for this button. The value will be displayed
 *        as the title of the element. The actual shortcut is attached elsewhere, in
 *        the javascript code.
 * @param value The value of the <tt>value</tt> attribute, i.e. the text displayed on
 *        the button.
 * @param class The class to use.
 *#
#macro(submitButton $name $shortcut $value $class)
<input class="btn $!class" type="submit" name="$name"#if($keyboardShortcutsEnabled) title="$shortcut"#end value="$value"/>
#end
#**
 * Displays a submit button for the editor. This macro calls submitButton,
 * composing all its parameters based on the action's identifier and the
 * identifier of the corresponding localized resources.
 * @param action The identifier of the button's action.
 * @param resourceIdentifier The key used to identify the localized resources.
 * @param class The class to use.
 *#
#macro(editActionButton $action $resourceIdentifier $class)
#submitButton("action_${action}", $services.localization.render("core.shortcuts.edit.${resourceIdentifier}"), $services.localization.render($resourceIdentifier), $class)
#end

#**
 * AJAX Live table that displays XWiki data.
 *
 * Example of usage, in syntax 2.0:
 * <code>
 * {{velocity}}
 * #set($columns = [ "_avatar", "first_name", "last_name", "email"])
 * #set($columnsProperties = {
 *                  "first_name" : { "type" : "text" , "size" : 10, "link" : "view"},
 *                  "last_name" : { "type" : "text" , "size" : 10, "link" : "view"},
 *                  "email" : { "type" : "text" , "size" : 20, "link" : "editor"},
 *                  "_avatar" : { "type" : "none" , "size" : 20, "link" : "none", "html" : "true", "sortable":false }
 *                })
 * #set($options = {  "className":"XWiki.XWikiUsers",
 *                    "translationPrefix" : "platform.index.",
 *                    "tagCloud" : true,
 *                    "rowCount": 15,
 *                    "javascriptName" : "MyModule.myTable",
 *                    "description: "The description of this table here", })
 * #livetable("userstable" $columns $columnsProperties $options)
 * {{/velocity}}
 * </code>
 *
 * @param divid the id of the table div
 * @param collist the column list
 * @param colprops the columns properties
 * @param options the livetable options.
 *#
#macro(livetable $divid $collist $colprops $options)
## Open wiki syntax wrappers.
#if("$!options.outputOnlyHtml" != 'true')
## Do not indent:
#if($xwiki.getCurrentContentSyntaxId() != "xwiki/1.0")


## We don't clean the HTML because we control the markup and because we want to preserve the whitespace characters in the
## attribute values (e.g. if the live table id contains whitespaces)
{{html clean="false"}}
#else {pre} #end
#end
  ##
  ## SX deps.
  ##
  #set($ok = $xwiki.jsfx.use('js/xwiki/table/livetable.js', true))
  #set($ok = $xwiki.ssfx.use('js/xwiki/table/livetable.css', true))
  ##
  ## Options / defaults
  ##
  #if("$!options.translationPrefix" != '') #set($transprefix = $options.translationPrefix) #else #set($transprefix = '') #end
  #if("$!options.defaultOrder" == 'desc') #set($defaultOrder = 'desc') #else #set($defaultOrder = 'asc') #end
  #if("$!options.rowCount" != '') #set($count = $options.rowCount) #else #set($count = 15) #end
  #if("$!options.maxPages" != '') #set($maxPages = $options.maxPages) #else #set($maxPages = 10) #end
  #if("$!options.selectedColumn" != '') #set($selectedColumn = $options.selectedColumn) #end
  #if("$!options.callback" != '') #set($callback = $options.callback) #else #set($callback = '') #end
  #if("$!options.tagCloud" == '' || $options.tagCloud == false) #set($tagcloud=false) #else #set($tagcloud = true) #end
  #if ($options.selectedTags && $options.selectedTags.size() > 0)
    #set ($selectedTags = $options.selectedTags)
  #else
    #set ($selectedTags = [])
  #end
  #if("$!options.javascriptName" != '') #set($jsName = $options.javascriptName) #else #set($jsName = "livetable_$divid") #end
  #set ($topfilters = $options.topFilters)
  #if("$options.pageSize" == '' || $!options.pageSize == false) #set($hasPageSize=false) #else #set($hasPageSize = true) #end
  #if("$!options.pageSizeBounds" != '') #set($pageSizeBounds = $options.pageSizeBounds) #end
  #set ($queryFilters = $options.queryFilters)
  #if (!$queryFilters)
    #set ($queryFilters = 'currentlanguage,hidden')
  #end
  #set($classname = "$!options.className")
  ##
  ## Columns informations
  ##
  #set ($dataColumns = [])
  #set ($classParams = {})
  #foreach($colname in $collist)
    ## If the live table options don't specify which column to select then select the first non-special column.
    #if("$!selectedColumn" == '' && !$colname.startsWith('_'))
      #set($selectedColumn = $colname)
    #end
    #if($colname != '_actions')
      #set ($discard = $dataColumns.add($colname))
      #set($propClassName = "$!{colprops.get($colname).get('class')}")
      #if($propClassName != '')
        #set ($discard = $classParams.put("${colname}_class", $propClassName))
      #end
      #set ($propMatchType = "$!colprops.get($colname).match")
      #if ($propMatchType != '')
        #set ($discard = $classParams.put("${colname}_match", $propMatchType))
      #end
    #end
  #end
  #if("$!options.url" != '')
    #set($dataurl = $options.url)
  #else
    #set ($parameters = {
      'outputSyntax': 'plain',
      'transprefix': $transprefix,
      'classname': $classname,
      'collist': $stringtool.join($dataColumns, ','),
      'queryFilters': $queryFilters
    })
    #set ($discard = $parameters.putAll($classParams))
    #set ($resultPage = $options.resultPage)
    #if ("$!resultPage" == '')
      #set ($resultPage = 'XWiki.LiveTableResults')
    #end
    #set ($dataurl = $xwiki.getURL($resultPage, 'get', "$escapetool.url($parameters)&$!options.extraParams"))
  #end
  ##
  ## HTML Table
  ##
  #set ($htmlLiveTableId = $escapetool.xml($divid))
<div class="xwiki-livetable-container">
  #if("$!topfilters" !='') #set($hasTopFilters = true) #else #set($hasTopFilters = false) #end
  #if($tagcloud || $hasTopFilters)
  <div class="tipfilters">
  #end
  #if($hasTopFilters)
  <div id="${htmlLiveTableId}-topfilters" class="xwiki-livetable-topfilters-tip #if($tagcloud)splitted#end">
    <div>
      <div class="xwiki-livetable-topfilters-container">
      $topfilters
      </div>
      <div class="tippointer">
        <div></div>
      </div>
    </div>
  </div>
  #end
  #if($tagcloud)
    #set($discard = $xwiki.ssx.use('XWiki.TagCloud'))
    <div id="${htmlLiveTableId}-tagcloud" class="xwiki-livetable-tagcloud-tip hidden #if($hasTopFilters)splitted#end">
      <div>
        <div class="xwiki-livetable-tagcloud-container">
          <h2>$services.localization.render('platform.livetable.tagsHelp') $services.localization.render('platform.livetable.tagsHelpCancel')</h2>
          <div class="xwiki-livetable-tagcloud"></div>
        </div>
        <div class="tippointer">
          <div></div>
        </div>
      </div>
    </div>
  #end
  #if($tagcloud || $hasTopFilters)
  </div>
  #end
  <table id="${htmlLiveTableId}" class="xwiki-livetable">
    #if("$!options.description" != '')
      <caption class="sr-only">$options.description</caption>
    #end
    <tr>
      <td class="xwiki-livetable-pagination">
        <span id="${htmlLiveTableId}-limits" class="xwiki-livetable-limits"></span>
  #if($hasPageSize)
        <span id="${htmlLiveTableId}-pagesize" class="xwiki-livetable-pagesize">
            <span>$services.localization.render('platform.livetable.pagesizeLabel')</span>
            <span class="xwiki-livetable-pagesize-content" ></span>
        </span>
  #end
        <span id="${htmlLiveTableId}-ajax-loader" class="xwiki-livetable-loader hidden">
          <img src="$xwiki.getSkinFile('icons/xwiki/ajax-loader-large.gif')" alt="$escapetool.xml($services.localization.render('platform.livetable.loading'))" title="" />
        </span>
        <span class="controlPagination">
          <a title="$escapetool.xml($services.localization.render('platform.livetable.paginationPagePrevTitle'))" class="prevPagination" href="#"><span class="hidden">$services.localization.render('platform.livetable.paginationPagePrevTitle')</span></a>
          <a title="$escapetool.xml($services.localization.render('platform.livetable.paginationPageNextTitle'))" class="nextPagination" href="#"><span class="hidden">$services.localization.render('platform.livetable.paginationPageNextTitle')</span></a>
        </span>
        <span class="pagination">
          <span class="xwiki-livetable-pagination-text">$services.localization.render('platform.livetable.paginationPage')</span>
          <span class="xwiki-livetable-pagination-content" ></span>
        </span>
      </td>
    </tr>
    <tr>
      <td class="xwiki-livetable-display-container">
        <table class="xwiki-livetable-display">
          <thead class="xwiki-livetable-display-header">
            <tr>
            #set($columnCount = 0)
            #foreach($colname in $collist)
              #set($colprop = $colprops.get($colname))
              #set ($isFilterable = $colprop.filterable != false && $colname != '_actions' && $colprop.type != 'hidden')
              #set ($isSortable = $colprop.sortable != false && $colname != '_actions' && $colprop.type != 'hidden')
              ## Get the column's display name to use in the header.
              #set($displayName = "#getLivetableColumnDisplayName($colname, $colprop, $transprefix)")
              #set ($defaultHeaderClass = {'_actions': 'actions', '_avatar': 'avatar'})
              #set ($discard = $colprop.putIfAbsent('headerClass', $defaultHeaderClass.get($colname)))
              <th scope="col" class="xwiki-livetable-display-header-text $!colprop.headerClass
                  #if ($!colprop.type == 'hidden')hidden#end
                  #if ($isSortable)sortable #if ($colname == $selectedColumn)selected $defaultOrder#else asc#end#end">
                #if($isFilterable)<label for="xwiki-livetable-${htmlLiveTableId}-filter-${velocityCount}">#end
                #if($isSortable)<a data-rel="${colname}">#end
                $displayName
                #if($isSortable)</a>#end
                #if($isFilterable)</label>#end
                #set($columnCount = $mathtool.add($columnCount, 1))
              </th>
            #end
            </tr>
            #livetable_filters($collist $colprops $classname)
            <tr class="xwiki-livetable-initial-message">
              <td colspan="${columnCount}">
                <div class="warningmessage">$services.localization.render('platform.livetable.environmentCannotLoadTableMessage')</div>
              </td>
            </tr>
          </thead>
          <tbody id="${htmlLiveTableId}-display" class="xwiki-livetable-display-body"><tr><td>&nbsp;</td></tr></tbody>
        </table>
      </td>
    </tr>
    <tr>
      <td class="xwiki-livetable-pagination">
        <span class="xwiki-livetable-limits"></span>
        <span class="controlPagination">
          <a title="$escapetool.xml($services.localization.render('platform.livetable.paginationPagePrevTitle'))" class="prevPagination" href="#"><span class="hidden">$services.localization.render('platform.livetable.paginationPagePrevTitle')</span></a>
          <a title="$escapetool.xml($services.localization.render('platform.livetable.paginationPageNextTitle'))" class="nextPagination" href="#"><span class="hidden">$services.localization.render('platform.livetable.paginationPageNextTitle')</span></a>
        </span>
        <span class="pagination">
          <span class="xwiki-livetable-pagination-text">$services.localization.render('platform.livetable.paginationPage')</span>
          <span class="xwiki-livetable-pagination-content" ></span>
        </span>
      </td>
    </tr>
  </table>
  <div id="${htmlLiveTableId}-inaccessible-docs" class="hidden">
    #info($services.localization.render('rightsmanager.documentrequireviewrights'))
  </div>
  <div id="${htmlLiveTableId}-computed-title-docs" class="hidden">
    #info("(<span class='docTitleComputed'></span>)&nbsp;$services.localization.render('platform.livetable.docTitleComputedHint')")
  </div>
  <script type="text/javascript">
  //<![CDATA[
(function() {
  var startup = function(container) {
    // Make sure the LiveTable code is loaded (the WYSIWYG editor doesn't load the JavaScript code for instance).
    var liveTableCodeLoaded = XWiki && XWiki.widgets && XWiki.widgets.LiveTable;
    // Also make sure the live table is not already initialized.
    #set ($jsLiveTableId = $escapetool.javascript($divid))
    var liveTableElement = $('$jsLiveTableId');
    if (liveTableCodeLoaded && liveTableElement && !liveTableElement.__liveTable &&
        (liveTableElement == container || liveTableElement.descendantOf(container))) {
      #set ($liveTableParams = {
        'maxPages': $maxPages,
        'limit': $count,
        'selectedTags': $selectedTags
      })
      #if ($hasTopFilters)
        #set ($cssLiveTableId = $escapetool.css($divid))
        #set ($discard = $liveTableParams.put('filterNodes', [
          "$escapetool.h$cssLiveTableId .xwiki-livetable-display-filters",
          "${jsLiveTableId}-topfilters"
        ]))
      #end
      #if ($hasPageSize && "$!pageSizeBounds" != '')
        #set ($discard = $liveTableParams.put('pageSizeBounds', $pageSizeBounds))
      #end
      #set ($callbackParam = "#livetablecallback($divid $collist $colprops $transprefix), ")
      #if ($!callback != '')
        #set ($callbackParam = "$callback, ")
      #end
      window[$jsontool.serialize($jsName)] = liveTableElement.__liveTable = new XWiki.widgets.LiveTable("$dataurl",
        "$jsLiveTableId", $callbackParam$jsontool.serialize($liveTableParams));
      #if ($hasPageSize)
        document.observe("xwiki:livetable:${jsLiveTableId}:loadingEntries", function() {
          $('${jsLiveTableId}-pagesize').addClassName("hidden");
        });
        document.observe("xwiki:livetable:${jsLiveTableId}:loadingComplete", function() {
          $('${jsLiveTableId}-pagesize').removeClassName("hidden");
        });
      #end
      return true;
    }
    return false;
  };
  var init = function(event) {
    var elements = (event && event.memo.elements) || [$('body')];
    return elements.length > 0 && elements.some(startup);
  };
  // Initialize the live table on page load or after the live table code has been loaded.
  (XWiki && XWiki.isInitialized && init()) || document.observe('xwiki:livetable:loading', init);
  // Initialize the live table when it is added after the page is loaded.
  document.observe('xwiki:dom:updated', init);
})();
   //]]>
  </script>
</div>## xwiki-livetable-container
## Close wiki syntax wrappers. Do not modify the indentation below or it will generate unwanted paragraphs!
#if("$!options.outputOnlyHtml" != 'true')#if($xwiki.getCurrentContentSyntaxId() != "xwiki/1.0"){{/html}}

#else{/pre}#end##
#end## end-wrappers
#end## end-livetable-macro

#macro (livetable_filter $column $columnProperties $xproperty)
  #set ($filterType = $columnProperties.type)
  #if ("$!filterType" == '')
    ## Determine the filter type from the xproperty type.
    #set ($filterTypeByXPropertyType = {
      'Boolean': 'boolean',
      'DBList': 'suggest',
      'DBTreeList': 'suggest',
      'Date': 'date',
      'Email': 'text',
      'Groups': 'suggest',
      'Number': 'number',
      'Page': 'suggest',
      'StaticList': 'list',
      'String': 'text',
      'TextArea': 'text',
      'Users': 'suggest'
    })
    #set ($filterType = $filterTypeByXPropertyType.get($xproperty.classType))
    #if ("$!filterType" == '')
      ## If we get here then it means the column is filterable but we could not determine the filter type. Use the text
      ## filter in this case because it is the most generic.
      #set ($filterType = 'text')
    #end
  #end
  #if ($filterType == 'list' || $filterType == 'multilist')
    <select id="xwiki-livetable-${htmlLiveTableId}-filter-$velocityCount" name="$column"
      #if ($filterType == 'multilist')
        #set ($discard = $xwiki.jsfx.use('js/xwiki/table/livetablemulti.js', true))
        #set ($discard = $xwiki.linkx.use($services.webjars.url('bootstrap-select', 'css/bootstrap-select.css'),
          {'type': 'text/css', 'rel': 'stylesheet'}))
        class="xwiki-livetable-multilist" multiple="multiple">
      #else
        ><option value="">$services.localization.render('platform.livetable.selectAll')</option>
        <option disabled="disabled">────</option>
      #end
    #set ($storedValues = $xproperty.listValues)
    #set ($displayedValues = $xproperty.mapValues)
    #foreach ($storedValue in $storedValues)
      #set ($l10nKey = "${xproperty.className}_${column}_$storedValue")
      #set ($displayedValue = $services.localization.render($l10nKey))
      #if ($displayedValue == $l10nKey)
        #set ($displayedValue = $displayedValues.get($storedValue).value)
      #end
      <option value="$storedValue">$displayedValue</option>
    #end
    </select>
  #elseif ($filterType == 'boolean')
    <select id="xwiki-livetable-${htmlLiveTableId}-filter-$velocityCount" name="$column">
      <option value="">$services.localization.render('platform.livetable.selectAll')</option>
      <option value="0">$services.localization.render('no')</option>
      <option value="1">$services.localization.render('yes')</option>
    </select>
  #elseif ($filterType == 'text' || $filterType == 'number')
    <input id="xwiki-livetable-${htmlLiveTableId}-filter-$velocityCount" name="$column" type="text"
      #if ("$!columnProperties.size" != '')size="$!escapetool.xml($columnProperties.size)"#end
      title="$escapetool.xml($services.localization.render('platform.livetable.filtersTitle',
        [$services.localization.render("${transprefix}$column")]))" />
  #elseif ($filterType == 'date')
    #set ($discard = $xwiki.jsfx.use('js/xwiki/table/livetabledate.js', true))
    #set ($discard = $xwiki.linkx.use($services.webjars.url('bootstrap-daterangepicker',
      'css/bootstrap-daterangepicker.css'), {'type': 'text/css', 'rel': 'stylesheet'}))
    ## Hidden input for date fields allows us to send timestamps to the server while displaying pretty dates.
    <input name="$column" type="hidden" />
    #set ($dateFormat = $xproperty.getValue('dateFormat'))
    #if ("$!dateFormat" == '')
      #set ($dateFormat = $xwiki.getXWikiPreference('dateformat', 'yyyy/MM/dd HH:mm'))
    #end
    <input id="xwiki-livetable-${htmlLiveTableId}-filter-$velocityCount" type="text"
      data-type="date" data-dateformat="$escapetool.xml($dateFormat)"
      #if ("$!columnProperties.size" != '')size="$!escapetool.xml($columnProperties.size)"#end
      title="$escapetool.xml($services.localization.render('platform.livetable.filtersTitle',
      [$services.localization.render("${transprefix}$column")]))" />
  #elseif ($filterType == 'suggest' && $xproperty)
    #set ($discard = $xwiki.linkx.use($services.webjars.url('selectize.js', 'css/selectize.bootstrap3.css'),
      {'type': 'text/css', 'rel': 'stylesheet'}))
    #set ($discard = $xwiki.ssfx.use('uicomponents/suggest/xwiki.selectize.css', true))
    #set ($discard = $xwiki.jsfx.use('uicomponents/suggest/suggestPropertyValues.js',
      {'forceSkinAction' : true, 'language' : $xcontext.locale}))
    <select id="xwiki-livetable-${htmlLiveTableId}-filter-$velocityCount" name="$!escapetool.xml($column)"
      class="suggest-propertyValues" multiple="multiple" size="1"
      data-className="$!escapetool.xml($xproperty.className)" data-propertyName="$!escapetool.xml($xproperty.name)">
    </select>
  #end
#end

##
##
#**
 * Generates a vertical menu item from an object (a map)
 *
 * Expected format:
 * item = map with the following fields:
 *        'id'       : mandatory
 *        'name'     : the text displayed for the corresponding menu item;
 *                     optional, defaults to
 *                     $services.localization.render("$!{translationPrefix}${item.id}")
 *        'url'      : the "action" of the menu item; optional
 *        'cssClass' : a specific css class for the menu item for custom
 *                     styling; optional, defaults to ''
 *        'children' : vector of items, allowing to recursively define submenus
 *
 * @param $item the menu item object, in the format described above
 * @param $level the current level of the item, of the form '\*+'; the number of
 *        stars indicates the depth of the item in the menu
 * @param $options a map of options, where the following entries are currently used:
 *        'translationPrefix' :  the translation prefix added to the id of each
 *                     item, in order to generate the name; ignored for items whose
 *                     name is specified
 *        'crtItemId': identifier of the current menu item (for differential styling)
 *#
#macro(verticalNavigationItem $item $level $options)
  #set ($class = "$!{item.cssClass}")
  #set ($hasChildren = ($item.children && $item.children.size() > 0))
  #if ($hasChildren)
    #set ($class = "$class group")
  #end
  #if ($options.crtItemId == $item.id)
    #set ($class = "$class current")
    #if ($hasChildren)
      #set ($class = "$class current-group")
    #end
  #end
  #set ($class = $class.trim())
  #set ($name = "$!{item.name}")
  #if ($name == '')
    #set ($name = $services.localization.render("$!{options.translationPrefix}${item.id}"))
  #end
  $level (% id="vertical-menu-${item.id}" class="${class}" %){{html}}<a #if ("$!{item.url}" != '')href="$item.url"#{end}>#if($item.glyphicon)$services.icon.renderHTML($item.glyphicon) #end$name</a>{{/html}}
  #if ($hasChildren)
    #set ($children = [])
    #sortCollectionOfMapsByField($item.children, 'order', 99999, 'asc', $children)
    #foreach ($child in $children)
      #verticalNavigationItem($child $level.concat('*') $options)
    #end
  #end
#end

#**
 * Start a breadcrumb.
 *
 * Should be used in HTML.
 *#
#macro(breadcrumb_start)
  <ol class="breadcrumb">
#end

#**
 * End of a breadcrumb
 *
 * Should be used in HTML.
 *#
#macro(breadcrumb_end)
  </ol>
#end

#**
 * Display a line in the breadcrumb
 *
 * Should be used in HTML.
 *#
#macro(breadcrumb_line $link $title)
  <li><a href="$link">$title</a></li>
#end

#**
 * Display the current line in the breadcrumb
 *
 * Should be used in HTML.
 *#
#macro(breadcrumb_current_line $title)
  <li class="active">$title</li>
#end

###
### Glyph Icon
###
### @param iconName The name of the icon to display, without the glyphicon prefix (eg: 'globe')
#macro(glyphicon $iconName)
#if("$!iconName"!='')<span class="glyphicon glyphicon-${iconName}"></span>#end
#end
#macro(displayDocumentTitle $stepTitle $titleHint)
<div class="row document-header">
  <div class="document-info col-xs-12">
    <div id="document-title"><h1>$stepTitle</h1></div>
    #if ($titleHint)
      <div class="xdocLastModification">$titleHint</div>
    #end
  </div>
</div>
<hr/>
#end

#**
 * Pulls all the JavaScript and CSS resources needed by the date & time picker.
 *#
#macro (dateTimePicker_import)
  #set ($discard = $xwiki.linkx.use(
    $services.webjars.url('Eonasdan-bootstrap-datetimepicker', 'css/bootstrap-datetimepicker.min.css'),
    {'type': 'text/css', 'rel': 'stylesheet'}
  ))
  #set ($discard = $xwiki.jsfx.use('dateTimePicker.js', true))
#end

#**
 * Pulls all the JavaScript and CSS resources needed by the color picker.
 *#
#macro (colorPicker_import)
  #set ($discard = $xwiki.linkx.use($services.webjars.url('colpick', 'css/colpick.css'),
    {'type': 'text/css', 'rel': 'stylesheet'}))
  #set ($discard = $xwiki.ssfx.use('colorPicker.css'))
  #set ($discard = $xwiki.jsfx.use('colorPicker.js', true))
#end

#macro (colorPicker_input $parameters)
  #set ($discard = $parameters.putIfAbsent('class', 'form-control color-picker type-color'))
  #if ("$!parameters.disabled" == 'true')
    #set ($parameters.disabled = 'disabled')
  #else
    #set ($discard = $parameters.remove('disabled'))
  #end
  <div class="input-group">
    <input type="text"
      #foreach ($parameter in $parameters.entrySet())
        $escapetool.xml($parameter.key)="$!escapetool.xml($parameter.value)"
      #end
    />
    <span class="input-group-addon"><span class="color-preview"></span></span>
  </div>
#end

Zerion Mini Shell 1.0