From 3df72098bbc205fa4bd4735d52d2626baad93548 Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Fri, 19 May 2006 18:50:23 +0200 Subject: new mediamanager This patch adds a completely rewritten media popup. The following noteworthy changes were made: - media manager uses a collapsible namespace tree - media manager uses AJAX if available - media manager popup can be kept open when selecting a media file - only one template is used for the media manager :!: Template - Editable image metadata is configured in conf/mediameta.php now - The JS cookie mechanism was enhanced to store key/value pairs - Language strings can be exported to JS in js.php darcs-hash:20060519165023-7ad00-4932b4553fc919aa4a8b8187958b823acf4f8cee.gz --- lib/exe/ajax.php | 36 ++++++++ lib/exe/js.php | 23 +++-- lib/exe/media.php | 183 ------------------------------------- lib/exe/mediamanager.php | 53 +++++++++++ lib/images/fileicons/gif.png | Bin 0 -> 881 bytes lib/images/fileicons/jpeg.png | Bin 0 -> 881 bytes lib/images/fileicons/jpg.png | Bin 0 -> 881 bytes lib/images/fileicons/png.png | Bin 0 -> 881 bytes lib/images/fileicons/swf.png | Bin 0 -> 818 bytes lib/images/fileicons/tar.png | Bin 0 -> 734 bytes lib/images/fileicons/txt.png | Bin 462 -> 489 bytes lib/scripts/cookie.js | 111 +++++++++++++++++++++++ lib/scripts/edit.js | 5 +- lib/scripts/media.js | 191 +++++++++++++++++++++++++++++++++++++++ lib/scripts/script.js | 130 +++++++++----------------- lib/scripts/tw-sack.js | 28 +++--- lib/tpl/default/media.css | 115 +++++++++++++++++++++++ lib/tpl/default/media.php | 54 ----------- lib/tpl/default/mediaedit.php | 87 ------------------ lib/tpl/default/mediamanager.php | 41 +++++++++ lib/tpl/default/mediaref.php | 50 ---------- lib/tpl/default/style.ini | 3 + 22 files changed, 630 insertions(+), 480 deletions(-) delete mode 100644 lib/exe/media.php create mode 100644 lib/exe/mediamanager.php create mode 100644 lib/images/fileicons/gif.png create mode 100644 lib/images/fileicons/jpeg.png create mode 100644 lib/images/fileicons/jpg.png create mode 100644 lib/images/fileicons/png.png create mode 100644 lib/images/fileicons/swf.png create mode 100644 lib/images/fileicons/tar.png create mode 100644 lib/scripts/cookie.js create mode 100644 lib/scripts/media.js create mode 100644 lib/tpl/default/media.css delete mode 100644 lib/tpl/default/media.php delete mode 100644 lib/tpl/default/mediaedit.php create mode 100644 lib/tpl/default/mediamanager.php delete mode 100644 lib/tpl/default/mediaref.php (limited to 'lib') diff --git a/lib/exe/ajax.php b/lib/exe/ajax.php index 886e9829d..c9b93a4b8 100644 --- a/lib/exe/ajax.php +++ b/lib/exe/ajax.php @@ -97,6 +97,8 @@ function ajax_lock(){ /** * Delete a draft + * + * @author Andreas Gohr */ function ajax_draftdel(){ $id = cleanID($_POST['id']); @@ -109,5 +111,39 @@ function ajax_draftdel(){ @unlink($cname); } +/** + * Return subnamespaces for the Mediamanager + */ +function ajax_medians(){ + global $conf; + require_once(DOKU_INC.'inc/search.php'); + require_once(DOKU_INC.'inc/media.php'); + + // wanted namespace + $ns = cleanID($_POST['ns']); + $dir = utf8_encodeFN(str_replace(':','/',$ns)); + + $lvl = count(explode(':',$ns)); + + $data = array(); + search($data,$conf['mediadir'],'search_index',array(),$dir); + foreach($data as $item){ + $item['level'] = $lvl+1; + echo media_nstree_li($item); + echo media_nstree_item($item); + echo ''; + } +} + +/** + * Return subnamespaces for the Mediamanager + */ +function ajax_medialist(){ + global $conf; + require_once(DOKU_INC.'inc/media.php'); + + media_filelist($_POST['ns']); +} + //Setup VIM: ex: et ts=2 enc=utf-8 : ?> diff --git a/lib/exe/js.php b/lib/exe/js.php index 05effd31a..583faa5ad 100644 --- a/lib/exe/js.php +++ b/lib/exe/js.php @@ -12,6 +12,7 @@ if(!defined('NL')) define('NL',"\n"); require_once(DOKU_INC.'inc/init.php'); require_once(DOKU_INC.'inc/pageutils.php'); require_once(DOKU_INC.'inc/io.php'); +require_once(DOKU_INC.'inc/JSON.php'); // Main (don't run when UNIT test) if(!defined('SIMPLE_TEST')){ @@ -39,17 +40,21 @@ function js_out(){ // Array of needed files $files = array( DOKU_INC.'lib/scripts/events.js', + DOKU_INC.'lib/scripts/cookie.js', DOKU_INC.'lib/scripts/script.js', DOKU_INC.'lib/scripts/tw-sack.js', DOKU_INC.'lib/scripts/ajax.js', DOKU_INC.'lib/scripts/domLib.js', DOKU_INC.'lib/scripts/domTT.js', ); - if($edit && $write){ - $files[] = DOKU_INC.'lib/scripts/edit.js'; - if($conf['spellchecker']){ - $files[] = DOKU_INC.'lib/scripts/spellcheck.js'; + if($edit){ + if($write){ + $files[] = DOKU_INC.'lib/scripts/edit.js'; + if($conf['spellchecker']){ + $files[] = DOKU_INC.'lib/scripts/spellcheck.js'; + } } + $files[] = DOKU_INC.'lib/scripts/media.js'; } $files[] = DOKU_TPLINC.'script.js'; @@ -70,11 +75,17 @@ function js_out(){ // start output buffering and build the script ob_start(); - // add some translation strings and global variables + // add some global variables + print "var DOKU_BASE = '".DOKU_BASE."';"; + + //FIXME: move thes into LANG print "var alertText = '".js_escape($lang['qb_alert'])."';"; print "var notSavedYet = '".js_escape($lang['notsavedyet'])."';"; print "var reallyDel = '".js_escape($lang['del_confirm'])."';"; - print "var DOKU_BASE = '".DOKU_BASE."';"; + + // load JS specific translations + $json = new JSON(); + echo 'LANG = '.$json->encode($lang['js']).";\n"; // load files foreach($files as $file){ diff --git a/lib/exe/media.php b/lib/exe/media.php deleted file mode 100644 index cc78d6b72..000000000 --- a/lib/exe/media.php +++ /dev/null @@ -1,183 +0,0 @@ -= AUTH_UPLOAD){ - $UPLOADOK = true; - //create the given namespace (just for beautification) - $mdir = $conf['mediadir'].'/'.utf8_encodeFN(str_replace(':','/',$NS)); - io_makeFileDir("$mdir/xxx"); - }else{ - $UPLOADOK = false; - } - - //handle deletion - $mediareferences = array(); - if($DEL && $AUTH >= AUTH_DELETE){ - if($conf['refcheck']){ - search($mediareferences,$conf['datadir'],'search_reference',array('query' => $DEL)); - } - if(!count($mediareferences)){ - media_delete($DEL); - }elseif(!$conf['refshow']){ - msg(str_replace('%s',noNS($DEL),$lang['mediainuse']),0); - } - } - - //handle metadatasaving - if($UPLOADOK && $SRC && $_REQUEST['save']){ - media_metasave($SRC,$_REQUEST['meta']); - } - - //handle upload - if($_FILES['upload']['tmp_name'] && $UPLOADOK){ - media_upload($NS,$AUTH); - } - - //start output and load template - header('Content-Type: text/html; charset=utf-8'); - if($conf['refshow'] && count($mediareferences)){ - include(template('mediaref.php')); - }elseif($IMG){ - include(template('mediaedit.php')); - }else{ - include(template('media.php')); - } - -/**********************************************/ - -/** - * Deletes mediafiles - Auth is not handled here! - * - * @author Andreas Gohr - */ -function media_delete($delid){ - global $lang; - - $file = mediaFN($delid); - if(@unlink($file)){ - msg(str_replace('%s',noNS($delid),$lang['deletesucc']),1); - io_sweepNS($delid,'mediadir'); - return true; - } - //something went wrong - msg(str_replace('%s',$file,$lang['deletefail']),-1); - return false; -} - -/** - * Handles Mediafile uploads - * - * @author Andreas Gohr - */ -function media_upload($NS,$AUTH){ - require_once(DOKU_INC.'inc/confutils.php'); - global $lang; - global $conf; - - // get file - $id = $_POST['id']; - $file = $_FILES['upload']; - // get id - if(empty($id)) $id = $file['name']; - $id = cleanID($NS.':'.$id); - // get filename - $fn = mediaFN($id); - - // get filetype regexp - $types = array_keys(getMimeTypes()); - $types = array_map(create_function('$q','return preg_quote($q,"/");'),$types); - $regex = join('|',$types); - - // because a temp file was created already - if(preg_match('/\.('.$regex.')$/i',$fn)){ - //check for overwrite - if(@file_exists($fn) && (!$_POST['ow'] || $AUTH < AUTH_DELETE)){ - msg($lang['uploadexist'],0); - return false; - } - // prepare directory - io_makeFileDir($fn); - if(move_uploaded_file($file['tmp_name'], $fn)) { - // set the correct permission here - if($conf['fperm']) chmod($fn, $conf['fperm']); - msg($lang['uploadsucc'],1); - return true; - }else{ - msg($lang['uploadfail'],-1); - } - }else{ - msg($lang['uploadwrong'],-1); - } - return false; -} - -/** - * Userfunction for html_buildlist - * - * Prints available media namespaces - * - * @author Andreas Gohr - */ -function media_html_list_namespaces($item){ - $ret = ''; - $ret .= ''; - $pos = strrpos($item['id'], ':'); - $ret .= substr($item['id'], $pos > 0 ? $pos + 1 : 0); - $ret .= ''; - return $ret; -} - -/** - * Saves image meta data - * - * @author Andreas Gohr - */ -function media_metasave($src,$data){ - global $lang; - - $meta = new JpegMeta($src); - $meta->_parseAll(); - - foreach($data as $key => $val){ - $val=trim($val); - if(empty($val)){ - $meta->deleteField($key); - }else{ - $meta->setField($key,$val); - } - } - - if($meta->save()){ - msg($lang['metasaveok'],1); - }else{ - msg($lang['metasaveerr'],-1); - } -} - -?> diff --git a/lib/exe/mediamanager.php b/lib/exe/mediamanager.php new file mode 100644 index 000000000..8b645e434 --- /dev/null +++ b/lib/exe/mediamanager.php @@ -0,0 +1,53 @@ += AUTH_UPLOAD) io_makeFileDir(mediaFN("$NS:xxx")); + + // handle upload + if($_FILES['upload']['tmp_name']){ + $JUMPTO = media_upload($NS,$AUTH); + } + + // handle meta saving + if($IMG && $_REQUEST['do']['save']){ + $JUMPTO = media_metasave($IMG,$AUTH,$_REQUEST['meta']); + } + + // handle deletion + if($DEL) { + $INUSE = media_delete($DEL,$AUTH); + } + + // finished - start output + header('Content-Type: text/html; charset=utf-8'); + include(template('mediamanager.php')); diff --git a/lib/images/fileicons/gif.png b/lib/images/fileicons/gif.png new file mode 100644 index 000000000..3c32f3016 Binary files /dev/null and b/lib/images/fileicons/gif.png differ diff --git a/lib/images/fileicons/jpeg.png b/lib/images/fileicons/jpeg.png new file mode 100644 index 000000000..3c32f3016 Binary files /dev/null and b/lib/images/fileicons/jpeg.png differ diff --git a/lib/images/fileicons/jpg.png b/lib/images/fileicons/jpg.png new file mode 100644 index 000000000..3c32f3016 Binary files /dev/null and b/lib/images/fileicons/jpg.png differ diff --git a/lib/images/fileicons/png.png b/lib/images/fileicons/png.png new file mode 100644 index 000000000..3c32f3016 Binary files /dev/null and b/lib/images/fileicons/png.png differ diff --git a/lib/images/fileicons/swf.png b/lib/images/fileicons/swf.png new file mode 100644 index 000000000..03bc8ab48 Binary files /dev/null and b/lib/images/fileicons/swf.png differ diff --git a/lib/images/fileicons/tar.png b/lib/images/fileicons/tar.png new file mode 100644 index 000000000..dfa8b586e Binary files /dev/null and b/lib/images/fileicons/tar.png differ diff --git a/lib/images/fileicons/txt.png b/lib/images/fileicons/txt.png index 2bd690434..758950fd2 100644 Binary files a/lib/images/fileicons/txt.png and b/lib/images/fileicons/txt.png differ diff --git a/lib/scripts/cookie.js b/lib/scripts/cookie.js new file mode 100644 index 000000000..c236eeb79 --- /dev/null +++ b/lib/scripts/cookie.js @@ -0,0 +1,111 @@ +/** + * Handles the cookie used by several JavaScript functions + * + * Only a single cookie is written and read. You may only save + * sime name-value pairs - no complex types! + * + * You should only use the getValue and setValue methods + * + * @author Andreas Gohr + */ +DokuCookie = { + data: Array(), + name: 'DOKU_PREFS', + + /** + * Save a value to the cookie + * + * @author Andreas Gohr + */ + setValue: function(key,val){ + DokuCookie.init(); + DokuCookie.data[key] = val; + + // prepare expire date + var now = new Date(); + DokuCookie.fixDate(now); + now.setTime(now.getTime() + 365 * 24 * 60 * 60 * 1000); //expire in a year + + //save the whole data array + var text = ''; + for(var key in DokuCookie.data){ + text += '#'+escape(key)+'#'+DokuCookie.data[key]; + } + DokuCookie.setCookie(DokuCookie.name,text.substr(1),now,DOKU_BASE); + }, + + /** + * Get a Value from the Cookie + * + * @author Andreas Gohr + */ + getValue: function(key){ + DokuCookie.init(); + return DokuCookie.data[key]; + }, + + /** + * Loads the current set cookie + * + * @author Andreas Gohr + */ + init: function(){ + if(DokuCookie.data.length) return; + var text = DokuCookie.getCookie(DokuCookie.name); + if(text){ + var parts = text.split('#'); + for(var i=0; i 0){ + date.setTime(date.getTime() - skew); + } + } +}; diff --git a/lib/scripts/edit.js b/lib/scripts/edit.js index a8cf33594..48464017e 100644 --- a/lib/scripts/edit.js +++ b/lib/scripts/edit.js @@ -125,8 +125,9 @@ function showPicker(pickerid,btn){ * @author Andreas Gohr */ function initToolbar(tbid,edid,tb){ - if(!document.getElementById){ return; } - var toolbar = document.getElementById(tbid); + var toolbar = $(tbid); + if(!toolbar) return; + var cnt = tb.length; for(var i=0; i + */ +media = { + keepopen: false, + + /** + * Attach event handlers to all "folders" below the given element + * + * @author Andreas Gohr + */ + treeattach: function(obj){ + if(!obj) return; + + var items = obj.getElementsByTagName('li'); + for(var i=0; i + */ + selectorattach: function(obj){ + if(!obj) return; + + var items = getElementsByClass('select',obj,'a'); + for(var i=0; i + */ + attachkeepopen: function(obj){ + if(!obj) return; + + var cbox = document.createElement('input'); + cbox.type = 'checkbox'; + cbox.id = 'media__keepopen'; + if(DokuCookie.getValue('keepopen')){ + cbox.checked = true; + } + addEvent(cbox,'change',function(event){ return media.togglekeepopen(event,this); }); + + var clbl = document.createElement('label'); + clbl.htmlFor = 'media__keepopen'; + clbl.innerHTML = LANG['keepopen']; + + obj.appendChild(cbox); + obj.appendChild(clbl); + }, + + /** + * Toggles the keep open state + * + * @author Andreas Gohr + */ + togglekeepopen: function(event,cb){ + if(cb.checked){ + DokuCookie.setValue('keepopen',1); + media.keepopen = true; + }else{ + DokuCookie.setValue('keepopen',''); + media.keepopen = false; + } + }, + + /** + * Insert the clicked image into the opener's textarea + * + * @author Andreas Gohr + */ + select: function(event,link){ + var id = link.name.substr(2); + + if(!opener){ + alert(LANG['idtouse']+"\n:"+id); + return false; + } + opener.insertTags('wiki__text','{{'+id+'|','}}',''); + + if(!media.keepopen) window.close(); + return false; + }, + + /** + * list the content of a namespace using AJAX + * + * @author Andreas Gohr + */ + list: function(event,link){ + // prepare an AJAX call to fetch the subtree + var ajax = new sack(DOKU_BASE + 'lib/exe/ajax.php'); + ajax.AjaxFailedAlert = ''; + ajax.encodeURIString = false; + if(ajax.failed) return true; + + cleanMsgArea(); + + var content = $('media__content'); + content.innerHTML = '...'; + + ajax.elementObj = content; + ajax.afterCompletion = function(){ media.selectorattach(content); }; + ajax.runAJAX(link.search.substr(1)+'&call=medialist'); + return false; + }, + + + /** + * Open or close a subtree using AJAX + * + * @author Andreas Gohr + */ + toggle: function(event,clicky){ + var listitem = clicky.parentNode; + + // if already open, close by removing the sublist + var sublists = listitem.getElementsByTagName('ul'); + if(sublists.length){ + listitem.removeChild(sublists[0]); + clicky.src = DOKU_BASE+'lib/images/plus.gif'; + return false; + } + + // get the enclosed link (is always the first one) + var link = listitem.getElementsByTagName('a')[0]; + + // prepare an AJAX call to fetch the subtree + var ajax = new sack(DOKU_BASE + 'lib/exe/ajax.php'); + ajax.AjaxFailedAlert = ''; + ajax.encodeURIString = false; + if(ajax.failed) return true; + + //prepare the new ul + var ul = document.createElement('ul'); + //fixme add classname here + listitem.appendChild(ul); + ajax.elementObj = ul; + ajax.afterCompletion = function(){ media.treeattach(ul); }; + ajax.runAJAX(link.search.substr(1)+'&call=medians'); + clicky.src = DOKU_BASE+'lib/images/minus.gif'; + return false; + }, + + /** + * Prefills the wikiname. + * + * @author Andreas Gohr + */ + suggest: function(){ + var file = $('upload__file'); + var name = $('upload__name'); + if(!file || !name) return; + + var text = file.value; + text = text.substr(text.lastIndexOf('/')+1); + text = text.substr(text.lastIndexOf('\\')+1); + name.value = text; + } + +} + +addInitEvent(function(){media.treeattach($('media__tree'));}); +addInitEvent(function(){media.selectorattach($('media__content'));}); +addInitEvent(function(){media.attachkeepopen($('media__opts'));}); diff --git a/lib/scripts/script.js b/lib/scripts/script.js index bd7af48da..df12a29fb 100644 --- a/lib/scripts/script.js +++ b/lib/scripts/script.js @@ -77,6 +77,30 @@ function isset(varname){ return(typeof(window[varname])!='undefined'); } +/** + * Select elements by their class name + * + * @author Dustin Diaz + * @link http://www.dustindiaz.com/getelementsbyclass/ + */ +function getElementsByClass(searchClass,node,tag) { + var classElements = new Array(); + if ( node == null ) + node = document; + if ( tag == null ) + tag = '*'; + var els = node.getElementsByTagName(tag); + var elsLen = els.length; + var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)"); + for (i = 0, j = 0; i < elsLen; i++) { + if ( pattern.test(els[i].className) ) { + classElements[j] = els[i]; + j++; + } + } + return classElements; +} + /** * Get the X offset of the top left corner of the given object * @@ -186,31 +210,6 @@ function hideLoadBar(id){ if(obj) obj.style.display="none"; } -/* - * Insert the selected filename and close the window - * - * @see http://www.alexking.org/index.php?content=software/javascript/content.php - */ -function mediaSelect(file){ - opener.insertTags('wiki__text','{{'+file+'|','}}',''); - window.close(); -} - -/** - * For the upload Dialog. Prefills the wikiname. - */ -function suggestWikiname(){ - var form = $('dw__upload'); - if(!form) return; - - var file = form.elements.upload.value; - - file = file.substr(file.lastIndexOf('/')+1); - file = file.substr(file.lastIndexOf('\\')+1); - - form.elements.id.value = file; -} - /** * Adds the toggle switch to the TOC */ @@ -254,55 +253,6 @@ function toggleToc() { } } -/* - * This sets a cookie by JavaScript - * - * @see http://www.webreference.com/js/column8/functions.html - */ -function setCookie(name, value, expires, path, domain, secure) { - var curCookie = name + "=" + escape(value) + - ((expires) ? "; expires=" + expires.toGMTString() : "") + - ((path) ? "; path=" + path : "") + - ((domain) ? "; domain=" + domain : "") + - ((secure) ? "; secure" : ""); - document.cookie = curCookie; -} - -/* - * This reads a cookie by JavaScript - * - * @see http://www.webreference.com/js/column8/functions.html - */ -function getCookie(name) { - var dc = document.cookie; - var prefix = name + "="; - var begin = dc.indexOf("; " + prefix); - if (begin == -1) { - begin = dc.indexOf(prefix); - if (begin !== 0){ return null; } - } else { - begin += 2; - } - var end = document.cookie.indexOf(";", begin); - if (end == -1){ - end = dc.length; - } - return unescape(dc.substring(begin + prefix.length, end)); -} - -/* - * This is needed for the cookie functions - * - * @see http://www.webreference.com/js/column8/functions.html - */ -function fixDate(date) { - var base = new Date(0); - var skew = base.getTime(); - if (skew > 0){ - date.setTime(date.getTime() - skew); - } -} - /* * This enables/disables checkboxes for acl-administration * @@ -374,24 +324,25 @@ function fnt(id, e, evt) { * Add the edit window size controls */ function initSizeCtl(ctlid,edid){ - if(!document.getElementById){ return; } + if(!document.getElementById){ return; } var ctl = $(ctlid); var textarea = $(edid); + if(!ctl || !textarea) return; - var hgt = getCookie('DokuWikisizeCtl'); - if(hgt === null || hgt === ''){ - textarea.style.height = '300px'; - }else{ + var hgt = DokuCookie.getValue('sizeCtl'); + if(hgt){ textarea.style.height = hgt; + }else{ + textarea.style.height = '300px'; } var l = document.createElement('img'); var s = document.createElement('img'); l.src = DOKU_BASE+'lib/images/larger.gif'; s.src = DOKU_BASE+'lib/images/smaller.gif'; - addEvent(l,'click',function(){sizeCtl(edid,100);}); - addEvent(s,'click',function(){sizeCtl(edid,-100);}); + addEvent(l,'click',function(){sizeCtl(edid,100);}); + addEvent(s,'click',function(){sizeCtl(edid,-100);}); ctl.appendChild(l); ctl.appendChild(s); } @@ -405,10 +356,7 @@ function sizeCtl(edid,val){ height += val; textarea.style.height = height+'px'; - var now = new Date(); - fixDate(now); - now.setTime(now.getTime() + 365 * 24 * 60 * 60 * 1000); //expire in a year - setCookie('DokuWikisizeCtl',textarea.style.height,now); + DokuCookie.setValue('sizeCtl',textarea.style.height); } /** @@ -432,3 +380,15 @@ function scrollToMarker(){ var obj = $('scroll__here'); if(obj) obj.scrollIntoView(); } + +/** + * Remove messages + */ +function cleanMsgArea(){ + var elems = getElementsByClass('(success|info|error)',document,'div'); + if(elems){ + for(var i=0; i - - */ -?> - - - - <?php echo hsc($lang['mediaselect'])?> [<?php echo hsc($conf['title'])?>] - - - - - - - - -
- - -

- -
- -
- - - -
- -
- - -
- -
-
- -
- -
- - - diff --git a/lib/tpl/default/mediaedit.php b/lib/tpl/default/mediaedit.php deleted file mode 100644 index 79175e009..000000000 --- a/lib/tpl/default/mediaedit.php +++ /dev/null @@ -1,87 +0,0 @@ - - - */ -?> - - - - <?php echo hsc($lang['mediaselect'])?> [<?php echo hsc($conf['title'])?>] - - - - - - - -
- - -

- -
- - -
-
- - - - -
- - -
- - -
- - -
- - - -
- - - - -
-
- - - -
- -
- - diff --git a/lib/tpl/default/mediamanager.php b/lib/tpl/default/mediamanager.php new file mode 100644 index 000000000..10b31ba63 --- /dev/null +++ b/lib/tpl/default/mediamanager.php @@ -0,0 +1,41 @@ + + + */ +?> + + + + <?php echo hsc($lang['mediaselect'])?> [<?php echo hsc($conf['title'])?>] + + + + + +
+ +
+

+ + + + +
+
+ +
+ +
+
+ + diff --git a/lib/tpl/default/mediaref.php b/lib/tpl/default/mediaref.php deleted file mode 100644 index 06af5764c..000000000 --- a/lib/tpl/default/mediaref.php +++ /dev/null @@ -1,50 +0,0 @@ - - - */ -?> - - - - <?php echo hsc($lang['mediaselect'])?> [<?php echo hsc($conf['title'])?>] - - - - - - - - -
- - -

- -
-
-

-
- - - - -
- -
- - - diff --git a/lib/tpl/default/style.ini b/lib/tpl/default/style.ini index e6452ad90..bb4cd2305 100644 --- a/lib/tpl/default/style.ini +++ b/lib/tpl/default/style.ini @@ -9,6 +9,9 @@ layout.css = screen design.css = screen style.css = screen + +media.css = screen + rtl.css = rtl print.css = print -- cgit v1.2.3