Skip to content

Commit

Permalink
MDL-19580 cleanup of require css and js filepicker code
Browse files Browse the repository at this point in the history
  • Loading branch information
skodak committed Jun 24, 2009
1 parent b14e77c commit ff5fe31
Show file tree
Hide file tree
Showing 14 changed files with 169 additions and 121 deletions.
2 changes: 2 additions & 0 deletions lib/adminlib.php
Expand Up @@ -1578,6 +1578,7 @@ public function __construct($name, $visiblename, $description, $defaultsetting,
$this->rows = $rows;
$this->cols = $cols;
parent::__construct($name, $visiblename, $description, $defaultsetting, $paramtype);
editors_head_setup();
}
/**
* Returns an XHTML string for the editor
Expand Down Expand Up @@ -2985,6 +2986,7 @@ class admin_setting_special_frontpagedesc extends admin_setting {
*/
public function __construct() {
parent::__construct('summary', get_string('frontpagedescription'), get_string('frontpagedescriptionhelp'), NULL);
editors_head_setup();
}

/**
Expand Down
4 changes: 3 additions & 1 deletion lib/ajax/ajaxlib.php
Expand Up @@ -658,7 +658,9 @@ public function __construct(page_requirements_manager $manager, $libname) {
$this->jss[] = $manager->js($jsurl, true);
}
foreach ($cssurls as $cssurl) {
//$manager->css($cssurl, true);
// this might be a bit problematic because it requires yui to be
// requested before print_header() - this was not required in 1.9.x
$manager->css($cssurl, true);
}
}

Expand Down
8 changes: 6 additions & 2 deletions lib/editor/tinymce/lib.php
Expand Up @@ -51,11 +51,15 @@ public function supports_repositories() {
return true;
}

public function use_editor($elementid, array $options=null) {
public function head_setup() {
global $CFG, $PAGE;

require_once("$CFG->dirroot/repository/lib.php");
$PAGE->requires->js('/lib/editor/tinymce/tiny_mce_src.js');
$PAGE->requires->js('/lib/editor/tinymce/extra/tinymce_utils.js');
}

public function use_editor($elementid, array $options=null) {
global $PAGE;
$PAGE->requires->js_function_call('mce_init_editor', array($elementid, $this->get_init_params($elementid, $options)));
}

Expand Down
31 changes: 31 additions & 0 deletions lib/editorlib.php
Expand Up @@ -111,6 +111,30 @@ function get_available_editors() {
return $editors;
}

/**
* Setup all JS and CSS needed for editors.
* @return void
*/
function editors_head_setup() {
global $CFG;

if (empty($CFG->texteditors)) {
$CFG->texteditors = 'tinymce,textarea';
}
$active = explode(',', $CFG->texteditors);

foreach ($active as $editorname) {
if (!$editor = get_texteditor($editorname)) {
continue;
}
if (!$editor->supported_by_browser()) {
// bad luck, this editor is not compatible
continue;
}
$editor->head_setup();
}
}

/**
* Base abstract text editor class.
*
Expand Down Expand Up @@ -150,6 +174,13 @@ public abstract function supports_repositories();
* @return void
*/
public abstract function use_editor($elementid, array $options=null);

/**
* Setup all JS and CSS needed for editor.
* @return void
*/
public function head_setup() {
}
}


Expand Down
8 changes: 6 additions & 2 deletions lib/form/editor.php
Expand Up @@ -15,6 +15,7 @@ class MoodleQuickForm_editor extends HTML_QuickForm_element {

function MoodleQuickForm_editor($elementName=null, $elementLabel=null, $attributes=null, $options=null) {
global $CFG;
require_once("$CFG->dirroot/repository/lib.php");

$options = (array)$options;
foreach ($options as $name=>$value) {
Expand All @@ -29,6 +30,9 @@ function MoodleQuickForm_editor($elementName=null, $elementLabel=null, $attribut
$this->_options['context'] = get_context_instance(CONTEXT_SYSTEM);
}
parent::HTML_QuickForm_element($elementName, $elementLabel, $attributes);

repository_head_setup();
editors_head_setup();
}

function setName($name) {
Expand Down Expand Up @@ -171,9 +175,9 @@ function toHtml() {

require_once($CFG->dirroot.'/repository/lib.php');
$client_id = uniqid();
$ret = repository_get_client($ctx, $client_id, array('image', 'video', 'media'), '*');
$repojs = repository_get_client($ctx, $client_id, array('image', 'video', 'media'), '*');

$str .= $ret['css'].$ret['js'];
$str .= $repojs;
$str .= <<<EOD
<script type="text/javascript">
id2clientid['$id'] = '$client_id';
Expand Down
8 changes: 5 additions & 3 deletions lib/form/filemanager.php
Expand Up @@ -9,6 +9,7 @@ class MoodleQuickForm_filemanager extends HTML_QuickForm_element {

function MoodleQuickForm_filemanager($elementName=null, $elementLabel=null, $attributes=null, $options=null) {
global $CFG;
require_once("$CFG->dirroot/repository/lib.php");

$options = (array)$options;
foreach ($options as $name=>$value) {
Expand All @@ -20,6 +21,8 @@ function MoodleQuickForm_filemanager($elementName=null, $elementLabel=null, $att
$this->_options['maxbytes'] = get_max_upload_file_size($CFG->maxbytes, $options['maxbytes']);
}
parent::HTML_QuickForm_element($elementName, $elementLabel, $attributes);

repository_head_setup();
}

function setName($name) {
Expand Down Expand Up @@ -162,15 +165,14 @@ function toHtml() {
}

$client_id = uniqid();
$repo_info = repository_get_client($context, $client_id, $this->_options['filetypes'], $this->_options['returnvalue']);
$repojs = repository_get_client($context, $client_id, $this->_options['filetypes'], $this->_options['returnvalue']);

$html = $this->_get_draftfiles($draftitemid, $client_id);
$accessiblefp = get_string('accessiblefilepicker', 'repository');

$str = $this->_getTabs();
$str .= $html;
$str .= $repo_info['css'];
$str .= $repo_info['js'];
$str .= $repojs;
$str .= <<<EOD
<input value="$draftitemid" name="{$this->_attributes['name']}" type="hidden" />
<a href="###" id="btnadd-{$client_id}" style="display:none" class="btnaddfile" onclick="return callpicker('$id', '$client_id', '$draftitemid')">$straddfile</a>
Expand Down
7 changes: 5 additions & 2 deletions lib/form/filepicker.php
Expand Up @@ -18,6 +18,7 @@ class MoodleQuickForm_filepicker extends HTML_QuickForm_input {

function MoodleQuickForm_filepicker($elementName=null, $elementLabel=null, $attributes=null, $options=null) {
global $CFG;
require_once("$CFG->dirroot/repository/lib.php");

$options = (array)$options;
foreach ($options as $name=>$value) {
Expand All @@ -29,6 +30,8 @@ function MoodleQuickForm_filepicker($elementName=null, $elementLabel=null, $attr
$this->_options['maxbytes'] = get_max_upload_file_size($CFG->maxbytes, $options['maxbytes']);
}
parent::HTML_QuickForm_input($elementName, $elementLabel, $attributes);

repository_head_setup();
}

function setHelpButton($helpbuttonargs, $function='helpbutton') {
Expand Down Expand Up @@ -84,14 +87,14 @@ function toHtml() {
$context = get_context_instance(CONTEXT_COURSE, $COURSE->id);
}
$client_id = uniqid();
$repository_info = repository_get_client($context, $client_id, $this->_options['filetypes'], $this->_options['returnvalue']);
$repojs = repository_get_client($context, $client_id, $this->_options['filetypes'], $this->_options['returnvalue']);

$id = $this->_attributes['id'];
$elname = $this->_attributes['name'];

$str = $this->_getTabs();
$str .= '<input type="hidden" name="'.$elname.'" id="'.$id.'" '.$draftvalue.' />';
$str .= $repository_info['css'].$repository_info['js'];
$str .= $repojs;

$str .= <<<EOD
<a href="#nonjsfp" class="btnaddfile" onclick="return callpicker('$client_id', '$id', '$draftvalue')">$straddfile</a>
Expand Down
2 changes: 2 additions & 0 deletions lib/form/htmleditor.php
Expand Up @@ -36,6 +36,8 @@ function MoodleQuickForm_htmleditor($elementName=null, $elementLabel=null, $opti
$this->_type='textarea';
}
$this->_canUseHtmlEditor = $this->_options['canUseHtmlEditor'];

editors_head_setup();
}
/**
* set html for help button
Expand Down
2 changes: 0 additions & 2 deletions lib/javascript.php
Expand Up @@ -45,8 +45,6 @@
</script>
<script type="text/javascript">
//<![CDATA[
var id2clientid = {};
var id2itemid = {};
<?php
if (!empty($focus)) {
if(($pos = strpos($focus, '.')) !== false) {
Expand Down
1 change: 1 addition & 0 deletions lib/weblib.php
Expand Up @@ -4991,6 +4991,7 @@ function print_textarea($usehtmleditor, $rows, $cols, $width, $height, $name, $v
}

if ($usehtmleditor) {
editors_head_setup();
$editor = get_preferred_texteditor(FORMAT_HTML);
$editor->use_editor($id, array('legacy'=>true));
} else {
Expand Down
4 changes: 2 additions & 2 deletions mod/resource/type/file/resource.class.php
Expand Up @@ -193,6 +193,8 @@ function _postprocess(&$resource) {
*/
function display() {
global $CFG, $THEME, $USER, $PAGE;
///Yahoo javascript libaries for updating embedded object size
$PAGE->requires->yui_lib('container');

/// Set up generic stuff first, including checking for access
parent::display();
Expand Down Expand Up @@ -386,8 +388,6 @@ function display() {
if (empty($frameset) and !$embedded and !$inpopup and ($resource->options == "frame" || $resource->options == "objectframe") and empty($USER->screenreader)) {
/// display the resource into a object tag
if ($resource->options == "objectframe") {
///Yahoo javascript libaries for updating embedded object size
$PAGE->requires->yui_lib('container');

///Moodle Header and navigation bar
$navigation = build_navigation($this->navlinks, $cm);
Expand Down
135 changes: 30 additions & 105 deletions repository/lib.php
@@ -1,5 +1,4 @@
<?php
// $Id$

///////////////////////////////////////////////////////////////////////////
// //
Expand Down Expand Up @@ -1722,6 +1721,35 @@ function repository_setup_default_plugins() {
return true;
}

/**
* Loads
* @return void
*/
function repository_head_setup() {
global $PAGE;

$PAGE->requires->yui_lib('yahoo');
$PAGE->requires->yui_lib('dom');
$PAGE->requires->yui_lib('element');
$PAGE->requires->yui_lib('event');
$PAGE->requires->yui_lib('json');
$PAGE->requires->yui_lib('treeview');
$PAGE->requires->yui_lib('dragdrop');
$PAGE->requires->yui_lib('container');
$PAGE->requires->yui_lib('resize');
$PAGE->requires->yui_lib('layout');
$PAGE->requires->yui_lib('connection');
$PAGE->requires->yui_lib('button');
$PAGE->requires->yui_lib('selector');

//TODO: remove the ->in_head() once we refactor the inline script tags in repo code
$PAGE->requires->js('repository/repository.src.js')->in_head();

//TODO: remove following after we moe the content of file
// proper place (==themes)
$PAGE->requires->css('repository/repository.css');
}

/**
* Return javascript to create file picker to browse repositories
* @global object $CFG
Expand All @@ -1740,111 +1768,8 @@ function repository_get_client($context, $id = '', $accepted_filetypes = '*', $
$video_file_ext = json_encode($ft->get_file_ext(array('video')));
$accepted_file_ext = json_encode($ft->get_file_ext($accepted_filetypes));

$css = '';
$js = '';
if (!isset($CFG->filepickerjsloaded)) {
$css .= <<<EOD
<style type="text/css">
@import "$CFG->httpswwwroot/lib/yui/resize/assets/skins/sam/resize.css";
@import "$CFG->httpswwwroot/lib/yui/container/assets/skins/sam/container.css";
@import "$CFG->httpswwwroot/lib/yui/layout/assets/skins/sam/layout.css";
@import "$CFG->httpswwwroot/lib/yui/button/assets/skins/sam/button.css";
@import "$CFG->httpswwwroot/lib/yui/assets/skins/sam/treeview.css";
</style>
<style type="text/css">
/* Copyright (c) 2006 Yahoo! Inc. All rights reserved. */
/* copy from yui/examples/treeview/assets/css/folders/tree.css */
/* first or middle sibling, no children */
.ygtvtn { background: url($CFG->pixpath/y/tn.gif) 0 0 no-repeat; width:17px; height:22px; }
/* first or middle sibling, collapsable */
.ygtvtm { background: url($CFG->pixpath/y/tm.gif) 0 0 no-repeat; width:34px; height:22px; cursor:pointer }
/* first or middle sibling, collapsable, hover */
.ygtvtmh { background: url($CFG->pixpath/y/tmh.gif) 0 0 no-repeat; width:34px; height:22px; cursor:pointer }
/* first or middle sibling, expandable */
.ygtvtp { background: url($CFG->pixpath/y/tp.gif) 0 0 no-repeat; width:34px; height:22px; cursor:pointer }
/* first or middle sibling, expandable, hover */
.ygtvtph { background: url($CFG->pixpath/y/tph.gif) 0 0 no-repeat; width:34px; height:22px; cursor:pointer }
/* last sibling, no children */
.ygtvln { background: url($CFG->pixpath/y/ln.gif) 0 0 no-repeat; width:17px; height:22px; }
/* Last sibling, collapsable */
.ygtvlm { background: url($CFG->pixpath/y/lm.gif) 0 0 no-repeat; width:34px; height:22px; cursor:pointer }
/* Last sibling, collapsable, hover */
.ygtvlmh { background: url($CFG->pixpath/y/lmh.gif) 0 0 no-repeat; width:34px; height:22px; cursor:pointer }
/* Last sibling, expandable */
.ygtvlp { background: url($CFG->pixpath/y/lp.gif) 0 0 no-repeat; width:34px; height:22px; cursor:pointer }
/* Last sibling, expandable, hover */
.ygtvlph { background: url($CFG->pixpath/y/lph.gif) 0 0 no-repeat; width:34px; height:22px; cursor:pointer }
/* Loading icon */
.ygtvloading { background: url($CFG->pixpath/y/loading.gif) 0 0 no-repeat; width:16px; height:22px; }
/* the style for the empty cells that are used for rendering the depth
* of the node */
.ygtvdepthcell { background: url($CFG->pixpath/y/vline.gif) 0 0 no-repeat; width:17px; height:22px; }
.ygtvblankdepthcell { width:17px; height:22px; }
/* the style of the div around each node */
.ygtvitem { }
.ygtvitem table{ margin-bottom:0; }
.ygtvitem td { border:none;padding:0; }
/* the style of the div around each node's collection of children */
.ygtvchildren { }
* html .ygtvchildren { height:1%; }
/* the style of the text label in ygTextNode */
.ygtvlabel, .ygtvlabel:link, .ygtvlabel:visited, .ygtvlabel:hover { margin-left:2px; text-decoration: none; }
.file-picker{font-size:12px;}
.file-picker strong{background:#FFFFCC}
.file-picker a{color: #336699}
.file-picker a:hover{background:#003366;color:white}
.fp-panel{padding:0;margin:0; text-align:left;}
.fp-login-form{text-align:center}
.fp-searchbar{float:right}
.fp-viewbar{width:300px;float:left}
.fp-toolbar{padding: .8em;background: #FFFFCC;text-align:center;margin: 3px}
.fp-toolbar a{padding: 0 .5em}
.fp-list{list-style-type:none;padding:0;float:left;width:100%;margin:0;}
.fp-list li{border-bottom:1px dotted gray;margin-bottom: 1em;}
.fp-repo-name{display:block;padding: .5em;margin-bottom: .5em}
.fp-pathbar{margin: .4em;border-bottom: 1px dotted gray;}
.fp-pathbar a{padding: .4em;}
.fp-rename-form{text-align:center}
.fp-rename-form p{margin: 1em;}
.fp-upload-form{margin: 2em 0;text-align:center}
.fp-upload-btn a{cursor: default;background: white;border:1px solid gray;color:black;padding: .5em}
.fp-upload-btn a:hover {background: grey;color:white}
.fp-paging{margin:1em .5em; clear:both;text-align:center;line-height: 2.5em;}
.fp-paging a{padding: .5em;border: 1px solid #CCC}
.fp-paging a.cur_page{border: 1px solid blue}
.fp-popup{text-align:center}
.fp-grid{float:left;text-align:center;}
.fp-grid div{overflow: hidden}
.fp-grid p{margin:0;padding:0;background: #FFFFCC}
.fp-grid .label{height:48px;text-align:center}
.fp-grid span{color:gray}
</style>
<!--[if IE 6]>
<style type="text/css">
/* Fix for IE6 */
.yui-skin-sam .yui-panel .hd{}
</style>
<![endif]-->
EOD;
$PAGE->requires->yui_lib('yahoo');
$PAGE->requires->yui_lib('dom');
$PAGE->requires->yui_lib('element');
$PAGE->requires->yui_lib('event');
$PAGE->requires->yui_lib('json');
$PAGE->requires->yui_lib('treeview');
$PAGE->requires->yui_lib('dragdrop');
$PAGE->requires->yui_lib('container');
$PAGE->requires->yui_lib('resize');
$PAGE->requires->yui_lib('layout');
$PAGE->requires->yui_lib('connection');
$PAGE->requires->yui_lib('button');
$PAGE->requires->yui_lib('selector');
require_js(array(
'repository/repository.src.js'
));
$lang = array();
$lang['title'] = get_string('title', 'repository');
$lang['preview'] = get_string('preview', 'repository');
Expand Down Expand Up @@ -1931,5 +1856,5 @@ function repository_get_client($context, $id = '', $accepted_filetypes = '*', $
$js .= "\r\n";
$js .= "</script>";

return array('css'=>$css, 'js'=>$js);
return $js;
}

0 comments on commit ff5fe31

Please sign in to comment.