From: urs_hunkler <urs_hunkler> Date: Sat, 5 Feb 2005 21:37:53 +0000 (+0000) Subject: I added all code to handle the cookies and the sideblock content, the icon and the... X-Git-Url: http://git.mjollnir.org/gw?a=commitdiff_plain;h=c24a1ccd085b2ac48ef0d6d332ba170d66b0cdd3;p=moodle.git I added all code to handle the cookies and the sideblock content, the icon and the patches for hiding/showing the content of the sideblocks. How it works: _ within the "sideblockheading" a DIV with class="hide-show" holds a link calling the JS containerDisplaySwitching(). To the user it's represented by the icon "switch.gif" (a plus in a square) at the right end side of the header. _ all content of the sideblock is surounded by a new <div class="blockcontent" id="'.$attributes['id']."_cont\">" _ a call of the JS containerDisplaySwitching() changes the state of the appropriate DIV with the content to "display:none/inline" and writes this state into a cookie. _ at the end of every block I added a call to the JS "containerDisplaySet()". This reads the block's state and hides the content or leaves it visible with every page load. _ in the stylesheet I added the positioning of the icon: .sideblockheading .hide-show { float:right; } .sideblockheading a img.hide-show-image { padding-top:0.25em; } --- diff --git a/lib/container.js b/lib/container.js new file mode 100644 index 0000000000..436c1a3876 --- /dev/null +++ b/lib/container.js @@ -0,0 +1,37 @@ +function containerDisplaySwitching(id) +{ + var id_cont = id + "_cont"; + var x = new getObj(id_cont); + var what = (x.style.display == 'inline' || x.style.display == '') ? 'none' : 'inline'; + x.style.display = what; + new cookie(id, what, 356, '/').set(); +} + +function containerDisplaySet(id) +{ + var id_cont = id + "_cont"; + var x = new getObj(id_cont); + var what = new cookie(id).read(); + if (what != null) { + x.style.display = what; + } +} + +function getObj(id) +{ + if (document.getElementById) + { + this.obj = document.getElementById(id); + this.style = document.getElementById(id).style; + } + else if (document.all) + { + this.obj = document.all[id]; + this.style = document.all[id].style; + } + else if (document.layers) + { + this.obj = document.layers[id]; + this.style = document.layers[id]; + } +} diff --git a/lib/cookies.js b/lib/cookies.js new file mode 100644 index 0000000000..966b7c2ceb --- /dev/null +++ b/lib/cookies.js @@ -0,0 +1,84 @@ +/******************************************************* +COOKIE FUNCTIONALITY +Based on "Night of the Living Cookie" by Bill Dortch +(c) 2003, Ryan Parman +http://www.skyzyx.com +Distributed according to SkyGPL 2.1, http://www.skyzyx.com/license/ +*******************************************************/ +function cookie(name, value, expires, path, domain, secure) +{ + // Passed Values + this.name=name; + this.value=value; + this.expires=expires; + this.path=path; + this.domain=domain; + this.secure=secure; + + // Read cookie + this.read=function() + { + // To allow for faster parsing + var ck=document.cookie; + + var arg = this.name + "="; + var alen = arg.length; + var clen = ck.length; + var i = 0; + + while (i < clen) + { + var j = i + alen; + if (ck.substring(i, j) == arg) + { + var endstr = ck.indexOf (";", j); + if (endstr == -1) endstr = ck.length; + return unescape(ck.substring(j, endstr)); + } + i = ck.indexOf(" ", i) + 1; + if (i == 0) break; + } + return null; + } + + // Set cookie + this.set=function() + { + // Store initial value of "this.expires" for re-initialization. + expStore=this.expires; + + // Set time to absolute zero. + exp = new Date(); + base = new Date(0); + skew = base.getTime(); + if (skew > 0) exp.setTime (exp.getTime() - skew); + exp.setTime(exp.getTime() + (this.expires*24*60*60*1000)); + this.expires=exp; + + document.cookie = this.name + "=" + escape (this.value) + + ((this.expires) ? "; expires=" + this.expires.toGMTString() : "") + + ((this.path) ? "; path=" + this.path : "") + + ((this.domain) ? "; domain=" + this.domain : "") + + ((this.secure) ? "; secure" : ""); + + // Re-initialize + this.expires=expStore; + } + + // Kill cookie + this.kill=function() + { + document.cookie = this.name + "=" + + ((this.path) ? "; path=" + this.path : "") + + ((this.domain) ? "; domain=" + this.domain : "") + + "; expires=Thu, 01-Jan-70 00:00:01 GMT"; + } + + // Change cookie settings. + this.changeName=function(chName) { this.kill(); this.name=chName; this.set(); } + this.changeVal=function(chVal) { this.kill(); this.value=chVal; this.set(); } + this.changeExp=function(chExp) { this.kill(); this.expires=chExp; this.set(); } + this.changePath=function(chPath) { this.kill(); this.path=chPath; this.set(); } + this.changeDomain=function(chDom) { this.kill(); this.domain=chDom; this.set(); } + this.changeSecurity=function(chSec) { this.kill(); this.secure=chSec; this.set(); } +} diff --git a/lib/javascript.php b/lib/javascript.php index d4dd36c6fc..d871c780b8 100644 --- a/lib/javascript.php +++ b/lib/javascript.php @@ -11,6 +11,9 @@ ?> <script language="JavaScript" type="text/javascript" src="<?php echo $CFG->wwwroot ?>/lib/overlib.js"></script> <script language="JavaScript" type="text/javascript" src="<?php echo $CFG->wwwroot ?>/lib/javascript-static.js"></script> +<script language="JavaScript" type="text/javascript" +src="<?php echo "$CFG->wwwroot/lib/container.js" ?>"></script><script language="JavaScript" type="text/javascript" +src="<?php echo "$CFG->wwwroot/lib/cookies.js" ?>"></script> <script language="JavaScript" type="text/javascript"> <!-- // Non-Static Javascript functions diff --git a/lib/weblib.php b/lib/weblib.php index 0ab26b2fdd..8bd9a29e53 100644 --- a/lib/weblib.php +++ b/lib/weblib.php @@ -3504,7 +3504,7 @@ function print_side_block($heading='', $content='', $list=NULL, $icons=NULL, $fo echo '</table>'; } - print_side_block_end(); + print_side_block_end($attributes); } /** @@ -3516,6 +3516,7 @@ function print_side_block($heading='', $content='', $list=NULL, $icons=NULL, $fo */ function print_side_block_start($heading='', $attributes = array()) { + global $CFG; // If there are no special attributes, give a default CSS class if(empty($attributes) || !is_array($attributes)) { $attributes = array('class' => 'sideblock'); @@ -3536,17 +3537,32 @@ function print_side_block_start($heading='', $attributes = array()) { echo '<table class="sideblock" cellspacing="0" cellpadding="5"'.$attrtext.'>'; if ($heading) { - echo '<thead><tr><td class="sideblockheading">'.$heading.'</td></tr></thead>'; + // orig echo '<thead><tr><td class="sideblockheading">'.$heading.'</td></tr></thead>'; + echo '<thead> + <tr> + <td class="sideblockheading">' + .$heading. + '<div class="hide-show"> + <a href="javascript:containerDisplaySwitching('."'".$attributes['id']."'".');"\ >'."<img src=\"$CFG->pixpath/t/switch.gif\" alt=\"\" height=\"11\" width=\"11\" class=\"hide-show-image\" />".'</a> + </div> + </td> + </tr> + </thead>'; } - echo '<tbody><tr><td class="sideblockmain">'; + // orig echo '<tbody><tr><td class="sideblockmain">'; + echo '<tbody><tr><td class="sideblockmain"><div class="blockcontent" id="'.$attributes['id']."_cont\">"; } /** * Print table ending tags for a side block box. */ -function print_side_block_end() { - echo '</td></tr></tbody></table>'; +function print_side_block_end($attributes = array()) { + echo '</div></td></tr></tbody></table>'; + // js call to set block display state which is saved in cookie. + echo "\n <script language=\"JavaScript\"> <!-- //hide "; + echo "\n containerDisplaySet(\"".$attributes['id']."\");"; + echo "\n // done hiding --> </script>"; echo "\n"; } diff --git a/pix/t/switch.gif b/pix/t/switch.gif new file mode 100644 index 0000000000..84ac353245 Binary files /dev/null and b/pix/t/switch.gif differ diff --git a/theme/orangewhite/styles_layout.css b/theme/orangewhite/styles_layout.css index 2c6d3e5835..48ede844c3 100644 --- a/theme/orangewhite/styles_layout.css +++ b/theme/orangewhite/styles_layout.css @@ -676,6 +676,14 @@ TD.cal_event_description { padding-top:0.5em; } +.sideblockheading .hide-show { + float:right; +} + +.sideblockheading a img.hide-show-image { + padding-top:0.35em; +} + .sideblockmain HR { height:1px; border:none; diff --git a/theme/standard/styles_layout.css b/theme/standard/styles_layout.css index 8b96433e1c..4fcaaa7995 100644 --- a/theme/standard/styles_layout.css +++ b/theme/standard/styles_layout.css @@ -436,6 +436,14 @@ td.cal_event_description { background-repeat:repeat-x; } +.sideblockheading .hide-show { + float:right; +} + +.sideblockheading a img.hide-show-image { + padding-top:0.25em; +} + .sideblockmain hr { height:1px; margin-top:4px;