FORUM

<namespace name="naml_tools"/>

<macro name="current_macro_source" dot_parameter="do" requires="naml_tools">
 <n.if.command_exists id="[n.current_command_id/]">
  <then>
   <n.macro_source.
    id="[n.current_command_id/]"
    base="[n.current_base_classes/]"
    breadcrumbs="[n.current_breadcrumbs/]"
   >
    <n.do/>
   </n.macro_source.>
  </then>
  <else>
   <n.invalid_command_html/>
  </else>
 </n.if.command_exists>
</macro>

<macro name="macro_viewer_header" dot_parameter="text">
 <n.put_in_head.>
  <script type="text/javascript">
   function openVideo() {
    $('#demo-video').slideDown();
   };
   function closeVideo() {
    $('#demo-video').slideUp();
   };
  </script>
 </n.put_in_head.>

 <div style="clear:both;padding-top:1em">
  <div style="float:left;margin-top:1.1em">
   <n.macro_options_dropdown/>
  </div>
  <h1 style="margin:.5em 0 1em"><n.text/></h1>
 </div>

 <div class="second-font" style="font-size:80%;float:right;margin-top:-4.3em;padding:.3em 0">
  <a href="http://naml.nabble.com/" target="_top">NAML documentation</a>
  &nbsp;
  <n.naml_video_link/>
 </div>
</macro>

<macro name="naml_video_link">
 <a href="#" onclick="openVideo()">Watch a video</a>
 <div id="demo-video" style="display:none;text-align:center;position:fixed;z-index:1001;width:100%;top:3em">
  <div class="shaded-bg-color rounded drop-shadow" style="width:450px;height:400px;margin:0 auto;text-align:center">
   <div style="text-align:right;padding:.3em .9em">
    <a href="#" onclick="closeVideo()"><t>Close</t></a>
   </div>
   <iframe width="425" height="349" src="http://www.youtube.com/embed/06hd0keRN80" frameborder="0" allowfullscreen="true"></iframe>
  </div>
 </div>
</macro>

<macro name="macro_viewer" requires="servlet">
 <n.naml_tools.>
        <n.current_macro_source.>
            <n.html>
                <head>
                    <meta name="robots" content="noindex,nofollow"/>
                    <n.title.><n.name/></n.title.>
                    <n.macro_viewer_stylesheet/>
                    <n.redirect_if_overridden/>
                    <n.codemirror_shared_head/>
                    <n.macro_viewer_js/>
                </head>
                <body>
                    <n.macro_viewer_header.>
                        <n.name/>
                    </n.macro_viewer_header.>

                    <n.important_notices/>
                    <n.source_panel/>
                </body>
            </n.html>
        </n.current_macro_source.>
 </n.naml_tools.>
</macro>

<macro name="title" dot_parameter="text" requires="macro_source">
  <title><n.root_node.subject/> | NAML - <n.text/></title>
</macro>

<macro name="breadcrumbs_content" requires="macro_source, naml_tools">
 <n.root_node.node_breadcrumbs />
 | NAML<sup class="important">alpha</sup>
 | <n.naml_breadcrumbs/>
</macro>

<macro name="breadcrumbs_content" requires="naml_tools">
 <n.root_node.node_breadcrumbs />
 | NAML<sup class="important">alpha</sup>
</macro>

<macro name="naml_breadcrumbs">
 <n.navigation_breadcrumbs.loop.parts.>
  <n.if.has_more_elements>
   <then>
    <a href="[n.part_path/]"><n.name/></a>
    <span class="weak-color breadcrumbs-arrow" style="padding:0 .25em">
     &rsaquo;
    </span>
   </then>
   <else.name/>
  </n.if.has_more_elements>
 </n.navigation_breadcrumbs.loop.parts.>
</macro>

<macro name="codemirror_shared_head">
 <style type="text/css">
  .CodeMirror-line-numbers {
   font-family: verdana, arial, sans-serif;
   font-size: 11pt;
   width: 2.2em;
   text-align: right;
   padding-right: .3em;
   line-height: normal;
   border-right-width:2px;
   border-right-style:solid;
  }
  #resizebar {
   height:8px;
   background:url('/images/grip.png') #d8d8d8 repeat;
   border:1px solid #aaa;
   cursor:n-resize;
  }
 </style>
 <script src="/util/codemirror/js/codemirror.js"></script>
 <script src="/util/codemirror/js/highlight.js"></script>
 <script src="/util/codemirror/js/stringstream.js"></script>
 <script src="/util/codemirror/js/tokenize.js"></script>
 <script src="/util/codemirror/js/parsexml.js"></script>
 <script type="text/javascript">
  <![CDATA[
  function newEditor(height) {
   var e = CodeMirror.fromTextArea('txt_basic', {
    parserfile: "parsexml.js",
    stylesheet: "/util/codemirror/css/xmlcolors.css",
    path: "/util/codemirror/js/",
    lineNumbers: true,
    height: height,
    indentUnit: 4,
   });
   var $wrapping = $('#txt_basic').next();
   $wrapping.attr('id', 'wrapping_basic');
   $wrapping.css('margin-top', '.4em');
   $wrapping.addClass('medium-border-color border1');
   addResizeBar($wrapping);
   $('div.CodeMirror-line-numbers', $wrapping).addClass('shaded-bg-color medium-border-color');
   return e;
  };

  function addResizeBar($wrapping) {
   $wrapping.after('<div id="resizebar"></div>');

   var dragging = false;
   function startDrag(e) {
    if ($(e.target).attr('id') == 'resizebar')
     dragging = true;
    if (dragging && typeof e.preventDefault != 'undefined')
     e.preventDefault();
   };
   function endDrag(e) {
    dragging = false;
   };
   function drag(e, x, y) {
    e.stopPropagation();
    if (dragging) {
     var h = y - $wrapping.offset().top - 5;
     $wrapping.height(h < 100? 100 : h);
    }
   };
   function onSelectStart() {
    if (dragging) return false;
   };

   var frame = window.frames[1];
   $(frame.document)
    .mousemove(function(e) {
     var x = e.pageX + $wrapping.offset().left;
     var y = e.pageY + $wrapping.offset().top;
     drag(e, x, y);
    })
    .mouseup(function(e) { endDrag(e); })
    .select(onSelectStart);

   $(document)
    .mousemove(function(e) { drag(e, e.pageX, e.pageY); })
    .mousedown(function(e) { startDrag(e); })
    .mouseup(function(e) { endDrag(e); })
    .select(onSelectStart);
  };
  var basicEditor;
  function inlineEditor(height, line, col) {
   if (!basicEditor)
    basicEditor = newEditor(height);
   function showCaret() {
    var $lines = $('#wrapping_basic div.CodeMirror-line-numbers').children();
    if (basicEditor.editor && $lines.size() > 5) {
     if (line) {
      if (col) {
       var ln = basicEditor.nthLine(line);
       basicEditor.selectLines(ln, col);
      } else
       basicEditor.jumpToLine(line);
     } else
      basicEditor.jumpToLine(1);
    } else
     setTimeout(showCaret, 200);
   };
   showCaret();
  };
  function getLineNumber(s, token) {
   var line = 1;
   var pos = s.indexOf(token);
   for (var i=0; i < pos; i++) {
    if (s.charAt(i) == '\n')
     line++;
   }
   return line;
  };
  ]]>
 </script>
</macro>

<macro name="macro_viewer_js">
 <script type="text/javascript">
  var isCustomTweak = <n.is_custom_tweak/>;
  var pBase = '&base=<n.hide_null.current_base_classes/>';
  var pBreadcrumbs = '<n.hide_null.current_breadcrumbs/>';
  pBreadcrumbs = pBreadcrumbs == ''? '' : '&breadcrumbs=' + pBreadcrumbs;
  var isSiteAdmin = <n.visitor.is_site_admin/>;

  var tweakFileContents = "<n.javascript_string_encode.hide_null.tweak_file_contents/>";
        var macroOpeningTag = "<n.javascript_string_encode.hide_null.macro_opening_tag/>";
  $(document).ready(function() {
   function lineSelector(e) {
    return 'div.line'+e.id.substring(8);
   };
   var $lineDivs = $('table.code div.line-contents');
   $lineDivs.hover(
    function() { $(lineSelector(this), $(this).parent().prev()).css('font-weight','bold').addClass('dark-bg-color'); },
    function() { $(lineSelector(this), $(this).parent().prev()).css('font-weight','normal').removeClass('dark-bg-color'); }
   );
   function fixHeights() {
    $lineDivs.each(function() {
     var h = $(this).outerHeight();
     var $table = $(this).parents('table');
     $(lineSelector(this), $table).height(h);
    });
   }
   $(window).resize(fixHeights);
   fixHeights();

   var $textarea = $('#txt_basic');
   var textareaValue = $textarea.val().replace(/\s*/g, '');
   var originalFileContents = tweakFileContents.replace(/\s*/g, '');
   if (textareaValue != originalFileContents) {
    showEditor();
   }
   window.onbeforeunload = function() {
    $textarea.val(basicEditor.getCode());
   };
  });

  function openNamlLogin() {
   $('#naml-login').slideDown();
  };

  function showEditor() {
   if (!isSiteAdmin) {
    openNamlLogin();
    return;
   }
   $('#saveButton,#cancelButton,#wrapping_basic,#resizebar').show();
   $('#editButton,#removeButton').hide();
   if (isCustomTweak)
    $('#current-source').hide();
   else
    $('#overrides-arrow').show();
   var line = getLineNumber(tweakFileContents, macroOpeningTag);
   inlineEditor('20em', line);
  };
  function saveChanges() {
   notice('Saving...');
   var call = '/template/NamlServlet.jtp?macro=save_tweak&id=<n.id/>' + pBase + pBreadcrumbs + Nabble.getClientID();
   var code = basicEditor.getCode();
   if (code.match(/^\s*$/) != null) {
    notice('Error Found', 3000, 1500);
    var msg = "Error: invalid macro code.";
    $('#error-box').html(formatError(msg)).show();
    return;
   }
   var params = { contents: code };
   $.post(call, params,
    function(data) {
     if (data.indexOf('Error:') == 0) {
      notice('Error Found', 3000, 1500);
      data = data.replace(/\n/g, "<br/>");
      data = data.replace(/\t/g, "<span style='padding:0 2em'>&nbsp;</span>");
      data = '<img src="/images/icon_alert_sm.png" class="image16"/> ' + data;
      var $errorBox = $('#error-box');
      $errorBox.html(data).show();
      if ($errorBox.height() > 150) {
       $errorBox.css('overflow-y','scroll').height(150);
      }
     } else {
      var url = '/template/NamlServlet.jtp?macro=macro_viewer&id=' + String(data) + pBase + pBreadcrumbs + Nabble.getClientID();
      window.location = url;
     }
    }
   );
  };
  function cancelChanges() {
   $('#saveButton,#cancelButton,#wrapping_basic,#resizebar,#error-box').hide();
   $('#editButton,#removeButton').show();
   if (isCustomTweak)
    $('#current-source').show();
   else
    $('#overrides-arrow').hide();
   basicEditor.setCode(tweakFileContents);
  };
  function removeOverride() {
   if (!isSiteAdmin) {
    openNamlLogin();
    return;
   }
   <n.if.is_override>
    <then>
     var confirmQuestion = "Do you really want to remove this override?";
     var nextUrl = "<n.use_text_encoder.path_to_overridden_macro/>";
    </then>
    <else>
     var confirmQuestion = "Do you really want to remove this macro?";
     var nextUrl = "<n.use_text_encoder.macro_deleted_path/>";
    </else>
   </n.if.is_override>
   if( !confirm(confirmQuestion) )
    return;
   var call = '/template/NamlServlet.jtp?macro=revert_tweak&id=<n.id/>' + pBase + pBreadcrumbs + Nabble.getClientID();
   $.get(call, function(data) {
    if (Nabble.trim(data) == 'ok')
     window.location = nextUrl + Nabble.getClientID();
   });
  };
 </script>
</macro>

<macro name="macro_viewer_stylesheet">
 <style type="text/css">
  table.code {
   width: 100%;
   font-family: verdana, arial, sans-serif;
   font-size: 11pt;
   border-collapse:collapse;
   margin:.35em 0;
  }
  table.code tr {
   vertical-align:top;
  }
  table.code td {
   padding: 0;
  }
  table.code td.line-number {
   width: 2em;
   text-align:right;
   padding-right:.3em;
   border-right-width:2px;
   border-right-style:solid;
  }
  table.code td.line-contents {
   padding-left: .5em;
  }
  table.code a {
   text-decoration:none;
  }
  table.code a:hover {
   text-decoration:underline;
  }
 </style>
</macro>

<macro name="source_panel" requires="macro_source">
 <n.editor_left_controls/>

 <n.documentation/>
 <div style="clear:both">
  <n.source_contents/>
  <n.overridden_macro_source/>
 </div>
</macro>

<macro name="source_contents">
 <n.if.not.is_binary>
  <then>
   <div id="error-box" class="error-message" style="padding:.5em;display:none"></div>
   <textarea id="txt_basic" style="display:none"><n.encode.tweak_file_contents/></textarea>
   <div id="current-source">
    <div id="overrides-arrow" style="display:none">
     <n.overrides_arrow/>
    </div>
    <n.show_notice_if_not_compiled/>
    <table class="code">
     <n.source_row/>
     <tr>
      <n.line_numbers_column/>
      <n.line_contents_column/>
     </tr>
    </table>
   </div>
  </then>
 </n.if.not.is_binary>
</macro>

<macro name="show_notice_if_not_compiled">
 <n.if.not.is_compiled>
  <then>
   <div class="info-message rounded" style="padding:.4em; margin:.2em 0">
    The source code below doesn't have navigation links because no usage has been compiled yet.
    You can <a href="[n.current_find_usages_path/]">try finding all usages of "<n.name/>"</a>.
   </div>
  </then>
 </n.if.not.is_compiled>
</macro>

<macro name="line_numbers_column">
 <td class="line-number weak-color medium-border-color shaded-bg-color">
  <n.rows.loop.>
   <div class="line[n.file_line_number/]"><n.file_line_number/></div>
  </n.rows.loop.>
 </td>
</macro>

<macro name="line_contents_column">
 <td class="line-contents">
  <n.rows.loop.>
   <div id="contents[n.file_line_number/]" class="line-contents">
    <n.current_row_contents/>
   </div>
  </n.rows.loop.>
 </td>
</macro>

<macro name="current_row_contents" requires="macro_row_list">
 <n.current_row.>
  <n.if.is_blank>
   <then>&nbsp;</then>
   <else>
    <n.loop.parts.>
     <n.if.not.is_null.id>
      <then>
       <n.remove_spaces_between_tags.>
        <a href="[n.part_path/]"><n.tag/></a>
        <n.part_tooltip/>
       </n.remove_spaces_between_tags.>
      </then>
      <else.name/>
     </n.if.not.is_null.id>
    </n.loop.parts.>
   </else>
  </n.if.is_blank>
 </n.current_row.>
</macro>

<macro name="part_tooltip" requires="command_info">
 <n.tooltip.>
  <n.if.is_binary>
   <then>
    <div class="bold">Binary</div>
    <n.tooltip_small_row.><b>Namespace:</b> <n.namespace_class/></n.tooltip_small_row.>
    <n.tooltip_parameters/>
   </then>
   <else>
    <div class="bold">Macro</div>
    <n.if.not.is_empty.required_namespaces>
     <then>
      <n.tooltip_small_row.><b>Requires:</b> <n.required_namespaces/></n.tooltip_small_row.>
     </then>
    </n.if.not.is_empty.required_namespaces>
    <n.tooltip_parameters/>
   </else>
  </n.if.is_binary>
 </n.tooltip.>
</macro>

<macro name="tooltip_parameters">
 <n.if.has_parameters>
  <then>
   <n.tooltip_small_row.>
    <b>Parameters:</b>
    <n.remove_spaces.parameter_names.loop.>
     <n.current_string/>
     <n.if.has_more_strings>
      <then>,&ensp;</then>
     </n.if.has_more_strings>
    </n.remove_spaces.parameter_names.loop.>
   </n.tooltip_small_row.>
  </then>
 </n.if.has_parameters>
</macro>

<macro name="important_notices">
 <n.if.has_tweak_exception>
  <then>
   <div class="weak-color info-message rounded" style="margin:.3em 0;padding:.3em .2em">
    <table style="width:100%;table-layout:fixed">
     <tr style="vertical-align:top">
      <td style="width:32px"><img src="/images/icon_alert.png" style="width:32px;height:32px"/></td>
      <td>
       <b>Error Found</b><br/>
       An error was found in the NAML code of this application &ndash;
       <span class="view-exception-details">
        <a href="#" onclick="showExceptionDetails(true)">View Details</a>
       </span>
       <span class="hide-exception-details invisible">
        <a href="#" onclick="showExceptionDetails(false)">Hide Details</a>
       </span>
       | <n.advanced_editor_link text="[t]Go to NAML Editor[/t]"/>

       <n.put_in_head.>
        <style type="text/css">
         div.stacktrace {
          width:100%;
          overflow:auto;
          white-space:nowrap;
          display:none;
          margin-top:.5em;
          font-size:80%;
         }
        </style>
        <script type="text/javascript">
         function showExceptionDetails(show) {
          if (show) {
           $('div.stacktrace').slideDown(function() { $(this).show() });
           $('span.view-exception-details').hide();
           $('span.hide-exception-details').show();
          } else {
           $('div.stacktrace').hide();
           $('span.view-exception-details').show();
           $('span.hide-exception-details').hide();
          }
         };
        </script>
       </n.put_in_head.>
       <div class="stacktrace">
        <n.regex_replace_all. pattern="\t+" replacement="&nbsp;&nbsp;">
         <n.regex_replace_all. pattern="\n+" replacement="[br/]">
          <n.use_html_encoder.encode.tweak_exception_message/>
         </n.regex_replace_all.>
        </n.regex_replace_all.>
       </div>
      </td>
     </tr>
    </table>
   </div>
  </then>
 </n.if.has_tweak_exception>
</macro>

<macro name="path_to_overridden_macro">
 <n.macro_viewer_path id="[n.macro_overridden_id/]" base="[n.current_base_classes/]" breadcrumbs="[n.current_breadcrumbs/]"/>
</macro>

<macro name="path_to_macro_which_overrides">
 <n.macro_viewer_path id="[n.macro_which_overrides_id/]" base="[n.current_base_classes/]" breadcrumbs="[n.current_breadcrumbs/]"/>
</macro>

<macro name="save_button" requires="macro_source">
 <button id="saveButton" class="toolbar" style="font-weight:bold;display:none" onclick="saveChanges()">
  Save Changes
 </button>
</macro>

<macro name="cancel_button" requires="macro_source">
 <button id="cancelButton" class="toolbar" style="font-weight:bold;display:none" onclick="cancelChanges()">
  Cancel
 </button>
</macro>

<macro name="edit_button" requires="macro_source">
 <button id="editButton" class="toolbar" style="font-weight:bold" onclick="showEditor()">
  <img src="/images/tool.png" style="width:16px;height:17px;vertical-align:-25%"/>
  <n.if.is_custom_tweak>
   <then>
    <n.if.is_override>
     <then>Edit this override</then>
     <else>Edit this macro</else>
    </n.if.is_override>
   </then>
   <else>Override this macro</else>
  </n.if.is_custom_tweak>
 </button>
</macro>

<macro name="remove_button" requires="macro_source">
 <n.if.is_custom_tweak>
  <then>
   <button id="removeButton" class="toolbar" style="font-weight:bold" onclick="removeOverride()">
    <img src="/images/remove_sm.png" style="width:15px;height:15px;vertical-align:-25%"/>
    <n.if.is_override>
     <then>Remove override</then>
     <else>Remove macro</else>
    </n.if.is_override>
   </button>
  </then>
 </n.if.is_custom_tweak>
</macro>

<macro name="editor_left_controls">
 <div style="margin:.5em 0">
  <n.if.not.is_binary>
   <then>
    <n.save_button/>
    <n.cancel_button/>
    <n.edit_button/>
    <n.remove_button/>
    &nbsp;&nbsp;
    <n.usages_link/>
   </then>
  </n.if.not.is_binary>
 </div>

 <n.if.not.visitor.is_site_admin>
  <then>
   <div id="naml-login" class="border1 medium-border-color" style="padding:1em; display:none">
    <div class="bold">You must login as an administrator of <n.root_node.subject/>.</div>
    <div class="weak-color" style="margin-bottom:1em">
     If you are not the administrator,
     you can <n.nabble_homepage_link.>create your own Nabble app</n.nabble_homepage_link.> and customize its NAML code!
    </div>

    <n.nextUrl_field.set_value value="[n.use_text_encoder.current_url/]"/>
    <n.login_form/>
   </div>
  </then>
 </n.if.not.visitor.is_site_admin>
</macro>

<macro name="usages_link" requires="macro_source">
 <a href="[n.current_find_usages_path/]" onclick="waitAnimation()">Usages of this macro</a>
</macro>

<macro name="macro_options_dropdown">
 <n.dropdown.
  id="macrodropdown"
  element="[n.options_button/]"
  loadOnClick="/template/NamlServlet.jtp?macro=macro_dropdown_later"
 >
  <n.menu_custom_macros/>
  <n.menu_configuration_macros/>
  <n.menu_create_macro/>
  <n.menu_macro_search/>
  <n.menu_view_logs/>
  <n.menu_separator/>
  <n.menu_open_advanced_editor/>
 </n.dropdown.>

 <n.custom_macros_contents/>
 <n.configuration_macros_contents/>
</macro>

<macro name="options_button">
 <button class="toolbar" style="font-weight:bold" title="[t]Click for more options[/t]">
  <img src="/images/gear.png" class="image16"/>
  <img src="/images/more.png" width="10" height="10"/>
 </button>
</macro>

<macro name="macro_dropdown_later" requires="servlet">
 <n.javascript_response/>
 <n.menu_create_macro/>
 <n.menu_open_advanced_editor/>
</macro>

<macro name="menu_custom_macros">
 dropdown.addCustomSubmenu('Customized macros', 'custom-macros-box');
</macro>

<macro name="menu_configuration_macros">
 <n.if.has_configuration_macros>
  <then>dropdown.addCustomSubmenu('Macros overridden by configurations', 'configuration-macros-box');</then>
 </n.if.has_configuration_macros>
</macro>

<macro name="custom_macros_contents">
 <n.custom_macros.list_macros_available id="custom-macros-box"/>
</macro>

<macro name="configuration_macros_contents">
 <n.if.has_configuration_macros>
  <then.configuration_macros.list_macros_available id="configuration-macros-box"/>
 </n.if.has_configuration_macros>
</macro>

<macro name="list_macros_available" parameters="id" requires="command_list">
 <n.put_in_head.>
  <style type="text/css">
   ul.dropdown-submenu {
    max-height:20em;
    overflow-y:auto;
   }
   ul.dropdown-submenu li {
    padding-right:1em;
   }
  </style>
 </n.put_in_head.>
 <ul id="[n.id/]" class="dropdown-submenu light-bg-color medium-border-color drop-shadow">
  <n.if.has_more_elements>
   <then>
    <n.loop.current_command.>
     <li class="nowrap">
      <a href="[n.command_path/]"><n.name/></a>
      <n.if.not.is_empty.required_namespaces>
       <then>
        <n.tooltip. delay="50" position="right">Requires <n.required_namespaces/></n.tooltip.>
       </then>
      </n.if.not.is_empty.required_namespaces>
     </li>
    </n.loop.current_command.>
   </then>
   <else>
    <li class="weak-color" style="padding:.4em .8em">None</li>
   </else>
  </n.if.has_more_elements>
 </ul>
</macro>

<macro name="find_usages_link">
 <a href="[n.current_find_usages_path/]">Find all usages of <n.name/></a>
</macro>

<macro name="menu_macro_search">
 dropdown.add('searchMacros', '<n.javascript_string_encode.macro_search_link/>');
</macro>

<macro name="macro_search_link">
 <a href="[n.macro_search_path/]">Search macros</a>
</macro>

<macro name="macro_search_path">
 <n.encode_url.>
  /template/NamlServlet.jtp?macro=macro_search_page
 </n.encode_url.>
</macro>

<macro name="menu_view_logs">
 dropdown.add('viewLogs', '<n.javascript_string_encode.root_node.view_logs_link/>');
</macro>

<macro name="menu_create_macro">
 <n.if.is_in_command name="dropdown">
  <then>
   dropdown.add('createMacro', '<n.javascript_string_encode.create_macro_link/>', 'display:none');
  </then>
  <else>
   <n.if.visitor.is_site_admin>
    <then>
     NabbleDropdown.show('createMacro');
    </then>
   </n.if.visitor.is_site_admin>
  </else>
 </n.if.is_in_command>
</macro>

<macro name="menu_open_advanced_editor">
 <n.if.is_in_command name="dropdown">
  <then>
   dropdown.add('openAdvEditor', '<n.javascript_string_encode.advanced_editor_link/>', 'display:none');
  </then>
  <else>
   <n.if.visitor.is_site_admin>
    <then>
     NabbleDropdown.show('openAdvEditor');
    </then>
   </n.if.visitor.is_site_admin>
  </else>
 </n.if.is_in_command>
</macro>

<macro name="advanced_editor_link" dot_parameter="text" parameters="title, class">
 <a href="[n.current_advanced_editor_path/]" class="[n.class/]" rel="nofollow" title="[n.title/]" target="_top">
  <n.default. to="[t]Go to Advanced Editor[/t]"><n.text/></n.default.>
 </a>
</macro>

<macro name="current_advanced_editor_path">
 <n.advanced_editor_path prev_url="[n.current_url/]"/>
</macro>

<macro name="create_macro_link">
 <a href="[n.create_macro_path/]">Create new macro</a>
</macro>

<macro name="macro_viewer_path" parameters="id,base,breadcrumbs">
 <n.encode_url.remove_spaces.>
  /template/NamlServlet.jtp?macro=macro_viewer
  &id=<n.encode_text.id/>
  <n.add_to_path name="base" value="[n.base/]" />
  <n.add_to_path name="breadcrumbs" value="[n.breadcrumbs/]" />
 </n.encode_url.remove_spaces.>
</macro>

<macro name="part_path" requires="command_info">
 <n.macro_viewer_path>
  <id><n.id/></id>
  <base><n.base/></base>
  <breadcrumbs><n.naml_breadcrumbs/></breadcrumbs>
 </n.macro_viewer_path>
</macro>

<macro name="macro_viewer_page_link">
 <a href="[n.macro_viewer_page_path/]" rel="nofollow">See how NAML generates this page</a>
</macro>

<macro name="macro_viewer_page_path">
 <n.macro_viewer_path>
  <id><n.page_template_command_id/></id>
  <base><n.page_base_classes/></base>
 </n.macro_viewer_path>
</macro>

<macro name="find_usages_path" parameters="id,base,breadcrumbs">
 <n.encode_url.remove_spaces.>
  /template/NamlServlet.jtp?macro=find_usages_page
  &id=<n.encode_text.id/>
  <n.add_to_path name="base" value="[n.base/]" />
  <n.add_to_path name="breadcrumbs" value="[n.breadcrumbs/]" />
 </n.encode_url.remove_spaces.>
</macro>

<macro name="current_find_usages_path">
 <n.find_usages_path>
  <id><n.current_command_id/></id>
  <base><n.current_base_classes/></base>
  <breadcrumbs><n.current_breadcrumbs/></breadcrumbs>
 </n.find_usages_path>
</macro>

<macro name="find_usages_page" requires="servlet">
 <n.if.command_exists id="[n.current_command_id/]">
  <then>
   <n.macro_source.
    id="[n.current_command_id/]"
    base="[n.current_base_classes/]"
    breadcrumbs="[n.current_breadcrumbs/]"
   >
    <n.find_usages_html/>
   </n.macro_source.>
  </then>
  <else>
   <n.invalid_command_html/>
  </else>
 </n.if.command_exists>
</macro>

<macro name="find_usages_html" requires="macro_source">
 <n.compile_if_needed/>
 <n.naml_tools.>
  <n.html>
   <head>
    <meta name="robots" content="noindex,nofollow"/>
    <n.title.>Usages of <n.name/></n.title.>
    <style type="text/css">
     div.usage-path { padding: .5em; }
    </style>
   </head>
   <body>
    <n.macro_viewer_header.>
     Usages of <n.name/>
    </n.macro_viewer_header.>

    <n.macro_usages.>
     <n.if.not.has_more_elements>
      <then>
       <b>No usages found.</b> Some possible reasons are:
       <ul>
        <li>This macro is called directly from the URL or from the java code;</li>
        <li>This macro is not used at all;</li>
       </ul>
       &laquo; <a href="javascript:void history.back()">Go Back</a>
      </then>
     </n.if.not.has_more_elements>

     <n.loop.>
      <div class="[n.alternate var='usages' first_value='usage-path' second_value='usage-path light-bg-color'/]">
       <n.remove_spaces_between_tags.>
        <n.current_usage.loop.>
         <a href="[n.current_command.command_path/]"><n.current_command.name/></a>
         <n.if.has_more_elements>
          <then><span style="padding:0 .5em">&rsaquo;</span></then>
         </n.if.has_more_elements>
        </n.current_usage.loop.>
       </n.remove_spaces_between_tags.>
      </div>
     </n.loop.>
    </n.macro_usages.>
   </body>
  </n.html>
 </n.naml_tools.>
</macro>

<macro name="redirect_if_overridden" requires="macro_source">
 <n.if.has_macro_which_overrides>
  <then>
   <script type="text/javascript">
    location = '<n.use_text_encoder.path_to_macro_which_overrides/>';
   </script>
  </then>
 </n.if.has_macro_which_overrides>
</macro>

<subroutine name="overridden_macro_source" requires="basic,nabble,servlet,html,macro_source">
 <n.if.has_macro_overridden>
  <then>
   <n.macro_source. id="[n.macro_overridden_id/]" base="[n.current_base_classes/]" breadcrumbs="[n.current_breadcrumbs/]">
    <n.overrides_arrow/>
    <table class="code">
     <n.source_row/>
     <tr>
      <n.line_numbers_column/>
      <n.line_contents_column/>
     </tr>
    </table>
    <n.overridden_macro_source/>
   </n.macro_source.>
  </then>
 </n.if.has_macro_overridden>
</subroutine>

<macro name="overrides_arrow" requires="macro_source">
 <div style="font-weight:bold;margin:.5em">
  <span style="font-size:300%;font-family:Arial,Sans-serif;line-height:.9em;vertical-align:-15%">&darr;</span>
  <n.if.is_custom_tweak>
   <then>Overrides administrator change</then>
   <else>
    <n.if.is_configuration_tweak>
     <then>Overrides configuration</then>
     <else>Overrides default macro</else>
    </n.if.is_configuration_tweak>
   </else>
  </n.if.is_custom_tweak>
 </div>
</macro>

<macro name="source_row" requires="macro_source">
 <tr>
  <td class="line-number weak-color medium-border-color shaded-bg-color" style="font-size:75%;padding-bottom:.4em">...</td>
  <td class="line-contents weak-color" style="font-size:75%;padding-bottom:.4em">
   in <a href="[n.source_path/]"><n.clean_source_name.source/></a>
  </td>
 </tr>
</macro>

<macro name="clean_source_name" dot_parameter="source">
 <n.regex_replace_all. pattern="^.+:" replacement="">
  <n.source/>
 </n.regex_replace_all.>
</macro>

<macro name="revert_tweak" requires="servlet">
 <n.if.visitor.is_site_admin>
  <then.macro_editor. id="[n.current_command_id/]" base="[n.current_base_classes/]" breadcrumbs="[n.current_breadcrumbs/]">
   <n.revert/>
   ok
  </then.macro_editor.>
 </n.if.visitor.is_site_admin>
</macro>

<macro name="save_tweak" requires="servlet">
 <n.if.visitor.is_site_admin>
  <then.macro_editor. id="[n.current_command_id/]" base="[n.current_base_classes/]" breadcrumbs="[n.current_breadcrumbs/]">
   <n.save contents="[n.get_parameter name='contents'/]"/>
  </then.macro_editor.>
 </n.if.visitor.is_site_admin>
</macro>

<macro name="command_path" requires="command_info">
 <n.macro_viewer_path>
  <id><n.use_text_encoder.id/></id>
  <base><n.base/></base>
  <breadcrumbs><n.naml_breadcrumbs/></breadcrumbs>
 </n.macro_viewer_path>
</macro>

<macro name="invalid_command_html">
 <n.naml_tools.>
  <n.html>
   <head>
    <meta name="robots" content="noindex,nofollow"/>
    <n.title.>Invalid Command</n.title.>
   </head>
   <body>
    <n.macro_viewer_header.>
     Invalid Command
    </n.macro_viewer_header.>

    <n.if.command_is_binary id="[n.current_command_id/]">
     <then>
      <h2>Command Not Found</h2>
      Meaning ID: <n.current_command_id/>
     </then>
     <else>
      <n.set_var. name="macro_name">
       <n.command_name id="[n.current_command_id/]"/>
      </n.set_var.>

      The macro you are looking for could not be found (it may have been modified recently):
      <div style="font-size:120%;margin:.6em">
       <n.bold.var name="macro_name"/> in <i><n.command_source_name id="[n.current_command_id/]"/></i>
      </div>

      <n.macro_search. query="[n.var name='macro_name'/]" search_by="name">
       <n.if.has_more_elements>
        <then>
         <div style="margin:1.5em 0 0">
          Here you can find other related macros:
         </div>
         <n.macro_results_table/>
        </then>
       </n.if.has_more_elements>
      </n.macro_search.>
     </else>
    </n.if.command_is_binary>
   </body>
  </n.html>
 </n.naml_tools.>
</macro>

<macro name="macro_search_page" requires="servlet">
 <n.naml_tools.>
  <n.html>
   <head>
    <meta name="robots" content="noindex,follow"/>
    <n.title.>Search Macros</n.title.>
    <script type="text/javascript">
     $(document).ready(function() {
      var $input = $('#search_field');
      $input.keydown(function(event) {
       if (event.keyCode == 13) {
        event.preventDefault();
        $('form').submit();
       }
      });
      $input.focus();
     });
    </script>
   </head>
   <body>
    <n.macro_viewer_header.>
     Macro Search
    </n.macro_viewer_header.>

    <n.if.is_empty.search_by_field.value>
     <then.search_by_field.set_value value="name"/>
    </n.if.is_empty.search_by_field.value>

    <n.form. macro="macro_search_page" method="GET">
     <img src="/images/search.png" class="image16"/>
     <input id="search_field" type="text" size="25" name="query" value="[n.hide_null.macro_search_query/]"/>
     <input class="toolbar action-button" type="submit" value="[t]Search[/t]"/>
     <div style="clear:both;padding:.3em 0 0 1em">
      <n.search_by_field.radio id="by_name" option_value="name"/>
      <label for="by_name">Macro by name</label><br/>
      <n.search_by_field.radio id="by_text" option_value="text"/>
      <label for="by_text">Macro source contains</label><br/>
     </div>
    </n.form.>

    <div style="margin-top:1em">
     <n.macro_search_results query="[n.macro_search_query/]" search_by="[n.search_by_field.value/]"/>
    </div>
   </body>
  </n.html>
 </n.naml_tools.>
</macro>

<macro name="macro_search_results" parameters="query, search_by">
 <n.macro_search. query="[n.query/]" search_by="[n.search_by/]">
  <n.if.not.has_more_elements>
   <then>
    <n.if.not.is_null.macro_search_query>
     <then>
      <div class="big-title second-font">No macros found.</div>
     </then>
    </n.if.not.is_null.macro_search_query>
   </then>
   <else>
    <div class="big-title second-font">
     <n.element_count/> macro(s) found.
    </div>
    <n.macro_results_table/>
   </else>
  </n.if.not.has_more_elements>
 </n.macro_search.>
</macro>

<macro name="macro_results_table" requires="command_list">
 <n.put_in_head.>
  <style type="text/css">
   table.macro-results {
    margin-top:.5em;
    border-spacing: 0;
   }
   table.macro-results td {
    padding: .4em 1.2em;
   }
  </style>
 </n.put_in_head.>
 <n.zebra_table_javascript table_selector="#macro-results"/>
 <table id="macro-results" class="macro-results weak-color">
  <tr class="shaded-bg-color bold">
   <td>Macro Name</td>
   <td>Requires</td>
   <td>Source File</td>
  </tr>
  <n.loop.current_command.>
   <tr style="[n.if.is_custom_tweak][then]font-weight:bold[/then][/n.if.is_custom_tweak]">
    <td><a href="[n.command_path/]"><n.name/></a></td>
    <td><em><n.hide_null.required_namespaces/></em></td>
    <td><n.clean_source_name.source/></td>
   </tr>
  </n.loop.current_command.>
 </table>
</macro>

<macro name="macro_search_query">
 <n.get_parameter name="query"/>
</macro>

<macro name="current_command_id">
 <n.get_parameter name="id"/>
</macro>

<macro name="current_base_classes">
 <n.get_parameter name="base"/>
</macro>

<macro name="current_breadcrumbs">
 <n.get_parameter name="breadcrumbs"/>
</macro>

<macro name="search_by_field" dot_parameter="do">
 <n.field. name="search_by"><n.do/></n.field.>
</macro>

<macro name="compile_if_needed">
 <n.if.not.is_compiled_all>
  <then.run_compile_all/>
 </n.if.not.is_compiled_all>
</macro>

<macro name="create_macro_page" requires="servlet">
 <n.naml_tools.>
  <n.html>
   <head>
    <meta name="robots" content="noindex,nofollow"/>
    <n.title.>Create New Macro</n.title.>
    <n.codemirror_shared_head/>
    <script type="text/javascript">
     <![CDATA[
     var defaultMacroBody = '<macro name="">\n\n</'+'macro>';
     $(document).ready(function() {
      var $textarea = $('#txt_basic');
      if ($textarea.val() == '')
       $textarea.val(defaultMacroBody);
      var canGoBack = history.length > 1;
      if (canGoBack)
       $('#go-back').show().before('<t>or</t> ');
      inlineEditor('27em', 1, 13);

      window.onbeforeunload = function() {
       $textarea.val(basicEditor.getCode());
      };
     });
     function formatError(msg) {
      msg = msg.replace(/\n/g, "<br/>");
      msg = msg.replace(/\t/g, "<span style='padding:0 2em'>&nbsp;</span>");
      msg = '<img src="/images/icon_alert_sm.png" class="image16"/> ' + msg;
      return msg;
     };

     function saveChanges() {
      notice('Saving...');
      var call = '/template/NamlServlet.jtp?macro=save_tweak' + Nabble.getClientID();
      var code = basicEditor.getCode();
      if (code.match(/^\s*$/) != null) {
       notice('Error Found', 3000, 1500);
       var msg = "Error: invalid macro code.";
       var $errorBox = $('#error-box');
       $errorBox.html(formatError(msg)).show();
       if ($errorBox.height() > 150) {
        $errorBox.css('overflow-y','scroll').height(150);
       }
       return;
      }
      var params = { contents: code };
      $.post(call, params,
       function(data) {
        if (data.indexOf('Error:') == 0) {
         notice('Error Found', 3000, 1500);
         $('#error-box').html(formatError(data)).show();
        } else {
         var url = '/template/NamlServlet.jtp?macro=macro_viewer&id=' + String(data) + Nabble.getClientID();
         window.location = url;
        }
       }
      );
     };
     ]]>
    </script>
   </head>
   <body>
    <n.macro_viewer_header.>
     Create New Macro
    </n.macro_viewer_header.>

    <n.important_notices/>

    <div style="clear:both">
     <n.macro_options_dropdown/>
     <button id="saveButton" class="toolbar" style="font-weight:bold" onclick="saveChanges()">
      Save Changes
     </button>
     <a id="go-back" href="javascript: void history.back()" style="display:none"><t>Go back</t></a>

     <div style="clear:both">
      <div id="error-box" class="error-message" style="padding:.5em;display:none"></div>
      <textarea id="txt_basic" style="display:none"></textarea>
     </div>
    </div>
   </body>
  </n.html>
 </n.naml_tools.>
</macro>

<macro name="macro_deleted_page" requires="servlet">
 <n.naml_tools.>
  <n.html>
   <head>
    <meta name="robots" content="noindex,nofollow"/>
    <n.title.>Macro Deleted</n.title.>
   </head>
   <body>
    <n.macro_viewer_header.>
     Macro Deleted
    </n.macro_viewer_header.>

    <n.important_notices/>

    <div style="clear:both">
     <h2 style="padding-bottom:1em">
      <img src="/images/success.png" class="image16"/>
      Macro successfully deleted.
     </h2>
     <n.macro_options_dropdown/>
    </div>

    <br/>
    <br/>
   </body>
  </n.html>
 </n.naml_tools.>
</macro>

<macro name="create_macro_path">
 <n.encode_url.>
  /template/NamlServlet.jtp?macro=create_macro_page
 </n.encode_url.>
</macro>

<macro name="macro_deleted_path">
 <n.encode_url.>
  /template/NamlServlet.jtp?macro=macro_deleted_page
 </n.encode_url.>
</macro>
  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • Twitter
  • RSS

Memblokir Email di Yahoo




Saat ini, banyak sekali email masuk yang menerangkan bahwa kita mendapatkan undian,
klain asuransi, dan lain-lain. Kita tidak pernah merasa mengikuti perlombaan apapun.
Apalagi yang datang kebanyakan dari luar negeri. Karena sangat mengganggu, kita blokir
saja alamat emailnya.

Caranya:

1.       Login ke email yang kita miliki (misalnya: Yahoo!.Mail).
 
2.       Klik Options > Mail Options.
 
 
3.       Klik menu Spam.
 
4.       Masukkan alamat email pengirim di kotak Add a blocked address.


5.       Klik tombol Add.

 
Setelah diblokir, alamat email yang bersangkutan tidak akan masuk ke inbox kita.
Lakukan hal yang sama untuk memblokir email yang lain. Jumlah alamat email yang bisa
diblokir di Yahoo!Mail maksimal 500 alamat email.

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • Twitter
  • RSS

cara uninstal program

langkah-langkah
  • klik star 
  • klik control panel
  • pilih program
  • pilih uninstal
  • pilih program
  • klik kanan pada program
  • pilih uninstal
  • lalu klik ok
  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • Twitter
  • RSS

cara mengclean up

langkah-langkah
  • klik star
  • klik all program
  • klik accesories
  • klik systemtools
  • klik clean up
  • klik ok
  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • Twitter
  • RSS

cara mendefragmen

langkah-langkah
  • klik star 
  • klik all program
  • klik accesories
  • klik systemtools
  • klik defragmen
  • lalu ok
  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • Twitter
  • RSS
RSS