Dateiverwaltung für die WebBox
ulrich
2017-03-19 72e43ddf5a01b28d57a41bdbd4b77a0519d92912
web/ui/ui.js
@@ -31,6 +31,10 @@
var loc;
var PERS_DIR = "Persoenlich";
var PUB_DIR = "Oeffentlich";
var BASE_DIR = "$basis";
var DATA_DIR = "$daten";
var WWW_DIR = "www";
var compilerIssues;
function fm_init() {
  $("#mce-editor").hide();
@@ -57,6 +61,8 @@
  $('#m-paste').on('click', fm_menu_paste);
  $('#m-shrink').on('click', fm_menu_shrink);
  $('#m-test').on('click', fm_menu_test);
  $('#m-test-2').on('click', fm_menu_compile);
  $('#m-test-3').on('click', fm_menu_compile_all);
  $('#saveModal').on('hidden.bs.modal', function (e) {
    $('#modal_ok').attr('onclick','').unbind('click');
  });
@@ -92,12 +98,19 @@
    restdir = pfad.substr(PUB_DIR.length);
  } else if(pfad.indexOf(PERS_DIR) > -1) {
    restdir = pfad.substr(PERS_DIR.length);
  } else if(pfad.indexOf(BASE_DIR) > -1) {
    restdir = pfad.substr(BASE_DIR.length);
  } else if(pfad.indexOf(DATA_DIR) > -1) {
    restdir = pfad.substr(DATA_DIR.length);
  }
  if(restdir !== undefined && restdir.startsWith('/')) {
    restdir = restdir.substr(1);
    if(restdir.indexOf(WWW_DIR) > -1) {
      restdir = restdir.replace(WWW_DIR, 'data');
    }
  }
  var pdir = fm_get_base(uid);
  //console.log('path: ' + pdir + "/" + restdir);
  // console.log('fm_get_path path: ' + pdir + "/" + restdir);
  if(restdir.length > 1) {
    return pdir + "/" + restdir;
  } else {
@@ -109,18 +122,22 @@
  //console.log('pfad: ' + pfad);
  var pdir;
  if(pfad.indexOf(PUB_DIR) > -1) {
    pdir = '/data/';
    pdir = '/data/' + uid;
  } else if(pfad.indexOf(PERS_DIR) > -1) {
    pdir = '/home/';
    pdir = '/home/' + uid;
  } else if(pfad.indexOf(BASE_DIR) > -1) {
    pdir = '';
  } else if(pfad.indexOf(DATA_DIR) > -1) {
    pdir = '';
  }
  //console.log('base: ' + pdir + uid);
  return pdir + uid;
  //console.log('fm_get_base base: ' + pdir + uid);
  return pdir;
}
function fm_dok_editor_init(uid) {
  var base = fm_get_path(uid);
  edCount = 0;
  //console.log("calling tinymce.init with base: " + base + "/");
  //console.log("fm_dok_editor_init calling tinymce.init with base: " + base + "/");
  
  /*
   * vgl.
@@ -156,6 +173,8 @@
    importcss_append: true,
    width: "100%",
    height: '100%',
    relative_urls : true,
    convert_urls : false,
    document_base_url : base + "/",
    setup: function (editor) {
      ed = editor;
@@ -274,6 +293,75 @@
    $('.ost').empty();
    $('.ost').width(0);
  }
}
function fm_menu_compile() {
  fm_compile('0', fm_mark_compile_results_in_editor);
}
function fm_menu_compile_all() {
  fm_compile_all();
}
function fm_mark_compile_results_in_editor(resp) {
  cm.clearGutter("breakpoints");
  if(resp.List[0].CompilerIssue !== undefined) {
    var lno;
    var eMsg;
    if(resp.List[0].CompilerIssue instanceof Array) {
      var issueNo = 0;
      while(issueNo < resp.List[0].CompilerIssue.length) {
        // console.log(resp.List[0].CompilerIssue[issueNo].kind);
        // console.log(resp.List[0].CompilerIssue[issueNo].lineNumber);
        // console.log(resp.List[0].CompilerIssue[issueNo].sourceName);
        // console.log(resp.List[0].CompilerIssue[issueNo].message);
        lno = resp.List[0].CompilerIssue[issueNo].lineNumber;
        eMsg = resp.List[0].CompilerIssue[issueNo].kind + ' ' + resp.List[0].CompilerIssue[issueNo].message;
        cm.setGutterMarker(lno-1, "breakpoints", makeMarker(eMsg));
        issueNo++;
      }
    } else {
      lno = resp.List[0].CompilerIssue.lineNumber;
      eMsg = resp.List[0].CompilerIssue.kind + ' ' + resp.List[0].CompilerIssue.message;
      cm.setGutterMarker(lno-1, "breakpoints", makeMarker(eMsg));
    }
  }
}
function fm_compile_all() {
  var m = '?c=de.uhilger.filecms.api.CompileService&m=compileAll&p=' + pfad;
  var u = '../svc' + m;
  fm_get(u, "json", function(resp) {
    if(resp.List[0].CompilerIssue !== undefined) {
      var lno;
      var eMsg;
      if(resp.List[0].CompilerIssue instanceof Array) {
        var issueNo = 0;
        while(issueNo < resp.List[0].CompilerIssue.length) {
          console.log('   +++ ---- +++   ');
          console.log(resp.List[0].CompilerIssue[issueNo].kind);
          console.log(resp.List[0].CompilerIssue[issueNo].lineNumber);
          console.log(resp.List[0].CompilerIssue[issueNo].sourceName);
          console.log(resp.List[0].CompilerIssue[issueNo].message);
          issueNo++;
        }
      } else {
        lno = resp.List[0].CompilerIssue.lineNumber;
        eMsg = resp.List[0].CompilerIssue.kind + ' ' + resp.List[0].CompilerIssue.message;
        console.log(lno + ' ' + eMsg);
      }
    }
  });
}
function fm_compile(modeStr, callback) {
  var liste = fm_gewaehlte_dateien();
  var m = '?c=de.uhilger.filecms.api.CompileService&m=compile&p=' + pfad + '&p=' + encodeURIComponent(liste) +
          '&p=' + modeStr;
  var u = '../svc' + m;
  fm_get(u, "json", function(resp) {
    callback(resp);
  });
}
function fm_ansicht_umschalten() {
@@ -540,7 +628,7 @@
  $('#modal_ok').click(function() {
    // hier umbenennen
    fm_rename_file(fname, pfad, $('#dateiname').val())
    fm_rename_file(fname, pfad, $('#dateiname').val());
  });
  $('#saveModalTitle').text('Datei umbenennen');
  $('#dialogfrage').text("Neuer Dateiname?");  
@@ -825,21 +913,39 @@
/* ---- codemirror editor handling -------- */
/*
function htmlDecode(value){ 
  return $('<div/>').html(value).text(); 
}
*/
function fm_code_edit(content, m) {
  cm = CodeMirror.fromTextArea(document.getElementById("editspace"), {
    lineNumbers: true,
    gutters: ["CodeMirror-linenumbers", "breakpoints"],
    mode: m,
    viewportMargin : Infinity,
    tabSize: 2,
    extraKeys: {
        "F9": function(cm) {
        cm.setOption("fullScreen", !cm.getOption("fullScreen"));
      },
        "Esc": function(cm) {
        if (cm.getOption("fullScreen")) cm.setOption("fullScreen", false);
      },
        ".": function(cm) {
        console.log('dot pressed: perhaps look up class or method name');
        /*
         * Hier kann man eine Funktion ausloesen, die fuer das
         * Wort vor dem Punkt (Name der Klasse) eine Liste mit
         * Vorschlaegen fuer Methodennamen einblendet.
         */
        /*
         * CodeMirror.Pass laesst das Zeichen zum Editorinhalt durch,
         * verhindert aber das Ausloesen von 'keyHandled'
         */
        return CodeMirror.Pass;
      }
    }
  });
@@ -847,9 +953,32 @@
  //cm.setValue(content);
  cm.setValue(unescapeHtml(content));
  cm.getDoc().markClean();
  cm.on("gutterClick", function(theEditor, lineNumber) {
    var info = theEditor.lineInfo(lineNumber);
    //--lineNumber;
    //console.log(info.gutterMarkers.breakpoints.message);
    //var marker = info.gutterMarkers.breakpoints;
    //$(marker).tooltip('toggle');
  });
  /*
  cm.on("keyHandled", function(theEditor, keyName, event){
    console.log('cm.keyHandled keyName: ' + keyName + ', event.type: ' + event.type);
  });
  */
}
function makeMarker(msg) {
  var marker = document.createElement("div");
  marker.style.color = "#822";
  marker.innerHTML = "●";
  //marker.message = msg;
  $(marker).tooltip({
    placement: 'right',
    title: msg,
    offset: '0 -30'
  });
  return marker;
}
/* -------- helper functions ----------- */