aboutsummaryrefslogtreecommitdiff
path: root/mod/dokuwiki/vendors/dokuwiki/lib/scripts/media.js
diff options
context:
space:
mode:
Diffstat (limited to 'mod/dokuwiki/vendors/dokuwiki/lib/scripts/media.js')
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/media.js351
1 files changed, 351 insertions, 0 deletions
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/scripts/media.js b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/media.js
new file mode 100644
index 000000000..598fb61f4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/media.js
@@ -0,0 +1,351 @@
+/**
+ * JavaScript functionalitiy for the media management popup
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+var media_manager = {
+ keepopen: false,
+ hide: false,
+
+ /**
+ * Attach event handlers to all "folders" below the given element
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ treeattach: function(obj){
+ if(!obj) return;
+ var items = obj.getElementsByTagName('li');
+ for(var i=0; i<items.length; i++){
+ var elem = items[i];
+
+ // attach action to make the +/- clickable
+ var clicky = elem.getElementsByTagName('img')[0];
+ clicky.style.cursor = 'pointer';
+ addEvent(clicky,'click',function(event){ return media_manager.toggle(event,this); });
+
+ // attach action load folder list via AJAX
+ var link = elem.getElementsByTagName('a')[0];
+ link.style.cursor = 'pointer';
+ addEvent(link,'click',function(event){ return media_manager.list(event,this); });
+ }
+ },
+
+ /**
+ * Attach the image selector action to all links below the given element
+ * also add the action to autofill the "upload as" field
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ selectorattach: function(obj){
+ if(!obj) return;
+
+ var items = getElementsByClass('select',obj,'a');
+ for(var i=0; i<items.length; i++){
+ var elem = items[i];
+ elem.style.cursor = 'pointer';
+ addEvent(elem,'click',function(event){ return media_manager.select(event,this); });
+ }
+
+ // hide syntax example
+ items = getElementsByClass('example',obj,'div');
+ for(var i=0; i<items.length; i++){
+ elem = items[i];
+ elem.style.display = 'none';
+ }
+
+ var file = DOKUid('upload__file');
+ if(!file) return;
+ addEvent(file,'change',media_manager.suggest);
+ },
+
+ /**
+ * Attach deletion confirmation dialog to the delete buttons.
+ *
+ * Michael Klier <chi@chimeric.de>
+ */
+ confirmattach: function(obj){
+ if(!obj) return;
+
+ items = getElementsByClass('btn_media_delete',obj,'a');
+ for(var i=0; i<items.length; i++){
+ var elem = items[i];
+ addEvent(elem,'click',function(e){
+ if(e.target.tagName == 'IMG'){
+ var name = e.target.parentNode.title;
+ }else{
+ var name = e.target.title;
+ }
+ if(!confirm(LANG['del_confirm'] + "\n" + name)) {
+ e.preventDefault();
+ return false;
+ } else {
+ return true;
+ }
+ });
+ }
+ },
+
+ /**
+ * Creates checkboxes for additional options
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ attachoptions: function(obj){
+ if(!obj) return;
+
+ // keep open
+ if(opener){
+ var kobox = document.createElement('input');
+ kobox.type = 'checkbox';
+ kobox.id = 'media__keepopen';
+ if(DokuCookie.getValue('keepopen')){
+ kobox.checked = true;
+ kobox.defaultChecked = true; //IE wants this
+ media_manager.keepopen = true;
+ }
+ addEvent(kobox,'click',function(event){ return media_manager.togglekeepopen(event,this); });
+
+ var kolbl = document.createElement('label');
+ kolbl.htmlFor = 'media__keepopen';
+ kolbl.innerHTML = LANG['keepopen'];
+
+ var kobr = document.createElement('br');
+
+ obj.appendChild(kobox);
+ obj.appendChild(kolbl);
+ obj.appendChild(kobr);
+ }
+
+ // hide details
+ var hdbox = document.createElement('input');
+ hdbox.type = 'checkbox';
+ hdbox.id = 'media__hide';
+ if(DokuCookie.getValue('hide')){
+ hdbox.checked = true;
+ hdbox.defaultChecked = true; //IE wants this
+ media_manager.hide = true;
+ }
+ addEvent(hdbox,'click',function(event){ return media_manager.togglehide(event,this); });
+
+ var hdlbl = document.createElement('label');
+ hdlbl.htmlFor = 'media__hide';
+ hdlbl.innerHTML = LANG['hidedetails'];
+
+ var hdbr = document.createElement('br');
+
+ obj.appendChild(hdbox);
+ obj.appendChild(hdlbl);
+ obj.appendChild(hdbr);
+ media_manager.updatehide();
+ },
+
+ /**
+ * Opens the searchfield
+ *
+ * @author Tobias Sarnowski <sarnowski@cosmocode.de>
+ */
+ showsearchfield: function(event,link){
+ // prepare an AJAX call to fetch the search
+ var ajax = new sack(DOKU_BASE + 'lib/exe/ajax.php');
+ ajax.AjaxFailedAlert = '';
+ ajax.encodeURIString = false;
+ if(ajax.failed) return true;
+
+ cleanMsgArea();
+
+ var content = DOKUid('media__content');
+ content.innerHTML = '<img src="'+DOKU_MEDIA+'lib/images/loading.gif" alt="..." class="load" />';
+
+ ajax.elementObj = content;
+ ajax.afterCompletion = function(){
+ media_manager.selectorattach(content);
+ media_manager.confirmattach(content);
+ media_manager.updatehide();
+ };
+ ajax.runAJAX(link.search.substr(1)+'&call=mediasearchlist');
+ return false;
+ },
+
+ /**
+ * Toggles the keep open state
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ togglekeepopen: function(event,cb){
+ if(cb.checked){
+ DokuCookie.setValue('keepopen',1);
+ media_manager.keepopen = true;
+ }else{
+ DokuCookie.setValue('keepopen','');
+ media_manager.keepopen = false;
+ }
+ },
+
+ /**
+ * Toggles the hide details state
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ togglehide: function(event,cb){
+ if(cb.checked){
+ DokuCookie.setValue('hide',1);
+ media_manager.hide = true;
+ }else{
+ DokuCookie.setValue('hide','');
+ media_manager.hide = false;
+ }
+ media_manager.updatehide();
+ },
+
+ /**
+ * Sets the visibility of the image details accordingly to the
+ * chosen hide state
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ updatehide: function(){
+ var obj = DOKUid('media__content');
+ if(!obj) return;
+ var details = getElementsByClass('detail',obj,'div');
+ for(var i=0; i<details.length; i++){
+ if(media_manager.hide){
+ details[i].style.display = 'none';
+ }else{
+ details[i].style.display = '';
+ }
+ }
+ },
+
+ /**
+ * Insert the clicked image into the opener's textarea
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ select: function(event,link){
+ var id = link.name.substr(2);
+
+ if(!opener){
+ // if we don't run in popup display example
+ var ex = DOKUid('ex_'+id.replace(/:/g,'_'));
+ if(ex.style.display == ''){
+ ex.style.display = 'none';
+ }else{
+ ex.style.display = '';
+ }
+ return false;
+ }
+ opener.insertTags('wiki__text','{{'+id+'|','}}','');
+
+ if(!media_manager.keepopen) window.close();
+ opener.focus();
+ return false;
+ },
+
+ /**
+ * list the content of a namespace using AJAX
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ 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 = DOKUid('media__content');
+ content.innerHTML = '<img src="'+DOKU_MEDIA+'lib/images/loading.gif" alt="..." class="load" />';
+
+ ajax.elementObj = content;
+ ajax.afterCompletion = function(){
+ media_manager.selectorattach(content);
+ media_manager.confirmattach(content);
+ media_manager.updatehide();
+ media_manager.initFlashUpload();
+ };
+ ajax.runAJAX(link.search.substr(1)+'&call=medialist');
+ return false;
+ },
+
+
+ /**
+ * Open or close a subtree using AJAX
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ 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_MEDIA+'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_manager.treeattach(ul); };
+ ajax.runAJAX(link.search.substr(1)+'&call=medians');
+ clicky.src = DOKU_MEDIA+'lib/images/minus.gif';
+ return false;
+ },
+
+ /**
+ * Prefills the wikiname.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ suggest: function(){
+ var file = DOKUid('upload__file');
+ var name = DOKUid('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;
+ },
+
+
+ initFlashUpload: function(){
+ if(!hasFlash(8)) return;
+ var oform = DOKUid('dw__upload');
+ var oflash = DOKUid('dw__flashupload');
+ if(!oform || !oflash) return;
+
+ var clicky = document.createElement('img');
+ clicky.src = DOKU_MEDIA+'lib/images/multiupload.png';
+ clicky.title = LANG['mu_btn'];
+ clicky.alt = LANG['mu_btn'];
+ clicky.style.cursor = 'pointer';
+ clicky.onclick = function(){
+ oform.style.display = 'none';
+ oflash.style.display = '';
+ };
+ oform.appendChild(clicky);
+ }
+};
+
+addInitEvent(function(){
+ media_manager.treeattach(DOKUid('media__tree'));
+ media_manager.selectorattach(DOKUid('media__content'));
+ media_manager.confirmattach(DOKUid('media__content'));
+ media_manager.attachoptions(DOKUid('media__opts'));
+ media_manager.initFlashUpload();
+});