2005-04-16 12:30:48 +00:00
// Miscellaneous core Javascript functions for Moodle
2005-11-09 02:18:50 +00:00
function popupchecker ( msg ) {
var testwindow = window . open ( 'itestwin.html' , '' , 'width=1,height=1,left=0,top=0,scrollbars=no' ) ;
if ( testwindow == null )
{ alert ( msg ) ; }
else {
testwindow . close ( ) ;
}
}
2005-01-09 15:10:12 +00:00
function checkall ( ) {
2007-01-06 19:22:58 +00:00
var el = document . getElementsByTagName ( 'input' ) ;
for ( var i = 0 ; i < el . length ; i ++ ) {
if ( el [ i ] . type == 'checkbox' ) {
el [ i ] . checked = true ;
}
}
2005-01-09 15:10:12 +00:00
}
2005-03-06 12:00:46 +00:00
function checknone ( ) {
2007-01-06 19:22:58 +00:00
var el = document . getElementsByTagName ( 'input' ) ;
for ( var i = 0 ; i < el . length ; i ++ ) {
if ( el [ i ] . type == 'checkbox' ) {
el [ i ] . checked = false ;
}
}
2005-03-06 12:00:46 +00:00
}
2007-01-06 19:22:58 +00:00
function lockoptions ( formid , master , subitems ) {
2006-09-20 15:04:57 +00:00
// Subitems is an array of names of sub items.
// Optionally, each item in subitems may have a
2005-01-09 15:10:12 +00:00
// companion hidden item in the form with the
2006-09-20 15:04:57 +00:00
// same name but prefixed by "h".
2007-01-06 19:22:58 +00:00
var form = document . forms [ formid ] ;
if ( eval ( "form." + master + ".checked" ) ) {
2005-01-09 15:10:12 +00:00
for ( i = 0 ; i < subitems . length ; i ++ ) {
unlockoption ( form , subitems [ i ] ) ;
}
} else {
for ( i = 0 ; i < subitems . length ; i ++ ) {
lockoption ( form , subitems [ i ] ) ;
}
}
return ( true ) ;
}
2006-12-28 09:32:45 +00:00
function lockoption ( form , item ) {
2007-01-06 19:22:58 +00:00
eval ( "form." + item + ".disabled=true" ) ; /* IE thing */
if ( form . elements [ 'h' + item ] ) {
eval ( "form.h" + item + ".value=1" ) ;
2006-12-28 09:32:45 +00:00
}
}
function unlockoption ( form , item ) {
2007-01-06 19:22:58 +00:00
eval ( "form." + item + ".disabled=false" ) ; /* IE thing */
if ( form . elements [ 'h' + item ] ) {
eval ( "form.h" + item + ".value=0" ) ;
2006-12-28 09:32:45 +00:00
}
}
2007-01-12 09:38:02 +00:00
2006-11-21 09:17:46 +00:00
function lockoptionsall ( formid ) {
2007-01-12 09:38:02 +00:00
var form = document . forms [ formid ] ;
var dependons = eval ( formid + 'items' ) ;
2007-04-06 06:01:11 +00:00
var tolock = Array ( ) ;
2007-01-12 09:38:02 +00:00
for ( var dependon in dependons ) {
2007-08-05 12:15:27 +00:00
// change for MooTools compatibility
if ( ! dependons . propertyIsEnumerable ( dependon ) ) {
continue ;
}
2007-01-12 09:38:02 +00:00
var master = form [ dependon ] ;
2007-08-05 12:15:27 +00:00
if ( master === undefined ) {
2007-07-12 09:17:55 +00:00
continue ;
}
2007-01-12 09:38:02 +00:00
for ( var condition in dependons [ dependon ] ) {
for ( var value in dependons [ dependon ] [ condition ] ) {
var lock ;
switch ( condition ) {
case 'notchecked' :
lock = ! master . checked ; break ;
case 'checked' :
lock = master . checked ; break ;
case 'noitemselected' :
lock = master . selectedIndex == - 1 ; break ;
case 'eq' :
lock = master . value == value ; break ;
default :
lock = master . value != value ; break ;
}
for ( var ei in dependons [ dependon ] [ condition ] [ value ] ) {
2007-08-05 12:15:27 +00:00
// change for MooTools compatibility
if ( ! window . webkit && ( ! dependons [ dependon ] [ condition ] [ value ] . propertyIsEnumerable ( ei ) ) ) {
continue ;
}
2007-04-06 06:01:11 +00:00
var eltolock = dependons [ dependon ] [ condition ] [ value ] [ ei ] ;
if ( tolock [ eltolock ] != null ) {
tolock [ eltolock ] =
lock || tolock [ eltolock ] ;
} else {
tolock [ eltolock ] = lock ;
}
2007-01-12 09:38:02 +00:00
}
}
2006-11-21 09:17:46 +00:00
}
2007-01-12 09:38:02 +00:00
}
2007-04-06 06:01:11 +00:00
for ( var el in tolock ) {
2007-08-05 12:15:27 +00:00
// change for MooTools compatibility
if ( ! tolock . propertyIsEnumerable ( el ) ) {
continue ;
}
2007-04-06 06:01:11 +00:00
var formelement = form [ el ] ;
2007-08-05 12:15:27 +00:00
if ( ( formelement === undefined ) || ( formelement . disabled === undefined ) ) {
2007-07-12 09:17:55 +00:00
continue ;
}
2007-04-06 06:01:11 +00:00
formelement . disabled = tolock [ el ] ;
}
2007-01-12 09:38:02 +00:00
return true ;
2006-11-21 09:17:46 +00:00
}
2006-11-22 08:53:35 +00:00
function lockoptionsallsetup ( formid ) {
2007-01-12 09:38:02 +00:00
var form = document . forms [ formid ] ;
var dependons = eval ( formid + 'items' ) ;
for ( var dependon in dependons ) {
2007-08-05 12:15:27 +00:00
// change for MooTools compatibility
if ( ! dependons . propertyIsEnumerable ( dependon ) ) {
continue ;
}
2007-01-12 09:38:02 +00:00
var master = form [ dependon ] ;
2007-08-05 12:15:27 +00:00
if ( master === undefined ) {
2007-07-12 09:17:55 +00:00
continue ;
}
2007-07-13 08:14:37 +00:00
master . formid = formid ;
master . onclick = function ( ) { return lockoptionsall ( this . formid ) ; } ;
master . onblur = function ( ) { return lockoptionsall ( this . formid ) ; } ;
master . onchange = function ( ) { return lockoptionsall ( this . formid ) ; } ;
2007-01-12 09:38:02 +00:00
}
for ( var i = 0 ; i < form . elements . length ; i ++ ) {
var formelement = form . elements [ i ] ;
if ( formelement . type == 'reset' ) {
2007-07-13 08:14:37 +00:00
formelement . formid = formid ;
formelement . onclick = function ( ) { this . form . reset ( ) ; return lockoptionsall ( this . formid ) ; } ;
formelement . onblur = function ( ) { this . form . reset ( ) ; return lockoptionsall ( this . formid ) ; } ;
formelement . onchange = function ( ) { this . form . reset ( ) ; return lockoptionsall ( this . formid ) ; } ;
2007-01-12 09:38:02 +00:00
}
}
return lockoptionsall ( formid ) ;
2006-11-22 08:53:35 +00:00
}
2006-11-21 09:17:46 +00:00
2005-03-08 04:22:38 +00:00
function submitFormById ( id ) {
var theform = document . getElementById ( id ) ;
if ( ! theform ) {
return false ;
}
2007-01-18 12:55:46 +00:00
if ( theform . tagName . toLowerCase ( ) != 'form' ) {
2005-03-08 04:22:38 +00:00
return false ;
}
if ( ! theform . onsubmit || theform . onsubmit ( ) ) {
return theform . submit ( ) ;
}
}
2005-03-18 14:36:10 +00:00
2005-08-24 23:08:54 +00:00
function select _all _in ( elTagName , elClass , elId ) {
2007-01-06 19:22:58 +00:00
var inputs = document . getElementsByTagName ( 'input' ) ;
2005-08-24 23:08:54 +00:00
inputs = filterByParent ( inputs , function ( el ) { return findParentNode ( el , elTagName , elClass , elId ) ; } ) ;
2005-03-18 14:36:10 +00:00
for ( var i = 0 ; i < inputs . length ; ++ i ) {
2006-04-21 05:17:08 +00:00
if ( inputs [ i ] . type == 'checkbox' || inputs [ i ] . type == 'radio' ) {
2005-03-18 14:36:10 +00:00
inputs [ i ] . checked = 'checked' ;
}
}
}
2005-08-24 23:08:54 +00:00
function deselect _all _in ( elTagName , elClass , elId ) {
2005-03-18 14:36:10 +00:00
var inputs = document . getElementsByTagName ( 'INPUT' ) ;
2005-08-24 23:08:54 +00:00
inputs = filterByParent ( inputs , function ( el ) { return findParentNode ( el , elTagName , elClass , elId ) ; } ) ;
2005-03-18 14:36:10 +00:00
for ( var i = 0 ; i < inputs . length ; ++ i ) {
2006-04-21 05:17:08 +00:00
if ( inputs [ i ] . type == 'checkbox' || inputs [ i ] . type == 'radio' ) {
2005-03-18 14:36:10 +00:00
inputs [ i ] . checked = '' ;
}
}
}
function confirm _if ( expr , message ) {
if ( ! expr ) {
return true ;
}
return confirm ( message ) ;
}
2005-04-16 12:30:48 +00:00
/ *
findParentNode ( start , elementName , elementClass , elementID )
2006-11-21 09:17:46 +00:00
2005-04-16 12:30:48 +00:00
Travels up the DOM hierarchy to find a parent element with the
specified tag name , class , and id . All conditions must be met ,
but any can be ommitted . Returns the BODY element if no match
found .
* /
function findParentNode ( el , elName , elClass , elId ) {
2007-03-30 21:15:39 +00:00
while ( el . nodeName . toUpperCase ( ) != 'BODY' ) {
2005-04-16 12:30:48 +00:00
if (
2007-03-30 21:15:39 +00:00
( ! elName || el . nodeName . toUpperCase ( ) == elName ) &&
2005-04-16 12:30:48 +00:00
( ! elClass || el . className . indexOf ( elClass ) != - 1 ) &&
( ! elId || el . id == elId ) )
{
break ;
}
el = el . parentNode ;
}
return el ;
}
2006-12-14 12:44:10 +00:00
/ *
findChildNode ( start , elementName , elementClass , elementID )
Travels down the DOM hierarchy to find all child elements with the
specified tag name , class , and id . All conditions must be met ,
but any can be ommitted .
2006-12-19 07:03:08 +00:00
Doesn ' t examine children of matches .
2006-12-14 12:44:10 +00:00
* /
function findChildNodes ( start , tagName , elementClass , elementID , elementName ) {
var children = new Array ( ) ;
2007-01-24 19:39:59 +00:00
for ( var i = 0 ; i < start . childNodes . length ; i ++ ) {
2006-12-19 07:03:08 +00:00
var classfound = false ;
2007-01-24 19:39:59 +00:00
var child = start . childNodes [ i ] ;
2006-12-19 07:03:08 +00:00
if ( ( child . nodeType == 1 ) && //element node type
( elementClass && ( typeof ( child . className ) == 'string' ) ) ) {
var childClasses = child . className . split ( /\s+/ ) ;
for ( var childClassIndex in childClasses ) {
if ( childClasses [ childClassIndex ] == elementClass ) {
classfound = true ;
break ;
}
}
}
2006-12-28 09:32:45 +00:00
if ( child . nodeType == 1 ) { //element node type
if ( ( ! tagName || child . nodeName == tagName ) &&
( ! elementClass || classfound ) &&
( ! elementID || child . id == elementID ) &&
( ! elementName || child . name == elementName ) )
{
children = children . concat ( child ) ;
} else {
children = children . concat ( findChildNodes ( child , tagName , elementClass , elementID , elementName ) ) ;
}
2006-12-14 12:44:10 +00:00
}
}
return children ;
}
/ *
elementSetHide ( elements , hide )
Adds or removes the "hide" class for the specified elements depending on boolean hide .
* /
function elementShowAdvanced ( elements , show ) {
for ( var elementIndex in elements ) {
element = elements [ elementIndex ] ;
element . className = element . className . replace ( new RegExp ( ' ?hide' ) , '' )
if ( ! show ) {
element . className += ' hide' ;
}
}
}
2008-08-28 07:52:09 +00:00
function showAdvancedInit ( addBefore , nameAttr , buttonLabel , hideText , showText ) {
var showHideButton = document . createElement ( "input" ) ;
showHideButton . type = 'button' ;
showHideButton . value = buttonLabel ;
showHideButton . name = nameAttr ;
showHideButton . moodle = {
hideLabel : hideText ,
showLabel : showText
} ;
YAHOO . util . Event . addListener ( showHideButton , 'click' , showAdvancedOnClick ) ;
el = document . getElementById ( addBefore ) ;
el . parentNode . insertBefore ( showHideButton , el ) ;
}
function showAdvancedOnClick ( e ) {
var button = e . target ? e . target : e . srcElement ;
2006-12-14 12:44:10 +00:00
var toSet = findChildNodes ( button . form , null , 'advanced' ) ;
var buttontext = '' ;
2007-01-12 10:48:11 +00:00
if ( button . form . elements [ 'mform_showadvanced_last' ] . value == '0' || button . form . elements [ 'mform_showadvanced_last' ] . value == '' ) {
2006-12-14 12:44:10 +00:00
elementShowAdvanced ( toSet , true ) ;
2008-08-28 07:52:09 +00:00
buttontext = button . moodle . hideLabel ;
2006-12-14 12:44:10 +00:00
button . form . elements [ 'mform_showadvanced_last' ] . value = '1' ;
} else {
elementShowAdvanced ( toSet , false ) ;
2008-08-28 07:52:09 +00:00
buttontext = button . moodle . showLabel ;
2006-12-14 12:44:10 +00:00
button . form . elements [ 'mform_showadvanced_last' ] . value = '0' ;
}
var formelements = button . form . elements ;
2007-10-23 22:29:04 +00:00
// Fixed MDL-10506
for ( var i = 0 ; i < formelements . length ; i ++ ) {
2007-01-30 07:45:15 +00:00
if ( formelements [ i ] && formelements [ i ] . name && ( formelements [ i ] . name == 'mform_showadvanced' ) ) {
2006-12-14 12:44:10 +00:00
formelements [ i ] . value = buttontext ;
}
}
//never submit the form if js is enabled.
return false ;
}
2005-04-16 12:30:48 +00:00
2007-04-30 18:03:19 +00:00
function unmaskPassword ( id ) {
2007-04-06 14:18:02 +00:00
var pw = document . getElementById ( id ) ;
2007-04-30 18:03:19 +00:00
var chb = document . getElementById ( id + 'unmask' ) ;
2007-04-06 14:18:02 +00:00
try {
// first try IE way - it can not set name attribute later
if ( chb . checked ) {
var newpw = document . createElement ( '<input type="text" name="' + pw . name + '">' ) ;
} else {
var newpw = document . createElement ( '<input type="password" name="' + pw . name + '">' ) ;
}
2007-04-26 07:08:12 +00:00
newpw . attributes [ 'class' ] . nodeValue = pw . attributes [ 'class' ] . nodeValue ;
2007-04-06 14:18:02 +00:00
} catch ( e ) {
var newpw = document . createElement ( 'input' ) ;
newpw . setAttribute ( 'name' , pw . name ) ;
if ( chb . checked ) {
newpw . setAttribute ( 'type' , 'text' ) ;
} else {
newpw . setAttribute ( 'type' , 'password' ) ;
}
2007-04-26 07:08:12 +00:00
newpw . setAttribute ( 'class' , pw . getAttribute ( 'class' ) ) ;
2007-04-06 14:18:02 +00:00
}
newpw . id = pw . id ;
newpw . size = pw . size ;
newpw . onblur = pw . onblur ;
newpw . onchange = pw . onchange ;
newpw . value = pw . value ;
pw . parentNode . replaceChild ( newpw , pw ) ;
}
2005-04-16 12:30:48 +00:00
/ *
elementToggleHide ( element , elementFinder )
If elementFinder is not provided , toggles the "hidden" class for the specified element .
If elementFinder is provided , then the "hidden" class will be toggled for the object
returned by the function call elementFinder ( element ) .
If persistent == true , also sets a cookie for this .
* /
2007-12-18 17:18:19 +00:00
function elementToggleHide ( el , persistent , elementFinder , strShow , strHide ) {
2005-04-16 12:30:48 +00:00
if ( ! elementFinder ) {
2007-12-18 17:18:19 +00:00
var obj = el ; //el:container
el = document . getElementById ( 'togglehide_' + obj . id ) ;
2005-04-16 12:30:48 +00:00
}
else {
2007-12-18 17:18:19 +00:00
var obj = elementFinder ( el ) ; //el:button.
2005-04-16 12:30:48 +00:00
}
if ( obj . className . indexOf ( 'hidden' ) == - 1 ) {
obj . className += ' hidden' ;
2007-12-18 17:18:19 +00:00
if ( el . src ) {
el . src = el . src . replace ( 'switch_minus' , 'switch_plus' ) ;
el . alt = strShow ;
el . title = strShow ;
}
2006-12-14 12:44:10 +00:00
var shown = 0 ;
2005-04-16 12:30:48 +00:00
}
else {
2007-12-18 17:18:19 +00:00
obj . className = obj . className . replace ( new RegExp ( ' ?hidden' ) , '' ) ;
if ( el . src ) {
el . src = el . src . replace ( 'switch_plus' , 'switch_minus' ) ;
el . alt = strHide ;
el . title = strHide ;
}
2006-12-14 12:44:10 +00:00
var shown = 1 ;
2005-04-16 12:30:48 +00:00
}
2006-12-14 12:44:10 +00:00
2005-04-16 12:30:48 +00:00
if ( persistent == true ) {
new cookie ( 'hide:' + obj . id , 1 , ( shown ? - 1 : 356 ) , '/' ) . set ( ) ;
}
}
2007-12-18 17:18:19 +00:00
function elementCookieHide ( id , strShow , strHide ) {
2005-04-16 12:30:48 +00:00
var obj = document . getElementById ( id ) ;
var cook = new cookie ( 'hide:' + id ) . read ( ) ;
if ( cook != null ) {
2007-12-18 17:18:19 +00:00
elementToggleHide ( obj , false , null , strShow , strHide ) ;
2005-04-16 12:30:48 +00:00
}
}
function filterByParent ( elCollection , parentFinder ) {
var filteredCollection = [ ] ;
for ( var i = 0 ; i < elCollection . length ; ++ i ) {
var findParent = parentFinder ( elCollection [ i ] ) ;
if ( findParent . nodeName != 'BODY' ) {
filteredCollection . push ( elCollection [ i ] ) ;
}
}
return filteredCollection ;
}
2005-05-12 14:45:16 +00:00
/ *
All this is here just so that IE gets to handle oversized blocks
in a visually pleasing manner . It does a browser detect . So sue me .
* /
function fix _column _widths ( ) {
var agt = navigator . userAgent . toLowerCase ( ) ;
if ( ( agt . indexOf ( "msie" ) != - 1 ) && ( agt . indexOf ( "opera" ) == - 1 ) ) {
fix _column _width ( 'left-column' ) ;
fix _column _width ( 'right-column' ) ;
}
}
function fix _column _width ( colName ) {
if ( column = document . getElementById ( colName ) ) {
if ( ! column . offsetWidth ) {
setTimeout ( "fix_column_width('" + colName + "')" , 20 ) ;
return ;
}
var width = 0 ;
var nodes = column . childNodes ;
for ( i = 0 ; i < nodes . length ; ++ i ) {
if ( nodes [ i ] . className . indexOf ( "sideblock" ) != - 1 ) {
if ( width < nodes [ i ] . offsetWidth ) {
width = nodes [ i ] . offsetWidth ;
}
}
}
for ( i = 0 ; i < nodes . length ; ++ i ) {
if ( nodes [ i ] . className . indexOf ( "sideblock" ) != - 1 ) {
nodes [ i ] . style . width = width + 'px' ;
}
}
}
}
2006-03-14 05:26:40 +00:00
/ *
2007-05-08 16:25:18 +00:00
Insert myValue at current cursor position
* /
2006-03-14 05:26:40 +00:00
function insertAtCursor ( myField , myValue ) {
2007-05-08 16:25:18 +00:00
// IE support
if ( document . selection ) {
myField . focus ( ) ;
sel = document . selection . createRange ( ) ;
sel . text = myValue ;
}
// Mozilla/Netscape support
else if ( myField . selectionStart || myField . selectionStart == '0' ) {
var startPos = myField . selectionStart ;
var endPos = myField . selectionEnd ;
myField . value = myField . value . substring ( 0 , startPos )
+ myValue + myField . value . substring ( endPos , myField . value . length ) ;
} else {
myField . value += myValue ;
}
2006-03-14 05:26:40 +00:00
}
2007-06-25 14:38:02 +00:00
/ *
2007-07-13 08:14:37 +00:00
Call instead of setting window . onload directly or setting body onload = .
Adds your function to a chain of functions rather than overwriting anything
that exists .
* /
2007-06-25 14:38:02 +00:00
function addonload ( fn ) {
var oldhandler = window . onload ;
window . onload = function ( ) {
if ( oldhandler ) oldhandler ( ) ;
2007-07-13 08:14:37 +00:00
fn ( ) ;
2007-06-25 14:38:02 +00:00
}
}
2008-09-24 09:32:46 +00:00
function uncheckall ( ) {
void ( d = document ) ;
void ( el = d . getElementsByTagName ( 'INPUT' ) ) ;
for ( i = 0 ; i < el . length ; i ++ ) {
void ( el [ i ] . checked = 0 ) ;
}
}
function checkall ( ) {
void ( d = document ) ;
void ( el = d . getElementsByTagName ( 'INPUT' ) ) ;
for ( i = 0 ; i < el . length ; i ++ ) {
void ( el [ i ] . checked = 1 ) ;
}
}
function getElementsByClassName ( oElm , strTagName , oClassNames ) {
var arrElements = ( strTagName == "*" && oElm . all ) ? oElm . all : oElm . getElementsByTagName ( strTagName ) ;
var arrReturnElements = new Array ( ) ;
var arrRegExpClassNames = new Array ( ) ;
if ( typeof oClassNames == "object" ) {
for ( var i = 0 ; i < oClassNames . length ; i ++ ) {
arrRegExpClassNames . push ( new RegExp ( "(^|\\s)" + oClassNames [ i ] . replace ( /\-/g , "\\-" ) + "(\\s|$)" ) ) ;
}
}
else {
arrRegExpClassNames . push ( new RegExp ( "(^|\\s)" + oClassNames . replace ( /\-/g , "\\-" ) + "(\\s|$)" ) ) ;
}
var oElement ;
var bMatchesAll ;
for ( var j = 0 ; j < arrElements . length ; j ++ ) {
oElement = arrElements [ j ] ;
bMatchesAll = true ;
for ( var k = 0 ; k < arrRegExpClassNames . length ; k ++ ) {
if ( ! arrRegExpClassNames [ k ] . test ( oElement . className ) ) {
bMatchesAll = false ;
break ;
}
}
if ( bMatchesAll ) {
arrReturnElements . push ( oElement ) ;
}
}
return ( arrReturnElements )
}
2008-09-25 03:14:24 +00:00
function openpopup ( url , name , options , fullscreen ) {
2008-09-25 10:07:11 +00:00
var fullurl = moodle _cfg . wwwroot + url ;
2008-09-25 03:14:24 +00:00
var windowobj = window . open ( fullurl , name , options ) ;
if ( fullscreen ) {
windowobj . moveTo ( 0 , 0 ) ;
windowobj . resizeTo ( screen . availWidth , screen . availHeight ) ;
}
windowobj . focus ( ) ;
return false ;
}
2008-09-25 10:07:11 +00:00
/* This is only used on a few help pages. */
emoticons _help = {
inputarea : null ,
init : function ( formname , fieldname , listid ) {
if ( ! opener || ! opener . document . forms [ formname ] ) {
return ;
}
emoticons _help . inputarea = opener . document . forms [ formname ] [ fieldname ] ;
if ( ! emoticons _help . inputarea ) {
return ;
}
var emoticons = document . getElementById ( listid ) . getElementsByTagName ( 'li' ) ;
for ( var i = 0 ; i < emoticons . length ; i ++ ) {
var text = emoticons [ i ] . getElementsByTagName ( 'img' ) [ 0 ] . alt ;
YAHOO . util . Event . addListener ( emoticons [ i ] , 'click' , emoticons _help . inserttext , text ) ;
}
} ,
inserttext : function ( e , text ) {
text = ' ' + text + ' ' ;
if ( emoticons _help . inputarea . createTextRange && emoticons _help . inputarea . caretPos ) {
var caretPos = emoticons _help . inputarea . caretPos ;
caretPos . text = caretPos . text . charAt ( caretPos . text . length - 1 ) == ' ' ? text + ' ' : text ;
} else {
emoticons _help . inputarea . value += text ;
}
emoticons _help . inputarea . focus ( ) ;
}
2008-10-31 08:25:19 +00:00
}
/ * *
* Makes a best effort to connect back to Moodle to update a user preference ,
* however , there is no mechanism for finding out if the update succeeded .
*
* Before you can use this function in your JavsScript , you must have called
* user _preference _allow _ajax _update from moodlelib . php to tell Moodle that
* the udpate is allowed , and how to safely clean and submitted values .
*
* @ param String name the name of the setting to udpate .
* @ param String the value to set it to .
* /
function set _user _preference ( name , value ) {
// Don't generate a script error if the library has not been loaded,
// unless we are a Developer, in which case we want the error.
if ( YAHOO && YAHOO . util && YAHOO . util . Connect || moodle _cfg . developerdebug ) {
var url = moodle _cfg . wwwroot + '/lib/ajax/setuserpref.php?sesskey=' +
moodle _cfg . sesskey + '&pref=' + encodeURI ( name ) + '&value=' + encodeURI ( value ) ;
// If we are a developer, ensure that failures are reported.
var callback = { } ;
if ( moodle _cfg . developerdebug ) {
callback . failure = function ( ) {
var a = document . createElement ( 'a' ) ;
a . href = url ;
a . classname = 'error' ;
a . appendChild ( document . createTextNode ( "Error updating user preference '" + name + "' using ajax. Clicking this link will repeat the Ajax call that failed so you can see the error." ) ) ;
document . body . insertBefore ( a , document . body . firstChild ) ;
}
}
// Make the request.
YAHOO . util . Connect . asyncRequest ( 'GET' , url , callback ) ;
}
2008-09-25 10:07:11 +00:00
}