Opened 9 years ago

Closed 9 years ago

#480 closed defect (fixed)

PHP example-menu list all folders in the plugin path as plugins and all folders in skin path as skins

Reported by: gocher Owned by: gogo
Priority: low Milestone:
Component: Plugin_Other Version: trunk
Severity: minor Keywords: full_example.html
Cc:

Description (last modified by gocher)

full_example.htm:

<html>

  <!--------------------------------------:noTabs=true:tabSize=2:indentSize=2:--
    --  Xinha example frameset.
    --
    --  $HeadURL: http://svn.xinha.python-hosting.com/trunk/examples/full_example.html $
    --  $LastChangedDate: 2005-06-02 11:14:41 +0200 (Thu, 02 Jun 2005) $
    --  $LastChangedRevision: 212 $
    --  $LastChangedBy: gocher $
    --------------------------------------------------------------------------->

  <frameset cols="240,*">
    <frame src="full_example-menu.php" name="menu">
    <frame src="about:blank" name="body">
  </frameset>
</html>

full_example-menu.php:

<?PHP
  $LocalPluginPath = dirname(dirname(__FILE__)).'\plugins';
  $LocalSkinPath = dirname(dirname(__File__)).'\skins';
?>  
<html>
<head>

  <!--------------------------------------:noTabs=true:tabSize=2:indentSize=2:--
    --  Xinha example menu.  This file is used by full_example.html within a
    --  frame to provide a menu for generating example editors using
    --  full_example-body.html, and full_example.js.
    --
    --  $HeadURL$
    --  $LastChangedDate$
    --  $LastChangedRevision$
    --  $LastChangedBy$
    --------------------------------------------------------------------------->

  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <title>Example of Xinha</title>
  <link rel="stylesheet" href="full_example.css" />
  <style type="text/css">
    h1 {font: bold 22px "Staccato222 BT", cursive;}
    form, p {margin: 0px; padding: 0px;}
    label { display:block;}
  </style>
  <script language="JavaScript" type="text/javascript">
  function _onResize() {
    var sHeight;
    if (window.innerHeight) sHeight = window.innerHeight;
    else if (document.body && document.body.offsetHeight) sHeight = document.body.offsetHeight;
    else return;
    if (sHeight>270) {
      sHeight = sHeight - 245;
    } else {
      sHeight = 30
    }  
    var div = document.getElementById("div_plugins");
    div.style.height = sHeight + "px";
  }
  
function Dialog(url, action, init) {
	if (typeof init == "undefined") {
		init = window;	// pass this window object by default
	}
	Dialog._geckoOpenModal(url, action, init);
};

Dialog._parentEvent = function(ev) {
	setTimeout( function() { if (Dialog._modal && !Dialog._modal.closed) { Dialog._modal.focus() } }, 50);
	if (Dialog._modal && !Dialog._modal.closed) {
		agt = navigator.userAgent.toLowerCase();
		is_ie = ((agt.indexOf("msie") != -1) && (agt.indexOf("opera") == -1));
		if (is_ie) {
		 	ev.cancelBubble = true;
			ev.returnValue = false;
		} else {
			ev.preventDefault();
			ev.stopPropagation();
		}
	}
};


// should be a function, the return handler of the currently opened dialog.
Dialog._return = null;

// constant, the currently opened dialog
Dialog._modal = null;

// the dialog will read it's args from this variable
Dialog._arguments = null;

Dialog._geckoOpenModal = function(url, action, init) {
	var dlg = window.open(url, "hadialog",
			      "toolbar=no,menubar=no,personalbar=no,width=10,height=10," +
			      "scrollbars=no,resizable=yes,modal=yes,dependable=yes");
	Dialog._modal = dlg;
	Dialog._arguments = init;

	// capture some window's events
	function capwin(w) {
//		HTMLArea._addEvent(w, "click", Dialog._parentEvent);
//		HTMLArea._addEvent(w, "mousedown", Dialog._parentEvent);
//		HTMLArea._addEvent(w, "focus", Dialog._parentEvent);
	};
	// release the captured events
	function relwin(w) {
//		HTMLArea._removeEvent(w, "click", Dialog._parentEvent);
//		HTMLArea._removeEvent(w, "mousedown", Dialog._parentEvent);
//		HTMLArea._removeEvent(w, "focus", Dialog._parentEvent);
	};
	capwin(window);
	// capture other frames
	for (var i = 0; i < window.frames.length; capwin(window.frames[i++]));
	// make up a function to be called when the Dialog ends.
	Dialog._return = function (val) {
		if (val && action) {
			action(val);
		}
		relwin(window);
		// capture other frames
		for (var i = 0; i < window.frames.length; relwin(window.frames[i++]));
		Dialog._modal = null;
	};
};

  function fExtended () {
   	var outparam = { width: document.getElementById("width").value,
                     height: document.getElementById("height").value,
                     sizeIncludesBars: document.getElementById("sizeIncludesBars").value,
                     statusBar: document.getElementById("statusBar").value,
                     mozParaHandler: document.getElementById("mozParaHandler").value,
                     undoSteps: document.getElementById("undoSteps").value,
                     baseHref: document.getElementById("baseHref").value,
                     stripBaseHref: document.getElementById("stripBaseHref").value,
                     stripSelfNamedAnchors: document.getElementById("stripSelfNamedAnchors").value,
                     only7BitPrintablesInURLs: document.getElementById("only7BitPrintablesInURLs").value,
                     sevenBitClean: document.getElementById("sevenBitClean").value,
                     killWordOnPaste: document.getElementById("killWordOnPaste").value,
                     flowToolbars: document.getElementById("flowToolbars").value,
                     CharacterMapMode: document.getElementById("CharacterMapMode").value,
                     ListTypeMode: document.getElementById("ListTypeMode").value
                   };
	  Dialog("Extended.html", function(param) {
      if(param) {
		    document.getElementById("width").value = param["width"];
		    document.getElementById("height").value = param["height"];
        document.getElementById("sizeIncludesBars").value = param["sizeIncludesBars"];
        document.getElementById("statusBar").value = param["statusBar"];
        document.getElementById("mozParaHandler").value = param["mozParaHandler"];
        document.getElementById("undoSteps").value = param["undoSteps"];
        document.getElementById("baseHref").value = param["baseHref"];
        document.getElementById("stripBaseHref").value = param["stripBaseHref"];
        document.getElementById("stripSelfNamedAnchors").value = param["stripSelfNamedAnchors"];
        document.getElementById("only7BitPrintablesInURLs").value = param["only7BitPrintablesInURLs"];
        document.getElementById("sevenBitClean").value = param["sevenBitClean"];
        document.getElementById("killWordOnPaste").value = param["killWordOnPaste"];
        document.getElementById("flowToolbars").value = param["flowToolbars"];
     		document.getElementById("CharacterMapMode").value = param["CharacterMapMode"];
        document.getElementById("ListTypeMode").value = param["ListTypeMode"];
		  }
		}, outparam );
  }

  window.onresize = _onResize;
  window.onload = _onResize;
  </script>
</head>

<body>
  <form action="full_example-body.html" target="body">
  <h1>Xinha Examples</h1>
  <p>
    Select from the options below and <input type="submit" value="click here">.
  </p>
    <fieldset>
      <legend>Settings</legend>
        <label>
          Number of Editors: <input type="text" name="num" value="1" style="width:25;" maxlength="2"/>
        </label>
        <label>
          Language:
          <select name="lang">
          <option value="en">English</option>
          <option value="de">German</option>
          <option value="fr">French</option>
          <option value="it">Italian</option>
          <option value="pl">Polish</option>
          </select>
        </label>
        <label>
          Skin:
          <select name="skin">
          <option value="">-- no skin --</option>
<?php
	$d = @dir($LocalSkinPath);
	while (false !== ($entry = $d->read()))  //not a dot file or directory
	{	if(substr($entry,0,1) != '.')
		{ echo '<option value="' . $entry . '"> ' . $entry . '</option>';
		}
	}
	$d->close();
?>
          </select>
        </label>
        <input type="hidden" id="width" name="width" value="auto" />
        <input type="hidden" id="height" name="height" value="auto" />
        <input type="hidden" id="sizeIncludesBars" name="sizeIncludeBars" value="true" />
        <input type="hidden" id="statusBar" name="statusBar" value="true" />
        <input type="hidden" id="mozParaHandler" name="mozParaHandler" value="best" />
        <input type="hidden" id="undoSteps" name="undoSteps" value="20" />
        <input type="hidden" id="baseHref" name="baseHref" value="null" />
        <input type="hidden" id="stripBaseHref" name="stripBaseHref" value="true" />
        <input type="hidden" id="stripSelfNamedAnchors" name="stripSelfNamedAnchors" value="true" />
        <input type="hidden" id="only7BitPrintablesInURLs" name="only7BitPrintablesInURLs" value="true" />
        <input type="hidden" id="sevenBitClean" name="sevenBitClean" value="false" />
        <input type="hidden" id="killWordOnPaste" name="killWordOnPaste" value="true" />
        <input type="hidden" id="flowToolbars" name="flowToolbars" value="true" />
        <input type="hidden" id="CharacterMapMode" name="CharacterMapMode" value="popup" />
        <input type="hidden" id="ListTypeMode" name="ListTypeMode" value="toolbar" />
        <input type="button" value="extended Settings" onClick="fExtended();" />

    </fieldset>
    <fieldset>
      <legend>Plugins</legend>
      <div id="div_plugins" style="width:100%; overflow:auto">
<?php
	$d = @dir($LocalPluginPath);
	while (false !== ($entry = $d->read()))  //not a dot file or directory
	{	if(substr($entry,0,1) != '.')
		{ echo '<label><input type="checkbox" name="plugins" value="' . $entry . '"> ' . $entry . '</label>';
		}
	}
	$d->close();
?>
      </div>
    </fieldset>
  </form>
  <script type="text/javascript">
    top.frames["body"].location.href = document.location.href.replace(/full_example-menu\.php.*/, 'full_example-body.html')
  </script>

</body>
</html>

Extended.html:

<html>

<head>
  <title>Settings</title>
  <link rel="stylesheet" type="text/css" href="../popups/popup.css" />
  <script type="text/javascript">

function getAbsolutePos(el) {
	var r = { x: el.offsetLeft, y: el.offsetTop };
	if (el.offsetParent) {
		var tmp = getAbsolutePos(el.offsetParent);
		r.x += tmp.x;
		r.y += tmp.y;
	}
	return r;
};

function comboSelectValue(c, val) {
	var ops = c.getElementsByTagName("option");
	for (var i = ops.length; --i >= 0;) {
		var op = ops[i];
		op.selected = (op.value == val);
	}
	c.value = val;
};

function __dlg_onclose() {
	opener.Dialog._return(null);
};

// closes the dialog and passes the return info upper.
function __dlg_close(val) {
	opener.Dialog._return(val);
	window.close();
};

function __dlg_close_on_esc(ev) {
	ev || (ev = window.event);
	if (ev.keyCode == 27) {
		window.close();
		return false;
	}
	return true;
};

function __dlg_init(bottom) {
  var body = document.body;
	var body_height = 0;
	if (typeof bottom == "undefined") {
		var div = document.createElement("div");
		body.appendChild(div);
		var pos = getAbsolutePos(div);
		body_height = pos.y;
	} else {
		var pos = getAbsolutePos(bottom);
		body_height = pos.y + bottom.offsetHeight;
	}
	window.dialogArguments = opener.Dialog._arguments;
	if (!document.all) {
		window.sizeToContent();
		window.sizeToContent();	// for reasons beyond understanding,
					// only if we call it twice we get the
					// correct size.
		window.addEventListener("unload", __dlg_onclose, true);
		window.innerWidth = body.offsetWidth + 5;
		window.innerHeight = body_height + 2;
		// center on parent
		var x = opener.screenX + (opener.outerWidth - window.outerWidth) / 2;
		var y = opener.screenY + (opener.outerHeight - window.outerHeight) / 2;
		window.moveTo(x, y);
	} else {
		// window.dialogHeight = body.offsetHeight + 50 + "px";
		// window.dialogWidth = body.offsetWidth + "px";
		window.resizeTo(body.offsetWidth, body_height);
		var ch = body.clientHeight;
		var cw = body.clientWidth;
		window.resizeBy(body.offsetWidth - cw, body_height - ch);
		var W = body.offsetWidth;
		var H = 2 * body_height - ch;
		var x = (screen.availWidth - W) / 2;
		var y = (screen.availHeight - H) / 2;
		window.moveTo(x, y);
	}
	document.body.onkeypress = __dlg_close_on_esc;
};

function Init() {
  __dlg_init();
  var param = window.dialogArguments;
  if (param) {
    document.getElementById("width").value = param["width"];
    document.getElementById("height").value = param["height"];
    document.getElementById("sizeIncludesBars").checked = (param["sizeIncludesBars"] == 'true');
    document.getElementById("statusBar").checked = (param["statusBar"] == 'true');
    document.getElementById("mozParaHandler").value = param["mozParaHandler"];
    document.getElementById("undoSteps").value = param["undoSteps"];
    document.getElementById("baseHref").value = param["baseHref"];
    document.getElementById("stripBaseHref").checked = (param["stripBaseHref"] == 'true');
    document.getElementById("stripSelfNamedAnchors").checked = (param["stripSelfNamedAnchors"] == 'true');
    document.getElementById("only7BitPrintablesInURLs").checked = (param["only7BitPrintablesInURLs"] == 'true');
    document.getElementById("sevenBitClean").checked = (param["sevenBitClean"] == 'true');
    document.getElementById("killWordOnPaste").checked = (param["killWordOnPaste"] == 'true');
		document.getElementById("flowToolbars").checked = (param["flowToolbars"] == 'true');
		document.getElementById("CharacterMapMode").value = param["CharacterMapMode"];
    document.getElementById("ListTypeMode").value = param["ListTypeMode"];
    
  }
  document.getElementById("width").focus();
	window.resizeTo(420, 500);
};

function onOK() {
  // pass data back to the calling window
  var param = { width: document.getElementById("width").value,
                height: document.getElementById("height").value,
                sizeIncludesBars: (document.getElementById("sizeIncludesBars").checked?true:""),
                statusBar: (document.getElementById("statusBar").checked?true:""),
                mozParaHandler: document.getElementById("mozParaHandler").value,
                undoSteps: document.getElementById("undoSteps").value,
                baseHref: document.getElementById("baseHref").value,
                stripBaseHref: (document.getElementById("stripBaseHref").checked?true:""),
                stripSelfNamedAnchors: (document.getElementById("stripSelfNamedAnchors").checked?true:""),
                only7BitPrintablesInURLs: (document.getElementById("only7BitPrintablesInURLs").checked?true:""),
                sevenBitClean: (document.getElementById("sevenBitClean").checked?true:""),
                killWordOnPaste: (document.getElementById("killWordOnPaste").checked?true:""),
                flowToolbars: (document.getElementById("flowToolbars").checked?true:""),
		            CharacterMapMode: document.getElementById("CharacterMapMode").value,
                ListTypeOptions: document.getElementById("ListTypeMode").value
		          };
	__dlg_close(param);
  return false;
};

function onCancel() {
  __dlg_close(null);
  return false;
};

</script>

<style type="text/css">
	.fr { width: 16em; float: left; padding: 2px 5px; text-align: right; }
</style>

</head>

<body class="dialog" onload="Init()">
<div class="title">Settings</div>
  <form action="" method="get">
    <div class="fr">Editor width:</div>
      <input type="text" name="width" id="width" title="" />
    <p />
    <div class="fr">Editor height:</div>
      <input type="text" name="height" id="height" title="" />
    <p />
    <div class="fr">Size includes bars</div>
      <input type="checkbox" name="sizeIncludesBars" id="sizeIncludesBars" />
    <p />
    <div class="fr">Status Bar</div>
      <input type="checkbox" name="statusBar" id="statusBar" />
    <p />
    <div class="fr">Mozilla Parameter Handler:</div>
    <select name="mozParaHandler" id="mozParaHandler">
      <option value="built-in">built-in</option>
      <option value="dirty">dirty</option>
      <option value="best">best</option>
    </select>
    <div class="space"></div>
    <div class="fr">Undo steps:</div>
      <input type="text" name="undoSteps" id="undoSteps" title="" />
    <p />
    <div class="fr">Base href:</div>
      <input type="text" name="baseHref" id="baseHref" title="" />
    <p />
    <div class="fr">Strip base href</div>
      <input type="checkbox" name="stripBaseHref" id="stripBaseHref" />
    <p />
    <div class="fr">Strip self named anchors</div>
      <input type="checkbox" name="stripSelfNamedAnchors" id="stripSelfNamedAnchors" />
    <p />
    <div class="fr">only 7bit printables in URLs</div>
      <input type="checkbox" name="only7BitPrintablesInURLs" id="only7BitPrintablesInURLs" />
    <p />
    <div class="fr">7bit Clean</div>
      <input type="checkbox" name="sevenBitClean" id="sevenBitClean" />
    <p />
    <div class="fr">kill Word on paste</div>
      <input type="checkbox" name="killWordOnPaste" id="killWordOnPaste" />
    <p />
    <div class="fr">flow toolbars</div>
      <input type="checkbox" name="flowToolbars" id="flowToolbars" />
    <p />

    <div id="CharacterMapOptions" class="options">
    <hr size="0.5">
		<div class="fr">CharacterMap mode :</div>
		  <select id="CharacterMapMode" name="CharacterMapMode">
        <option value="popup">popup</option>
        <option value="panel">panel</option>
      </select>
	  </div>
    <p />

    <div id="ListTypeOptions" class="options">
		<hr size="0.5">
    <div class="fr">ListType mode :</div>
		  <select id="ListTypeMode" name="ListTypeMode">
        <option value="toolbar">toolbar</option>
        <option value="panel">panel</option>
      </select>
    </div>
		<p />
      
  <div id="buttons">
    <button type="submit" name="ok" onclick="return onOK();">OK</button>
    <button type="button" name="cancel" onclick="return onCancel();">Cancel</button>
  </div>
</form>
</body>
</html>

full_example.js:

  /*--------------------------------------:noTabs=true:tabSize=2:indentSize=2:--
    --  Xinha example logic.  This javascript is used to auto-generate examples
    --  as controlled by the options set in full_example-menu.html.  it's called
    --  from full_example-body.html.
    --
    --  $HeadURL$
    --  $LastChangedDate$
    --  $LastChangedRevision$
    --  $LastChangedBy$
    --------------------------------------------------------------------------*/

  var num     = 1;
  if(window.parent && window.parent != window)
  {
    var f = window.parent.menu.document.forms[0];
    _editor_lang = f.lang.value;
    _editor_skin = f.skin.value;
    num = parseInt(f.num.value);
    if(isNaN(num))
    {
      num = 1;
      f.num.value = 1;
    }
    xinha_plugins = [ ];
    for(var x = 0; x < f.plugins.length; x++)
    {
      if(f.plugins[x].checked) xinha_plugins.push(f.plugins[x].value);
    }
  }

  xinha_editors = [ ]
  for(var x = 0; x < num; x++)
  {
    var ta = 'myTextarea' + x;
    xinha_editors.push(ta);
  }

  xinha_config = function()
  {
    var    config = new HTMLArea.Config();

    if(window.parent && window.parent != window) {
      var f = window.parent.menu.document.forms[0];
      if (f.width) config.width = f.width.value;
      if (f.height) config.height = f.height.value;
      if (f.sizeIncludesBars) config.sizeIncludesBars = f.sizeIncludesBars.value;
      if (f.statusBar) config.statusBar = f.statusBar.value;
      if (f.mozParaHandler) config.mozParaHandler = f.mozParaHandler.value;
      if (f.undoSteps) config.undoSteps = f.undoSteps.value;
      if (f.baseHref) config.baseHref = f.baseHref.value;
      if (f.stripBaseHref) config.stripBaseHref = f.stripBaseHref.value;
      if (f.stripSelfNamedAnchors) config.stripSelfNamedAnchors = f.stripSelfNamedAnchors.value;
      if (f.only7BitPrintablesInURLs) config.only7BitPrintablesInURLs = f.only7BitPrintablesInURLs.value;
      if (f.sevenBitClean) config.sevenBitClean = f.sevenBitClean.value;
      if (f.killWordOnPaste) config.killWordOnPaste = f.killWordOnPaste.value;
      if (f.flowToolbars) config.flowToolbars = f.flowToolbars.value;
      if ((typeof CharacterMap != 'undefined') && (f.CharacterMapMode)) config.CharacterMap.mode = f.CharacterMapMode.value;
      if ((typeof ListType != 'undefined') && (f.ListTypeMode)) config.ListType.mode = f.ListTypeMode.value; 
    }

    if(typeof CSS != 'undefined')
    {
      config.pageStyle = "@import url(custom.css);";
    }

    if(typeof Stylist != 'undefined')
    {
      // We can load an external stylesheet like this - NOTE : YOU MUST GIVE AN ABSOLUTE URL
      //  otherwise it won't work!
      config.stylistLoadStylesheet(document.location.href.replace(/[^\/]*\.html/, 'stylist.css'));

      // Or we can load styles directly
      config.stylistLoadStyles('p.red_text { color:red }');

      // If you want to provide "friendly" names you can do so like
      // (you can do this for stylistLoadStylesheet as well)
      config.stylistLoadStyles('p.pink_text { color:pink }', {'p.pink_text' : 'Pretty Pink'});
    }

    if(typeof DynamicCSS != 'undefined')
    {
      config.pageStyle = "@import url(dynamic.css);";
    }

    if(typeof InsertWords != 'undefined')
    {
      // Register the keyword/replacement list
      var keywrds1 = new Object();
      var keywrds2 = new Object();

      keywrds1['-- Dropdown Label --'] = '';
      keywrds1['onekey'] = 'onevalue';
      keywrds1['twokey'] = 'twovalue';
      keywrds1['threekey'] = 'threevalue';

      keywrds2['-- Insert Keyword --'] = '';
      keywrds2['Username'] = '%user%';
      keywrds2['Last login date'] = '%last_login%';
      config.InsertWords = {
        combos : [ { options: keywrds1, context: "body" },
               { options: keywrds2, context: "li" } ]
      }

    }
    // Path for InsertPicture plugin
    if(typeof InsertPicture != 'undefined') {
      InsertPicture.PicturePath = '/schmal/pictures/';
    }

/*    if (typeof ListType != 'undefined')
    {
      if(window.parent && window.parent != window)
      {
        var f = window.parent.menu.document.forms[0];
        config.ListType.mode = f.elements['ListTypeMode'].options[f.elements['ListTypeMode'].selectedIndex].value;
      }
    }

    if (typeof CharacterMap != 'undefined')
    {
      if(window.parent && window.parent != window)
      {
        var f = window.parent.menu.document.forms[0];
        config.CharacterMap.mode = f.elements['CharacterMapMode'].options[f.elements['CharacterMapMode'].selectedIndex].value;
      }
    }
*/
    return config;
  }


  var f = document.forms[0];
  f.innerHTML = '';

  var lipsum = document.getElementById('lipsum').innerHTML;

  for(var x = 0; x < num; x++)
  {
    var ta = 'myTextarea' + x;

    var div = document.createElement('div');
    div.className = 'area_holder';

    var txta = document.createElement('textarea');
    txta.id   = ta;
    txta.name = ta;
    txta.value = lipsum;
    txta.style.width="100%";
    txta.style.height="420px";

    div.appendChild(txta);
    f.appendChild(div);
  }
  
  //check submitted values
  var submit = document.createElement('input');
  submit.type = "submit";
  submit.id = "submit";
  submit.value = "submit";
  f.appendChild(submit);
  
  var _oldSubmitHandler = null;
  if (document.forms[0].onsubmit != null) {
    _oldSubmitHandler = document.forms[0].onsubmit;
  }
  function frame_onSubmit(){
    alert(document.getElementById("myTextarea0").value);
    if (_oldSubmitHandler != null) {
      _oldSubmitHandler();
    }
  }
  document.forms[0].onsubmit = frame_onSubmit;

Change History (6)

comment:1 Changed 9 years ago by gocher

  • Description modified (diff)

comment:2 Changed 9 years ago by gocher

  • Description modified (diff)
  • Summary changed from full_example-menu.php list all folders in the plugin path as plugins to PHP example-menu list all folders in the plugin path as plugins and all folders in skin path as skins

comment:3 Changed 9 years ago by niko

with this php-script xinha would depend on php-enabled servers - which xinha currently does not (except a few plugins that need server-side-scripting)

so imho we should not include this file directly, instead we could write a script that generates a full_example-menu.html by scanning the plugins-directory.

comment:4 Changed 9 years ago by gocher

The file full_example.htm is not a replacement for full_example.html, only my way to test all plugins in the plugin folder!
The full_example-menu.php scans the whole plugin and skin folder that i can test any of my 56 plugins and 20 skins.

comment:5 Changed 9 years ago by gocher

  • Description modified (diff)

comment:6 Changed 9 years ago by gocher

  • Resolution set to fixed
  • Status changed from new to closed

Checked in Changeset 324

Note: See TracTickets for help on using tickets.