webForumDet fria alternativet

Tabb i textarea

26 svar · 820 visningar · startad av saw · sida 2 av 2

Peter SMedlem sedan dec. 20025 483 inlägg
#21

Väldigt svårt att svara på. Du råkar inte ha en liveversion för allmän beskådning?

sawMedlem sedan mars 20011 880 inlägg
#22

Nej inte än, men jag har rarat de aktuella filerna så kan du se.

Peter SMedlem sedan dec. 20025 483 inlägg
#23

Testa detta:

      if (ord == 9) {
        editor_insertHTML(objname, "  ");
	editEvent.cancelBubble = true;
	editEvent.returnValue = false;
	return;
      }

Det lustiga är att det läggs till två gånger så många mellanslag som anges; i ovanstående fall blir det alltså fyra.

sawMedlem sedan mars 20011 880 inlägg
#24

Tyvärr, ingen skillnad.

Peter SMedlem sedan dec. 20025 483 inlägg
#25

För mig fungerar det. editor_event() ser ut så här:

function editor_event(objname,runDelay) {
  var config = document.all[objname].config;
  var editor_obj  = document.all["_" +objname+  "_editor"];       // html editor object
  if (runDelay == null) { runDelay = 0; }
  var editdoc;
  var editEvent = editor_obj.contentWindow ? editor_obj.contentWindow.event : event;

  // catch keypress events
    if (editEvent && editEvent.keyCode) {
      var ord       = editEvent.keyCode;    // ascii order of key pressed
      var ctrlKey   = editEvent.ctrlKey;
      var altKey    = editEvent.altKey;
      var shiftKey  = editEvent.shiftKey;

      if (ord == 16) { return; }  // ignore shift key by itself
      if (ord == 17) { return; }  // ignore ctrl key by itself
      if (ord == 18) { return; }  // ignore alt key by itself

      if (ord == 9) {
        editor_insertHTML(objname, "  ");
	editEvent.cancelBubble = true;
	editEvent.returnValue = false;
	return;
      }

       // cancel ENTER key and insert <BR> instead
       //if (ord == 13 && editEvent.type == 'keypress') {
       //  editEvent.returnValue = false;
       //  editor_insertHTML(objname, "<br>");
       //  return;
       //}

      if (ctrlKey && (ord == 122 || ord == 90)) {     // catch ctrl-z (UNDO)
//      TODO: Add our own undo/redo functionality
//        editEvent.cancelBubble = true;
        return;
      }
      if ((ctrlKey && (ord == 121 || ord == 89)) ||
          ctrlKey && shiftKey && (ord == 122 || ord == 90)) {     // catch ctrl-y, ctrl-shift-z (REDO)
//      TODO: Add our own undo/redo functionality
        return;
      }
    }

  // setup timer for delayed updates (some events take time to complete)
  if (runDelay > 0) { return setTimeout(function(){ editor_event(objname); }, runDelay); }

  // don't execute more than 3 times a second (eg: too soon after last execution)
  if (this.tooSoon == 1 && runDelay >= 0) { this.queue = 1; return; } // queue all but urgent events
  this.tooSoon = 1;
  setTimeout(function(){
    this.tooSoon = 0;
    if (this.queue) { editor_event(objname,-1); };
    this.queue = 0;
    }, 333);  // 1/3 second

  editor_updateOutput(objname);
  editor_updateToolbar(objname);

}
Peter SMedlem sedan dec. 20025 483 inlägg
#26

Anledningen till att det läggs dubbelt så många mellanslag som angivits, är förstås att flera onkeydir-händelser avfyras. Den slutliga koden ser därför ut så här:

function editor_event(objname,runDelay) {
  var config = document.all[objname].config;
  var editor_obj  = document.all["_" +objname+  "_editor"];       // html editor object
  if (runDelay == null) { runDelay = 0; }
  var editdoc;
  var editEvent = editor_obj.contentWindow ? editor_obj.contentWindow.event : event;

  // catch keypress events
    if (editEvent && editEvent.keyCode) {
      var ord       = editEvent.keyCode;    // ascii order of key pressed
      var ctrlKey   = editEvent.ctrlKey;
      var altKey    = editEvent.altKey;
      var shiftKey  = editEvent.shiftKey;

      if (ord == 16) { return; }  // ignore shift key by itself
      if (ord == 17) { return; }  // ignore ctrl key by itself
      if (ord == 18) { return; }  // ignore alt key by itself

      if (ord == 9 && editEvent.type.toLowerCase() == "keydown") {
        editor_insertHTML(objname, "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");
	editEvent.cancelBubble = true;
	editEvent.returnValue = false;
	return;
      }

       // cancel ENTER key and insert <BR> instead
       //if (ord == 13 && editEvent.type == 'keypress') {
       //  editEvent.returnValue = false;
       //  editor_insertHTML(objname, "<br>");
       //  return;
       //}

      if (ctrlKey && (ord == 122 || ord == 90)) {     // catch ctrl-z (UNDO)
//      TODO: Add our own undo/redo functionality
//        editEvent.cancelBubble = true;
        return;
      }
      if ((ctrlKey && (ord == 121 || ord == 89)) ||
          ctrlKey && shiftKey && (ord == 122 || ord == 90)) {     // catch ctrl-y, ctrl-shift-z (REDO)
//      TODO: Add our own undo/redo functionality
        return;
      }
    }

  // setup timer for delayed updates (some events take time to complete)
  if (runDelay > 0) { return setTimeout(function(){ editor_event(objname); }, runDelay); }

  // don't execute more than 3 times a second (eg: too soon after last execution)
  if (this.tooSoon == 1 && runDelay >= 0) { this.queue = 1; return; } // queue all but urgent events
  this.tooSoon = 1;
  setTimeout(function(){
    this.tooSoon = 0;
    if (this.queue) { editor_event(objname,-1); };
    this.queue = 0;
    }, 333);  // 1/3 second

  editor_updateOutput(objname);
  editor_updateToolbar(objname);

}
sawMedlem sedan mars 20011 880 inlägg
#27

Tack alla för all hjälp.

136 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)