Permalink
Browse files

fixes for XHTML strict: add <fieldset> arround hidden form fields, us…

…e "id" instead of "name" to locate forms, use HTML entities in button captions <= and =>
  • Loading branch information...
1 parent 7ee4f7c commit 40bb96dbece1e95a629d5ec3e23eafab1bfbe2e2 gbateson committed May 24, 2009
Showing with 37 additions and 17 deletions.
  1. +14 −5 mod/hotpot/hotpot-full.js
  2. +15 −9 mod/hotpot/lib.php
  3. +8 −3 mod/hotpot/template/v6.php
@@ -2922,14 +2922,23 @@ hpInterceptClues();
hpInterceptChecks();
function hpFindForm(formname, w) {
if (w==null) w = self;
- var f = w.document.forms[formname];
- if (f==null && w.frames) {
+ var f = w.document.getElementById(formname);
+ if (f) {
+ return f;
+ }
+ var f = w.document.forms[formname];
+ if (f) {
+ return f;
+ }
+ if (w.frames) {
for (var i=0; i<w.frames.length; i++) {
- f = hpFindForm(formname, w.frames[i]);
- if (f) break;
+ var f = hpFindForm(formname, w.frames[i]);
+ if (f) {
+ return f;
+ }
}
}
- return f;
+ return null;
}
function Finish(quizstatus) {
var mark = hpScore();
View
@@ -1826,42 +1826,48 @@ function insert_script($src=HOTPOT_JS) {
$this->html = preg_replace('|</head>|i', $script.'</head>', $this->html, 1);
}
function insert_submission_form($attemptid, $startblock, $endblock, $keep_contents=false, $targetframe='') {
- $form_name = 'store';
+ $form_id = 'store';
$form_fields = ''
+ . '<fieldset style="display:none">'
. '<input type="hidden" name="attemptid" value="'.$attemptid.'" />'
. '<input type="hidden" name="starttime" value="" />'
. '<input type="hidden" name="endtime" value="" />'
. '<input type="hidden" name="mark" value="" />'
. '<input type="hidden" name="detail" value="" />'
. '<input type="hidden" name="status" value="" />'
+ . '</fieldset>'
;
- $this->insert_form($startblock, $endblock, $form_name, $form_fields, $keep_contents, false, $targetframe);
+ $this->insert_form($startblock, $endblock, $form_id, $form_fields, $keep_contents, false, $targetframe);
}
function insert_giveup_form($attemptid, $startblock, $endblock, $keep_contents=false) {
- $form_name = ''; // no <form> tag will be generated
+ $form_id = ''; // no <form> tag will be generated
$form_fields = ''
. '<button onclick="Finish('.HOTPOT_STATUS_ABANDONED.')" class="FuncButton" '
. 'onfocus="FuncBtnOver(this)" onblur="FuncBtnOut(this)" '
. 'onmouseover="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)" '
. 'onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)">'
. get_string('giveup', 'hotpot').'</button>'
;
- $this->insert_form($startblock, $endblock, $form_name, $form_fields, $keep_contents, true);
+ $this->insert_form($startblock, $endblock, $form_id, $form_fields, $keep_contents, true);
}
- function insert_form($startblock, $endblock, $form_name, $form_fields, $keep_contents, $center=false, $targetframe='') {
+ function insert_form($startblock, $endblock, $form_id, $form_fields, $keep_contents, $center=false, $targetframe='') {
global $CFG;
$search = '#('.preg_quote($startblock).')(.*?)('.preg_quote($endblock).')#s';
$replace = $form_fields;
if ($keep_contents) {
$replace .= '\\2';
}
if ($targetframe) {
- $frametarget = ' target="'.$targetframe.'"';
- } else {
+ $frametarget = ' onsubmit="'."this.target='$targetframe';".'"';
+ } else if (! empty($CFG->framename)) {
+ $frametarget = ' onsubmit="'."this.target='$CFG->framename';".'"';
+ } else if (! empty($CFG->frametarget)) {
$frametarget = $CFG->frametarget;
+ } else {
+ $frametarget = '';
}
- if ($form_name) {
- $replace = '<form action="'.$CFG->wwwroot.'/mod/hotpot/attempt.php" method="post" name="'.$form_name.'"'.$frametarget.'>'.$replace.'</form>';
+ if ($form_id) {
+ $replace = '<form action="'.$CFG->wwwroot.'/mod/hotpot/attempt.php" method="post" id="'.$form_id.'"'.$frametarget.'>'.$replace.'</form>';
}
if ($center) {
$replace = '<div style="margin-left:auto; margin-right:auto; text-align: center;">'.$replace.'</div>';
@@ -48,6 +48,12 @@ function hotpot_xml_quiz_template(&$parent) {
if (!empty($pattern)) {
$this->expand_strings('html', $pattern);
}
+ // fix doctype (convert short dtd to long dtd)
+ $this->html = preg_replace(
+ '/<!DOCTYPE[^>]*>/',
+ '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">',
+ $this->html, 1
+ );
}
// captions and messages
@@ -68,7 +74,7 @@ function v6_expand_Back() {
return $this->int_value('hotpot-config-file,global,include-back');
}
function v6_expand_BackCaption() {
- return $this->parent->xml_value('hotpot-config-file,global,back-caption');
+ return str_replace('<=', '&lt;=', $this->parent->xml_value('hotpot-config-file,global,back-caption'));
}
function v6_expand_ClickToAdd() {
return $this->parent->xml_value('hotpot-config-file,'.$this->parent->quiztype.',click-to-add');
@@ -115,8 +121,7 @@ function v6_expand_NextEx() {
return $this->int_value('hotpot-config-file,global,include-next-ex');
}
function v6_expand_NextExCaption() {
- $caption = $this->parent->xml_value('hotpot-config-file,global,next-ex-caption');
- return ($caption=='=>' ? '=&gt;' : $caption);
+ return str_replace('=>', '=&gt;', $this->parent->xml_value('hotpot-config-file,global,next-ex-caption'));
}
function v6_expand_NextQCaption() {
return $this->parent->xml_value('hotpot-config-file,global,next-q-caption');

0 comments on commit 40bb96d

Please sign in to comment.