MediaWiki:Common.js: verschil tussen versies

Uit Dorpsbelang Den Hout
Ga naar:navigatie, zoeken
Regel 69: Regel 69:
 
                         window.location.href = window.location.origin+'/index.php/'+url;
 
                         window.location.href = window.location.origin+'/index.php/'+url;
 
           })
 
           })
 +
}
 +
 +
 +
 +
//js for file uplaod
 +
 +
var counter = 0;
 +
var dropped;
 +
 +
var fileInput = document.getElementById('widget-file-upload-files'); 
 +
 +
var settingsPreview, settingsCaption, settingsDrop, settingsFilepagetemplate, settingsFilepageparameters, settingsFilename;
 +
 +
if(fileInput){
 +
settingsPreview = fileInput.getAttribute('data-preview');
 +
settingsCaption = fileInput.getAttribute('data-caption');
 +
settingsDrop = fileInput.getAttribute('data-drop');
 +
settingsFilepagetemplate = fileInput.getAttribute('data-filepagetemplate');
 +
settingsFilepageparameters = fileInput.getAttribute('data-filepageparameters');
 +
settingsFilename = fileInput.getAttribute('data-filename');
 +
 +
fileInput.addEventListener('change', handleFileSelect, false); //is a <input type="file" id="files" name="files[]" multiple />
 +
}
 +
                                                                                     
 +
                                                                                             
 +
function createFilename(filename){
 +
  var output = settingsFilename;                                                                                         
 +
  var regex = /<(\w+)>/gm;
 +
  var m;
 +
  var name = filename.split('.')[0];
 +
  var type = filename.split('.')[1];                                                                                           
 +
 
 +
  while ((m = regex.exec(settingsFilename)) !== null) {
 +
    // This is necessary to avoid infinite loops with zero-width matches
 +
    if (m.index === regex.lastIndex) {
 +
      regex.lastIndex++;
 +
    }   
 +
    // The result can be accessed through the `m`-variable.
 +
    m.forEach((match, groupIndex) => {
 +
     
 +
      if(match == "FILENAME"){
 +
        output = output.replace('<'+match+'>', name);
 +
      }else{
 +
        var input = fileInput.closest('form').querySelector('[name="'+match+'"]');
 +
        if(input){
 +
          val = input.value;
 +
          output = output.replace('<'+match+'>', val);
 +
        }       
 +
      }
 +
      // console.log(`Found match, group ${groupIndex}: ${match}`);
 +
    });
 +
  }
 +
  return output+'.'+type;
 +
}                                                                                             
 +
 +
function createWikitext(filename, caption){
 +
  var output = settingsFilepageparameters;                                                                                         
 +
  var regex = /<(\w+)>/gm;
 +
  var m;
 +
  var name = filename.split('.')[0];
 +
  var type = filename.split('.')[1];
 +
 
 +
  while ((m = regex.exec(settingsFilepageparameters)) !== null) {
 +
    // This is necessary to avoid infinite loops with zero-width matches
 +
    if (m.index === regex.lastIndex) {
 +
      regex.lastIndex++;
 +
    }
 +
    // The result can be accessed through the `m`-variable.
 +
    m.forEach((match, groupIndex) => {
 +
     
 +
      if(match == "FILENAME"){
 +
        output = output.replace('<'+match+'>', name);
 +
      }else{
 +
        var input = fileInput.closest('form').querySelector('[name="'+match+'"]');
 +
        if(input){
 +
          val = input.value;
 +
          output = output.replace('<'+match+'>', val);
 +
        }
 +
       
 +
      }
 +
      // console.log(`Found match, group ${groupIndex}: ${match}`);
 +
    });
 +
  }
 +
  output = output.replace(/:/g,'=');
 +
  output = output.replace(/;/g,'|');
 +
  if(caption){
 +
    output = '{{'+settingsFilepagetemplate+'|'+output+'|caption='+caption+'|type='+type+'}}';
 +
  }else{
 +
    output = '{{'+settingsFilepagetemplate+'|'+output+'|type='+type+'}}';
 +
  }
 +
  return output;
 +
}                                                                                                   
 +
 +
function handleFileSelect() { 
 +
  if(settingsPreview != "false"){
 +
    createPreviews(fileInput.files);
 +
  } 
 +
  fileInput.closest('form').querySelector('[type="submit"]').addEventListener('click', uploadFiles, false) 
 +
}
 +
 +
function uploadFiles(evt){
 +
  evt.preventDefault();
 +
  if(dropped){
 +
    var files = dropped;
 +
  }else{
 +
    var files = fileInput.files;
 +
  }
 +
  var proms = [];
 +
  for(i = 0; i < files.length; ++i){
 +
    file = files[i];
 +
    var fileName = files[i].name;
 +
    var prom =  doApiCall(file, fileName);
 +
    proms.push(prom)
 +
  }
 +
  Promise.all(proms).then(function(values) {
 +
    fileInput.closest('form').submit();
 +
  });
 +
}
 +
 +
 +
function doApiCall(fileToUpload,fileName){
 +
  return new Promise(function(resolve, reject){
 +
    formdata = new FormData();
 +
    formdata.append("action", "upload");
 +
    formdata.append("filename", createFilename(fileName));
 +
    //formdata.append("filename", fileName);
 +
    formdata.append("token", mw.user.tokens.get( 'editToken' ) );
 +
    formdata.append("file", fileToUpload);
 +
    formdata.append("ignorewarnings", "true");
 +
    formdata.append("format", "json");
 +
   
 +
   
 +
    //as we now have created the data to send, we send it...
 +
    $.ajax( { //http://stackoverflow.com/questions/6974684/how-to-send-formdata-objects-with-ajax-requests-in-jquery
 +
      url: mw.util.wikiScript( 'api' ), //url to api.php
 +
      contentType:false,
 +
      processData:false,
 +
      type:'POST',
 +
      data: formdata,//the formdata object we created above
 +
      success:function(data){
 +
        resolve(data)
 +
        //  setTimeout(function(){
 +
        editFilePage(fileName);
 +
        //  },100)
 +
      },
 +
      error:function(xhr,status, error){
 +
        console.log(error)
 +
        reject(error)
 +
      }
 +
    });
 +
  });
 +
}
 +
 +
 +
function createPreviews(filesSelected){
 +
  if (filesSelected.length > 0) {
 +
   
 +
    for(i = 0; i < filesSelected.length; ++i){
 +
     
 +
      var fileToLoad = filesSelected[i];
 +
      var fname = fileToLoad.name;
 +
     
 +
      if(fname.substr( fname.length -3 ) === "pdf"){
 +
       
 +
        //add somthing here
 +
       
 +
      }else{
 +
       
 +
        var fileReader = new FileReader();
 +
       
 +
        fileReader.onload = function(fileLoadedEvent) {
 +
          var srcData = fileLoadedEvent.target.result; // <--- data: base64
 +
         
 +
          var newImage = document.createElement('img');
 +
          newImage.src = srcData;
 +
          var dt = filesSelected[counter]
 +
          counter = counter + 1;
 +
         
 +
          if(settingsCaption){
 +
           
 +
            document.getElementById("widget-file-upload-preview").innerHTML = document.getElementById("widget-file-upload-preview").innerHTML+'<div class="upload-group">'+newImage.outerHTML+'<input data="'+dt.name+'" type="text" placeholder="caption" class="form-control"  /></div>';
 +
           
 +
          }else{
 +
            document.getElementById("widget-file-upload-preview").innerHTML = document.getElementById("widget-file-upload-preview").innerHTML+'<div class="upload-group">'+newImage.outerHTML+'</div>';
 +
          }
 +
        }
 +
       
 +
        fileReader.readAsDataURL(fileToLoad);
 +
      }
 +
    }
 +
  }
 +
}
 +
 +
function editFilePage(file){
 +
 
 +
  if(settingsCaption){
 +
    var caption = document.querySelector('[data="'+file+'"]').value;
 +
    var newWikitextEdit = createWikitext(file, caption);
 +
  }else{
 +
    var newWikitextEdit = createWikitext(file);
 +
  }
 +
 
 +
  var params = {
 +
    action: 'edit',
 +
    title: 'File:'+createFilename(file),
 +
    text: newWikitextEdit,
 +
    format: 'json'
 +
  },
 +
  api = new mw.Api();
 +
 
 +
  api.postWithToken( 'csrf', params ).done( function ( data ) {
 +
    console.log( data );
 +
  } );
 +
 
 +
}
 +
 +
 +
 +
var dropArea = document.getElementById('drop-area');
 +
 +
if(dropArea){
 +
 
 +
 
 +
  ;['dragenter', 'dragover', 'dragleave', 'drop'].forEach(function(eventName){
 +
    dropArea.addEventListener(eventName, preventDefaults, false)
 +
  })
 +
 
 +
  function preventDefaults (e) {
 +
    e.preventDefault()
 +
    e.stopPropagation()
 +
  }
 +
 
 +
  ;['dragenter', 'dragover'].forEach(eventName => {
 +
    dropArea.addEventListener(eventName, highlight, false)
 +
  })
 +
 
 +
  ;['dragleave', 'drop'].forEach(eventName => {
 +
    dropArea.addEventListener(eventName, unhighlight, false)
 +
  })
 +
 
 +
  function highlight(e) {
 +
    dropArea.classList.add('highlight')
 +
  }
 +
 
 +
  function unhighlight(e) {
 +
    dropArea.classList.remove('highlight')
 +
  }
 +
 
 +
  dropArea.addEventListener('drop', handleDrop, false)
 +
 
 +
  function handleDrop(e) {
 +
    var dt = e.dataTransfer
 +
    var files = dt.files
 +
    dropped = files;
 +
   
 +
    if(settingsPreview != "false"){
 +
      createPreviews(files);
 +
    } 
 +
   
 +
    fileInput.closest('form').querySelector('[type="submit"]').addEventListener('click', uploadFiles, false)
 +
  } 
 +
 
 
}
 
}

Versie van 8 sep 2020 08:12

// JavaScript die hier wordt geplaatst heeft invloed op alle pagina's voor alle gebruikers <script> 

function removeFile(el, file){
  
  var message = confirm("Weet je zeker dat je dit bestand wilt verwijderen?")
  if(message == true){
    var params = {
    action: 'delete',
    title: file,
    format: 'json'
  },
  api = new mw.Api();

  api.postWithToken( 'csrf', params ).done( function ( data ) {
    console.log( data );
    el.closest('.upload-group').remove();
  } );
  }
}


function postBericht(el, template, mode){
  var titel = "";
  var domein = "";
  var parameters = "";
  var multiparameters = {};
  var inputs = el.closest('form').querySelectorAll('textarea, input:not([name="mwreturn"] ):not([name="mwdb"] ):not([name="mwtoken"] ):not([type="file"]):not([name="mwaction"]):not([name="exclude"])'), i;
  for(i = 0; i < inputs.length; ++i){
   if(inputs[i].name == "Titel"){titel = inputs[i].value};
   if(inputs[i].name == "Domein"){domein = inputs[i].value};
   if(inputs[i].type == "radio"){ 
       if(inputs[i].checked){ 
          parameters += '|'+inputs[i].name+'='+inputs[i].value;
       }
   }else{
    if(inputs[i].name.includes("[]")){
      if(!multiparameters[inputs[i].name.replace('[]', '')]){
         multiparameters[inputs[i].name.replace('[]', '')] = [];
      }
      multiparameters[inputs[i].name.replace('[]', '')].push(inputs[i].value);
    }else{
    parameters += '|'+inputs[i].name+'='+inputs[i].value;
  }
  }
  }
  if(mode == "domein"){
     var url = domein.replace('.','-');
  }else{
    var url = domein.replace('.','-')+'/'+titel.replace(' ', '-');
  }
  
    var multi = "";
    for(i = 0; i < Object.keys(multiparameters).length; ++i){
      multi += '|'+Object.keys(multiparameters)[i]+'='+multiparameters[Object.keys(multiparameters)[i]].toString(); 

    }
    
  var wikitext = '{{'+template+parameters+multi+'}}'
 console.log(wikitext) 
var params = {
					action: 'edit',
					title: url,
					text: wikitext,
					format: 'json'
				},
				api = new mw.Api();

			api.postWithToken( 'csrf', params ).done( function ( html ) {
                        window.location.href = window.location.origin+'/index.php/'+url;
           })
}



//js for file uplaod

var counter = 0;
var dropped;

var fileInput = document.getElementById('widget-file-upload-files');   

var settingsPreview, settingsCaption, settingsDrop, settingsFilepagetemplate, settingsFilepageparameters, settingsFilename;

if(fileInput){
 settingsPreview = fileInput.getAttribute('data-preview');
 settingsCaption = fileInput.getAttribute('data-caption');
 settingsDrop = fileInput.getAttribute('data-drop');
 settingsFilepagetemplate = fileInput.getAttribute('data-filepagetemplate');
 settingsFilepageparameters = fileInput.getAttribute('data-filepageparameters');
 settingsFilename = fileInput.getAttribute('data-filename');

 fileInput.addEventListener('change', handleFileSelect, false); //is a <input type="file" id="files" name="files[]" multiple />
}
                                                                                       
                                                                                               
function createFilename(filename){
  var output = settingsFilename;                                                                                          
  var regex = /<(\w+)>/gm;
  var m;
  var name = filename.split('.')[0];
  var type = filename.split('.')[1];                                                                                             
  
  while ((m = regex.exec(settingsFilename)) !== null) {
    // This is necessary to avoid infinite loops with zero-width matches
    if (m.index === regex.lastIndex) {
      regex.lastIndex++;
    }    
    // The result can be accessed through the `m`-variable.
    m.forEach((match, groupIndex) => {
      
      if(match == "FILENAME"){
        output = output.replace('<'+match+'>', name);
      }else{
        var input = fileInput.closest('form').querySelector('[name="'+match+'"]');
        if(input){
          val = input.value;
          output = output.replace('<'+match+'>', val);
        }        
      }
      // console.log(`Found match, group ${groupIndex}: ${match}`);
    });
  }
  return output+'.'+type;
}                                                                                              

function createWikitext(filename, caption){
  var output = settingsFilepageparameters;                                                                                          
  var regex = /<(\w+)>/gm;
  var m;
  var name = filename.split('.')[0];
  var type = filename.split('.')[1]; 
  
  while ((m = regex.exec(settingsFilepageparameters)) !== null) {
    // This is necessary to avoid infinite loops with zero-width matches
    if (m.index === regex.lastIndex) {
      regex.lastIndex++;
    } 
    // The result can be accessed through the `m`-variable.
    m.forEach((match, groupIndex) => {
      
      if(match == "FILENAME"){
        output = output.replace('<'+match+'>', name);
      }else{
        var input = fileInput.closest('form').querySelector('[name="'+match+'"]');
        if(input){
          val = input.value;
          output = output.replace('<'+match+'>', val);
        }
        
      }
      // console.log(`Found match, group ${groupIndex}: ${match}`);
    });
  }
  output = output.replace(/:/g,'=');
  output = output.replace(/;/g,'|');
  if(caption){
    output = '{{'+settingsFilepagetemplate+'|'+output+'|caption='+caption+'|type='+type+'}}';
  }else{
    output = '{{'+settingsFilepagetemplate+'|'+output+'|type='+type+'}}';
  }
  return output;
}                                                                                                    

function handleFileSelect() {  
  if(settingsPreview != "false"){
    createPreviews(fileInput.files);
  }  
  fileInput.closest('form').querySelector('[type="submit"]').addEventListener('click', uploadFiles, false)  
}

function uploadFiles(evt){
  evt.preventDefault();
  if(dropped){
    var files = dropped;
  }else{
    var files = fileInput.files;
  }
  var proms = []; 
  for(i = 0; i < files.length; ++i){
    file = files[i];
    var fileName = files[i].name;
    var prom =  doApiCall(file, fileName);
    proms.push(prom)
  }
  Promise.all(proms).then(function(values) {
    fileInput.closest('form').submit();
  });
}


function doApiCall(fileToUpload,fileName){
  return new Promise(function(resolve, reject){
    formdata = new FormData(); 
    formdata.append("action", "upload");
    formdata.append("filename", createFilename(fileName));
    //formdata.append("filename", fileName);
    formdata.append("token", mw.user.tokens.get( 'editToken' ) );
    formdata.append("file", fileToUpload);
    formdata.append("ignorewarnings", "true");
    formdata.append("format", "json");
    
    
    //as we now have created the data to send, we send it...
    $.ajax( { //http://stackoverflow.com/questions/6974684/how-to-send-formdata-objects-with-ajax-requests-in-jquery
      url: mw.util.wikiScript( 'api' ), //url to api.php 
      contentType:false,
      processData:false,
      type:'POST',
      data: formdata,//the formdata object we created above
      success:function(data){
        resolve(data)
        //  setTimeout(function(){
        editFilePage(fileName);
        //  },100)
      },
      error:function(xhr,status, error){
        console.log(error)
        reject(error)
      }
    });
  });
}


function createPreviews(filesSelected){
  if (filesSelected.length > 0) {
    
    for(i = 0; i < filesSelected.length; ++i){
      
      var fileToLoad = filesSelected[i];
      var fname = fileToLoad.name;
      
      if(fname.substr( fname.length -3 ) === "pdf"){
        
        //add somthing here
        
      }else{
        
        var fileReader = new FileReader();
        
        fileReader.onload = function(fileLoadedEvent) {
          var srcData = fileLoadedEvent.target.result; // <--- data: base64
          
          var newImage = document.createElement('img');
          newImage.src = srcData;
          var dt = filesSelected[counter]
          counter = counter + 1;
          
          if(settingsCaption){
            
            document.getElementById("widget-file-upload-preview").innerHTML = document.getElementById("widget-file-upload-preview").innerHTML+'<div class="upload-group">'+newImage.outerHTML+'<input data="'+dt.name+'" type="text" placeholder="caption" class="form-control"  /></div>';
            
          }else{
            document.getElementById("widget-file-upload-preview").innerHTML = document.getElementById("widget-file-upload-preview").innerHTML+'<div class="upload-group">'+newImage.outerHTML+'</div>';
          }
        }
        
        fileReader.readAsDataURL(fileToLoad);
      }
    }
  }
}

function editFilePage(file){
  
  if(settingsCaption){
    var caption = document.querySelector('[data="'+file+'"]').value;
    var newWikitextEdit = createWikitext(file, caption);
  }else{
    var newWikitextEdit = createWikitext(file);
  }
  
  var params = {
    action: 'edit',
    title: 'File:'+createFilename(file),
    text: newWikitextEdit,
    format: 'json'
  },
  api = new mw.Api();
  
  api.postWithToken( 'csrf', params ).done( function ( data ) {
    console.log( data );
  } );
  
}



var dropArea = document.getElementById('drop-area');

if(dropArea){
  
  
  ;['dragenter', 'dragover', 'dragleave', 'drop'].forEach(function(eventName){
    dropArea.addEventListener(eventName, preventDefaults, false)
  })
  
  function preventDefaults (e) {
    e.preventDefault()
    e.stopPropagation()
  } 
  
  ;['dragenter', 'dragover'].forEach(eventName => {
    dropArea.addEventListener(eventName, highlight, false)
  })
  
  ;['dragleave', 'drop'].forEach(eventName => {
    dropArea.addEventListener(eventName, unhighlight, false)
  })
  
  function highlight(e) {
    dropArea.classList.add('highlight')
  }
  
  function unhighlight(e) {
    dropArea.classList.remove('highlight')
  }
  
  dropArea.addEventListener('drop', handleDrop, false)
  
  function handleDrop(e) {
    var dt = e.dataTransfer
    var files = dt.files
    dropped = files;
    
    if(settingsPreview != "false"){
      createPreviews(files);
    }   
    
    fileInput.closest('form').querySelector('[type="submit"]').addEventListener('click', uploadFiles, false)
  }  
  
}