From b2f51830b7ad319f5d978b411d9bfd87f03308eb Mon Sep 17 00:00:00 2001 From: wei <> Date: Sun, 2 Jul 2006 04:33:04 +0000 Subject: Fixed #226 and #246 --- .gitattributes | 1 + HISTORY | 2 + .../Web/Javascripts/colorpicker/colorpicker.js | 4 +- framework/Web/Javascripts/colorpicker/spacer.gif | Bin 0 -> 43 bytes framework/Web/Javascripts/datepicker/datepicker.js | 8 +- framework/Web/Javascripts/js/colorpicker.js | 4 +- framework/Web/Javascripts/js/datepicker.js | 6 +- framework/Web/UI/WebControls/THtmlArea.php | 2 +- framework/prado-cli.php | 413 +++++++++++++++++++++ .../tickets/protected/pages/Ticket200.page | 6 + .../tickets/protected/pages/Ticket200.php | 16 + .../tickets/protected/pages/Ticket202.page | 19 + .../tickets/protected/pages/Ticket227.page | 4 + .../tickets/protected/pages/Ticket246.page | 17 + .../tickets/tests/Ticket227TestCase.php | 12 + .../tickets/tests/Ticket246TestCase.php | 12 + 16 files changed, 514 insertions(+), 12 deletions(-) create mode 100755 framework/Web/Javascripts/colorpicker/spacer.gif create mode 100755 framework/prado-cli.php create mode 100644 tests/FunctionalTests/tickets/protected/pages/Ticket200.page create mode 100644 tests/FunctionalTests/tickets/protected/pages/Ticket200.php create mode 100644 tests/FunctionalTests/tickets/protected/pages/Ticket202.page create mode 100644 tests/FunctionalTests/tickets/protected/pages/Ticket227.page create mode 100644 tests/FunctionalTests/tickets/protected/pages/Ticket246.page create mode 100644 tests/FunctionalTests/tickets/tests/Ticket227TestCase.php create mode 100644 tests/FunctionalTests/tickets/tests/Ticket246TestCase.php diff --git a/.gitattributes b/.gitattributes index 1c884672..a124b9d9 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1376,6 +1376,7 @@ framework/Web/Javascripts/colorpicker/colorpicker.js -text framework/Web/Javascripts/colorpicker/default.css -text framework/Web/Javascripts/colorpicker/hue.gif -text framework/Web/Javascripts/colorpicker/slider.gif -text +framework/Web/Javascripts/colorpicker/spacer.gif -text framework/Web/Javascripts/colorpicker/target_black.gif -text framework/Web/Javascripts/colorpicker/target_white.gif -text framework/Web/Javascripts/datepicker/calendar.png -text diff --git a/HISTORY b/HISTORY index f3f66c13..ec626c0c 100644 --- a/HISTORY +++ b/HISTORY @@ -8,6 +8,8 @@ BUG: Ticket#239 - Ondeactivate handler for the first View of MultiView is always BUG: Ticket#244 - redirect() needs absolute URL (Qiang) BUG: Ticket#245 - getIsSecureConnection() is not working correctly (Qiang) BUG: Ticket#260 - Wrong value of a configuration option in setUseTransparentSessionID (Qiang) +BUG: Ticket#227 - Enabled property doesn't works with THtmlArea (Wei) +BUG: Ticket#246 - TDatePicker wrong popup position in scrolled div (Wei) CHG: ensureChildControls() is now invoked in TControl::initRecursive (Qiang) CHG: Postback enabled control will always disable default client-side browser action. (Qiang) CHG: CSS and JS files in a theme are now included in page in alphabetic order (Qiang) diff --git a/framework/Web/Javascripts/colorpicker/colorpicker.js b/framework/Web/Javascripts/colorpicker/colorpicker.js index 06cfb037..acf5531c 100644 --- a/framework/Web/Javascripts/colorpicker/colorpicker.js +++ b/framework/Web/Javascripts/colorpicker/colorpicker.js @@ -68,7 +68,7 @@ Object.extend(Prado.WebUI.TColorPicker.prototype, { var constructor = mode == "Basic" ? "getBasicPickerContainer": "getFullPickerContainer" this.element = this[constructor](this.options['ID'], this.options['Palette']) - document.body.appendChild(this.element); + this.input.parentNode.appendChild(this.element); this.element.style.display = "none"; if(Prado.Browser().ie) @@ -90,7 +90,7 @@ Object.extend(Prado.WebUI.TColorPicker.prototype, { if(!this.showing) { - var pos = Position.cumulativeOffset(this.input); + var pos = Position.positionedOffset(this.input); pos[1] += this.input.offsetHeight; this.element.style.top = (pos[1]-1) + "px"; diff --git a/framework/Web/Javascripts/colorpicker/spacer.gif b/framework/Web/Javascripts/colorpicker/spacer.gif new file mode 100755 index 00000000..fc256098 Binary files /dev/null and b/framework/Web/Javascripts/colorpicker/spacer.gif differ diff --git a/framework/Web/Javascripts/datepicker/datepicker.js b/framework/Web/Javascripts/datepicker/datepicker.js index 11bee07e..4525c1ba 100644 --- a/framework/Web/Javascripts/datepicker/datepicker.js +++ b/framework/Web/Javascripts/datepicker/datepicker.js @@ -247,10 +247,10 @@ Prado.WebUI.TDatePicker.prototype = this.iePopUp.style.position = "absolute" this.iePopUp.scrolling="no" this.iePopUp.frameBorder="0" - document.body.appendChild(this.iePopUp); + this.control.parentNode.appendChild(this.iePopUp); } - document.body.appendChild(this._calDiv); + this.control.parentNode.appendChild(this._calDiv); this.update(); this.updateHeader(); @@ -542,8 +542,8 @@ Prado.WebUI.TDatePicker.prototype = if(!this.showing) { - var pos = Position.cumulativeOffset(this.control); - + var pos = Position.positionedOffset(this.control); + pos[1] += this.getDatePickerOffsetHeight(); this._calDiv.style.display = "block"; diff --git a/framework/Web/Javascripts/js/colorpicker.js b/framework/Web/Javascripts/js/colorpicker.js index 47949239..8429b5e6 100644 --- a/framework/Web/Javascripts/js/colorpicker.js +++ b/framework/Web/Javascripts/js/colorpicker.js @@ -33,7 +33,7 @@ Event.observe(this.button,"click",this._buttonOnClick);Event.observe(this.input, {var mode=this.options['Mode'];if(this.element==null) {var constructor=mode=="Basic"?"getBasicPickerContainer":"getFullPickerContainer" this.element=this[constructor](this.options['ID'],this.options['Palette']) -document.body.appendChild(this.element);this.element.style.display="none";if(Prado.Browser().ie) +this.input.parentNode.appendChild(this.element);this.element.style.display="none";if(Prado.Browser().ie) {this.iePopUp=document.createElement('iframe');this.iePopUp.src=Prado.WebUI.TColorPicker.UIImages['button.gif'];this.iePopUp.style.position="absolute" this.iePopUp.scrolling="no" this.iePopUp.frameBorder="0" @@ -42,7 +42,7 @@ if(mode=="Full") this.initializeFullPicker();} this.show(mode);},show:function(type) {if(!this.showing) -{var pos=Position.cumulativeOffset(this.input);pos[1]+=this.input.offsetHeight;this.element.style.top=(pos[1]-1)+"px";this.element.style.left=pos[0]+"px";this.element.style.display="block";this.ieHack(type);this._documentClickEvent=this.hideOnClick.bindEvent(this,type);this._documentKeyDownEvent=this.keyPressed.bindEvent(this,type);Event.observe(document.body,"click",this._documentClickEvent);Event.observe(document,"keydown",this._documentKeyDownEvent);this.showing=true;if(type=="Full") +{var pos=Position.positionedOffset(this.input);pos[1]+=this.input.offsetHeight;this.element.style.top=(pos[1]-1)+"px";this.element.style.left=pos[0]+"px";this.element.style.display="block";this.ieHack(type);this._documentClickEvent=this.hideOnClick.bindEvent(this,type);this._documentKeyDownEvent=this.keyPressed.bindEvent(this,type);Event.observe(document.body,"click",this._documentClickEvent);Event.observe(document,"keydown",this._documentKeyDownEvent);this.showing=true;if(type=="Full") {this.observeMouseMovement();var color=Rico.Color.createFromHex(this.input.value);this.inputs.oldColor.style.backgroundColor=color.asHex();this.setColor(color,true);}}},hide:function(event) {if(this.showing) {if(this.iePopUp) diff --git a/framework/Web/Javascripts/js/datepicker.js b/framework/Web/Javascripts/js/datepicker.js index 090f3cbd..bbf81293 100644 --- a/framework/Web/Javascripts/js/datepicker.js +++ b/framework/Web/Javascripts/js/datepicker.js @@ -22,8 +22,8 @@ div=document.createElement("div");div.className="calendarFooter";this._calDiv.ap {this.iePopUp=document.createElement('iframe');this.iePopUp.src=Prado.WebUI.TDatePicker.spacer;this.iePopUp.style.position="absolute" this.iePopUp.scrolling="no" this.iePopUp.frameBorder="0" -document.body.appendChild(this.iePopUp);} -document.body.appendChild(this._calDiv);this.update();this.updateHeader();this.ieHack(true);previousMonth.hideFocus=true;nextMonth.hideFocus=true;todayButton.hideFocus=true;Event.observe(previousMonth,"click",this.prevMonth.bindEvent(this));Event.observe(nextMonth,"click",this.nextMonth.bindEvent(this));Event.observe(todayButton,"click",this.selectToday.bindEvent(this));Event.observe(this._monthSelect,"change",this.monthSelect.bindEvent(this));Event.observe(this._yearSelect,"change",this.yearSelect.bindEvent(this));Event.observe(this._calDiv,"mousewheel",this.mouseWheelChange.bindEvent(this));Event.observe(calendarBody,"click",this.selectDate.bindEvent(this));Prado.Element.focus(this.control);},ieHack:function(cleanup) +this.control.parentNode.appendChild(this.iePopUp);} +this.control.parentNode.appendChild(this._calDiv);this.update();this.updateHeader();this.ieHack(true);previousMonth.hideFocus=true;nextMonth.hideFocus=true;todayButton.hideFocus=true;Event.observe(previousMonth,"click",this.prevMonth.bindEvent(this));Event.observe(nextMonth,"click",this.nextMonth.bindEvent(this));Event.observe(todayButton,"click",this.selectToday.bindEvent(this));Event.observe(this._monthSelect,"change",this.monthSelect.bindEvent(this));Event.observe(this._yearSelect,"change",this.yearSelect.bindEvent(this));Event.observe(this._calDiv,"mousewheel",this.mouseWheelChange.bindEvent(this));Event.observe(calendarBody,"click",this.selectDate.bindEvent(this));Prado.Element.focus(this.control);},ieHack:function(cleanup) {if(this.iePopUp) {this.iePopUp.style.display="block";this.iePopUp.style.top=(this._calDiv.offsetTop-1)+"px";this.iePopUp.style.left=(this._calDiv.offsetLeft-1)+"px";this.iePopUp.style.width=Math.abs(this._calDiv.offsetWidth-2)+"px";this.iePopUp.style.height=(this._calDiv.offsetHeight+1)+"px";if(cleanup)this.iePopUp.style.display="none";}},keyPressed:function(ev) {if(!this.showing)return;if(!ev)ev=document.parentWindow.event;var kc=ev.keyCode!=null?ev.keyCode:ev.charCode;if(kc==Event.KEY_RETURN||kc==Event.KEY_SPACEBAR||kc==Event.KEY_TAB) @@ -92,7 +92,7 @@ this.onChange();},getElement:function() {if(this.options.InputMode=="TextBox") return this.control.offsetHeight;var control=Prado.WebUI.TDatePicker.getDayListControl(this.control);if(control)return control.offsetHeight;var control=Prado.WebUI.TDatePicker.getMonthListControl(this.control);if(control)return control.offsetHeight;var control=Prado.WebUI.TDatePicker.getYearListControl(this.control);if(control)return control.offsetHeight;return 0;},show:function() {this.create();if(!this.showing) -{var pos=Position.cumulativeOffset(this.control);pos[1]+=this.getDatePickerOffsetHeight();this._calDiv.style.display="block";this._calDiv.style.top=(pos[1]-1)+"px";this._calDiv.style.left=pos[0]+"px";this.ieHack(false);this.documentClickEvent=this.hideOnClick.bindEvent(this);this.documentKeyDownEvent=this.keyPressed.bindEvent(this);Event.observe(document.body,"click",this.documentClickEvent);var date=this.getDateFromInput();if(date) +{var pos=Position.positionedOffset(this.control);pos[1]+=this.getDatePickerOffsetHeight();this._calDiv.style.display="block";this._calDiv.style.top=(pos[1]-1)+"px";this._calDiv.style.left=pos[0]+"px";this.ieHack(false);this.documentClickEvent=this.hideOnClick.bindEvent(this);this.documentKeyDownEvent=this.keyPressed.bindEvent(this);Event.observe(document.body,"click",this.documentClickEvent);var date=this.getDateFromInput();if(date) {this.selectedDate=date;this.setSelectedDate(date);} Event.observe(document,"keydown",this.documentKeyDownEvent);this.showing=true;}},getDateFromInput:function() {if(this.options.InputMode=="TextBox") diff --git a/framework/Web/UI/WebControls/THtmlArea.php b/framework/Web/UI/WebControls/THtmlArea.php index 8b214b69..77a774c4 100644 --- a/framework/Web/UI/WebControls/THtmlArea.php +++ b/framework/Web/UI/WebControls/THtmlArea.php @@ -219,7 +219,7 @@ class THtmlArea extends TTextBox */ protected function addAttributesToRender($writer) { - if($this->getEnableVisualEdit()) + if($this->getEnableVisualEdit() && $this->getEnabled(true)) { $writer->addAttribute('id',$this->getClientID()); $this->registerEditorClientScript($writer); diff --git a/framework/prado-cli.php b/framework/prado-cli.php new file mode 100755 index 00000000..f8ce826c --- /dev/null +++ b/framework/prado-cli.php @@ -0,0 +1,413 @@ +#!/usr/bin/php +', 'create a new project '); +$console = new ConsoleOptions($options, $_SERVER['argv']); + +if($console->hasOptions()) +{ + if($dir = $console->getOption('create')) + create_new_prado_project($dir); +} +else +{ + $details = $console->renderOptions(); +echo << +Options: +$details +Example: php prado-cli.php -c ./example1 + + +EOD; +} + +/** + * Functions to create new prado project. + */ + +function create_new_prado_project($dir) +{ + if(strlen(trim($dir)) == 0) + return; + + $rootPath = realpath(dirname(trim($dir))); + + $basePath = $rootPath.'/'.basename($dir); + $assetPath = $basePath.'/assets'; + $protectedPath = $basePath.'/protected'; + $runtimePath = $basePath.'/protected/runtime'; + $pagesPath = $protectedPath.'/pages'; + + $indexFile = $basePath.'/index.php'; + $htaccessFile = $protectedPath.'/.htaccess'; + $defaultPageFile = $pagesPath.'/Home.page'; + + create_directory($basePath, 0755); + create_directory($assetPath,0777); + create_directory($protectedPath,0755); + create_directory($runtimePath,0777); + create_directory($pagesPath,0755); + + file_put_contents($indexFile, render_index_file()); + file_put_contents($htaccessFile, render_htaccess_file()); + file_put_contents($defaultPageFile, render_default_page()); +} + +function create_directory($dir, $mask) +{ + if(!is_dir($dir)) + mkdir($dir); + if(is_dir($dir)) + chmod($dir, $mask); +} + +function render_index_file() +{ + $framework = realpath(dirname(__FILE__)).'/prado.php'; +return 'run(); + +?>'; +} + +function render_htaccess_file() +{ + return 'deny from all'; +} + + +function render_default_page() +{ +return <<Welcome to Prado! +EOD; +} + +/* vim: set expandtab tabstop=4 shiftwidth=4: */ +// +----------------------------------------------------------------------+ +// | PHP Version 4 | +// +----------------------------------------------------------------------+ +// | Copyright (c) 1997-2003 The PHP Group | +// +----------------------------------------------------------------------+ +// | This source file is subject to version 3.0 of the PHP license, | +// | that is bundled with this package in the file LICENSE, and is | +// | available through the world-wide-web at the following url: | +// | http://www.php.net/license/3_0.txt. | +// | If you did not receive a copy of the PHP license and are unable to | +// | obtain it through the world-wide-web, please send a note to | +// | license@php.net so we can mail you a copy immediately. | +// +----------------------------------------------------------------------+ +// | Author: Andrei Zmievski | +// +----------------------------------------------------------------------+ +// +// $Id: Getopt.php,v 1.21.4.7 2003/12/05 21:57:01 andrei Exp $ + +/** + * Command-line options parsing class. + * + * @author Andrei Zmievski + * @author Wei Zhuo + */ +class ConsoleOptions +{ + private $_short_options; + private $_long_options; + private $_options; + private $_args; + private $_values; + + /** + * @param array list of options with the following format + * option['name'] = array('short', 'long', 'parameter', 'description') + * see @link setOptions} for details on 'short' and 'long' string details. + */ + public function __construct($options, $args) + { + $short = ''; + $long = array(); + foreach($options as $option) + { + $short .= $option[0]; + $long[] = $option[1]; + } + $this->setOptions($short,$long); + $this->_options = $options; + $this->_args = $args; + } + + /** + * The second parameter is a string of allowed short options. Each of the + * option letters can be followed by a colon ':' to specify that the option + * requires an argument, or a double colon '::' to specify that the option + * takes an optional argument. + * + * The third argument is an optional array of allowed long options. The + * leading '--' should not be included in the option name. Options that + * require an argument should be followed by '=', and options that take an + * option argument should be followed by '=='. + * + * @param string $short_options specifies the list of allowed short options + * @param array $long_options specifies the list of allowed long options + */ + protected function setOptions($short_options, $long_options=null) + { + $this->_short_options = $short_options; + $this->_long_options = $long_options; + } + + /** + * @return string list of options and its descriptions + */ + public function renderOptions() + { + $options = array(); + $descriptions = array(); + $max = 0; + foreach($this->_options as $option) + { + $short = str_replace(':','',$option[0]); + $long = str_replace('=','',$option[1]); + $desc = $option[2]; + $details = " -{$short}, --{$long} {$desc}"; + if(($len = strlen($details)) > $max) + $max = $len; + $options[] = $details; + $descriptions[] = $option[3]; + } + + $content = ''; + for($i = 0, $k = count($options); $i < $k; $i++) + $content .= str_pad($options[$i],$max+3).$descriptions[$i]."\n"; + return $content; + } + + /** + * @param string argument name + * @return string argument value + */ + public function getOption($name) + { + if(is_null($this->_values)) + $this->_values = $this->getNamedOptions(); + return isset($this->_values[$name]) ? $this->_values[$name] : null; + } + + /** + * @return array list of all options given. + */ + public function getOptions() + { + if(is_null($this->_values)) + $this->_values = $this->getNamedOptions(); + return $this->_values; + } + + /** + * @return boolean true if one or more options are given. + */ + public function hasOptions() + { + if(is_null($this->_values)) + $this->_values = $this->getNamedOptions(); + return count($this->_values) > 0; + } + + /** + * Parse the options from args into named arguements. + */ + protected function getNamedOptions() + { + $options = array(); + $values = $this->parseOptions($this->_args); + foreach($values[0] as $value) + { + foreach($this->_options as $name => $option) + { + if(strpos($option[0],$value[0]) !== false + || strpos($option[1], $value[0]) !== false) + $options[$name] = $value[1]; + } + } + return $options; + } + + /** + * Gets the command-line options. + * + * The parameter to this function should be the list of command-line + * arguments without the leading reference to the running program. + * + * The return value is an array of two elements: the list of parsed + * options and the list of non-option command-line arguments. Each entry in + * the list of parsed options is a pair of elements - the first one + * specifies the option, and the second one specifies the option argument, + * if there was one. + * + * Long and short options can be mixed. + * + * @param array $args an array of command-line arguments + * @return array two-element array containing the list of parsed options and + * the non-option arguments + */ + public function parseOptions($args) + { + if (empty($args)) + return array(array(), array()); + + $short_options = $this->_short_options; + $long_options = $this->_long_options; + + $opts = array(); + $non_opts = array(); + + settype($args, 'array'); + + if ($long_options) + sort($long_options); + + if (isset($args[0]{0}) && $args[0]{0} != '-') + array_shift($args); + + reset($args); + + while (list($i, $arg) = each($args)) + { + + /* The special element '--' means explicit end of + options. Treat the rest of the arguments as non-options + and end the loop. */ + if ($arg == '--') { + $non_opts = array_merge($non_opts, array_slice($args, $i + 1)); + break; + } + + if ($arg{0} != '-' || (strlen($arg) > 1 && $arg{1} == '-' && !$long_options)) + { + $non_opts = array_merge($non_opts, array_slice($args, $i)); + break; + } + elseif (strlen($arg) > 1 && $arg{1} == '-') + $this->parseLongOption(substr($arg, 2), $long_options, $opts, $args); + else + $this->parseShortOption(substr($arg, 1), $short_options, $opts, $args); + } + + return array($opts, $non_opts); + } + + private function parseShortOption($arg, $short_options, &$opts, &$args) + { + for ($i = 0; $i < strlen($arg); $i++) + { + $opt = $arg{$i}; + $opt_arg = null; + + /* Try to find the short option in the specifier string. */ + if (($spec = strstr($short_options, $opt)) === false || $arg{$i} == ':') + throw new Exception("Console_Getopt: unrecognized option -- $opt"); + + if (strlen($spec) > 1 && $spec{1} == ':') + { + if (strlen($spec) > 2 && $spec{2} == ':') + { + if ($i + 1 < strlen($arg)) + { + /* Option takes an optional argument. Use the remainder of + the arg string if there is anything left. */ + $opts[] = array($opt, substr($arg, $i + 1)); + break; + } + } + else + { + /* Option requires an argument. Use the remainder of the arg + string if there is anything left. */ + if ($i + 1 < strlen($arg)) + { + $opts[] = array($opt, substr($arg, $i + 1)); + break; + } + else if (list(, $opt_arg) = each($args)) + /* Else use the next argument. */; + else + throw new Exception("Console_Getopt: option requires an argument -- $opt"); + } + } + + $opts[] = array($opt, $opt_arg); + } + } + + private function parseLongOption($arg, $long_options, &$opts, &$args) + { + @list($opt, $opt_arg) = explode('=', $arg); + $opt_len = strlen($opt); + + for ($i = 0; $i < count($long_options); $i++) + { + $long_opt = $long_options[$i]; + $opt_start = substr($long_opt, 0, $opt_len); + + /* Option doesn't match. Go on to the next one. */ + if ($opt_start != $opt) + continue; + + $opt_rest = substr($long_opt, $opt_len); + + /* Check that the options uniquely matches one of the allowed + options. */ + if ($opt_rest != '' && $opt{0} != '=' && + $i + 1 < count($long_options) && + $opt == substr($long_options[$i+1], 0, $opt_len)) + { + throw new Exception("Console_Getopt: option --$opt is ambiguous"); + } + + if (substr($long_opt, -1) == '=') + { + if (substr($long_opt, -2) != '==') + { + /* Long option requires an argument. + Take the next argument if one wasn't specified. */; + if (!strlen($opt_arg) && !(list(, $opt_arg) = each($args))) + throw new Exception("Console_Getopt: option --$opt requires an argument"); + } + } + else if ($opt_arg) + throw new Exception("Console_Getopt: option --$opt doesn't allow an argument"); + + $opts[] = array($opt, $opt_arg); + return; + } + + throw new Exception("Console_Getopt: unrecognized option --$opt"); + } +} + + +?> \ No newline at end of file diff --git a/tests/FunctionalTests/tickets/protected/pages/Ticket200.page b/tests/FunctionalTests/tickets/protected/pages/Ticket200.page new file mode 100644 index 00000000..76c60f40 --- /dev/null +++ b/tests/FunctionalTests/tickets/protected/pages/Ticket200.page @@ -0,0 +1,6 @@ + + +


+ +


+
\ No newline at end of file diff --git a/tests/FunctionalTests/tickets/protected/pages/Ticket200.php b/tests/FunctionalTests/tickets/protected/pages/Ticket200.php new file mode 100644 index 00000000..a80a3b8a --- /dev/null +++ b/tests/FunctionalTests/tickets/protected/pages/Ticket200.php @@ -0,0 +1,16 @@ + \ No newline at end of file diff --git a/tests/FunctionalTests/tickets/protected/pages/Ticket202.page b/tests/FunctionalTests/tickets/protected/pages/Ticket202.page new file mode 100644 index 00000000..ae984c2d --- /dev/null +++ b/tests/FunctionalTests/tickets/protected/pages/Ticket202.page @@ -0,0 +1,19 @@ +<%@ MasterPage="" %> + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/FunctionalTests/tickets/protected/pages/Ticket227.page b/tests/FunctionalTests/tickets/protected/pages/Ticket227.page new file mode 100644 index 00000000..ab481fa2 --- /dev/null +++ b/tests/FunctionalTests/tickets/protected/pages/Ticket227.page @@ -0,0 +1,4 @@ + +

Disabled HTMLArea

+ +
\ No newline at end of file diff --git a/tests/FunctionalTests/tickets/protected/pages/Ticket246.page b/tests/FunctionalTests/tickets/protected/pages/Ticket246.page new file mode 100644 index 00000000..e25a484b --- /dev/null +++ b/tests/FunctionalTests/tickets/protected/pages/Ticket246.page @@ -0,0 +1,17 @@ + +

TDatePicker inside absolute DIV with scrollbar

+ +
+

+ +

+ + + + +

+
+
\ No newline at end of file diff --git a/tests/FunctionalTests/tickets/tests/Ticket227TestCase.php b/tests/FunctionalTests/tickets/tests/Ticket227TestCase.php new file mode 100644 index 00000000..c0dd2a98 --- /dev/null +++ b/tests/FunctionalTests/tickets/tests/Ticket227TestCase.php @@ -0,0 +1,12 @@ +open('tickets/index.php?page=Ticket227'); + $this->assertTitle('Verifying Ticket 227'); + } +} + +?> \ No newline at end of file diff --git a/tests/FunctionalTests/tickets/tests/Ticket246TestCase.php b/tests/FunctionalTests/tickets/tests/Ticket246TestCase.php new file mode 100644 index 00000000..8f07790e --- /dev/null +++ b/tests/FunctionalTests/tickets/tests/Ticket246TestCase.php @@ -0,0 +1,12 @@ +open('tickets/index.php?page=Ticket246'); + $this->assertTitle('Verifying Ticket 246'); + } +} + +?> \ No newline at end of file -- cgit v1.2.3