Changeset 1358


Ignore:
Timestamp:
02/04/18 05:22:00 (15 months ago)
Author:
gogo
Message:

#1163 Add th support to TableOperations? - in that it won't break th's and will allow you to style existing ones, you just can't insert new ones presently.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/XinhaCore.js

    r1354 r1358  
    13161316 *                   editor.surroundHTML('<span class="hilite">', '</span>'); 
    13171317 *                 }, 
    1318  *      context  : "p"               // will be disabled if outside a <p> element 
     1318 *      context  : "p" or [ "p", "h1" ]  // will be disabled if outside a <p> element (in array case, <p> or <h1>) 
    13191319 *    });</pre> 
    13201320 */ 
     
    49044904    if ( btn.context && !text ) 
    49054905    { 
    4906       inContext = false; 
    4907       var context = btn.context; 
    4908       var attrs = []; 
    4909       if ( /(.*)\[(.*?)\]/.test(context) ) 
    4910       { 
    4911         context = RegExp.$1; 
    4912         attrs = RegExp.$2.split(","); 
    4913       } 
    4914       context = context.toLowerCase(); 
    4915       var match = (context == "*"); 
    4916       for ( var k = 0; k < ancestors.length; ++k ) 
    4917       { 
    4918         if ( !ancestors[k] ) 
     4906      var contexts = typeof btn.context == 'object' ? btn.context : [ btn.context ]; 
     4907      for(var context_i = 0; context_i < contexts.length; context_i++) 
     4908      { 
     4909        inContext = false; 
     4910        var context = contexts[context_i]; 
     4911        var attrs = []; 
     4912        if ( /(.*)\[(.*?)\]/.test(context) ) 
    49194913        { 
    4920           // the impossible really happens. 
    4921           continue; 
     4914          context = RegExp.$1; 
     4915          attrs = RegExp.$2.split(","); 
    49224916        } 
    4923         if ( match || ( ancestors[k].tagName.toLowerCase() == context ) ) 
     4917        context = context.toLowerCase(); 
     4918        var match = (context == "*"); 
     4919        for ( var k = 0; k < ancestors.length; ++k ) 
    49244920        { 
    4925           inContext = true; 
    4926           var contextSplit = null; 
    4927           var att = null; 
    4928           var comp = null; 
    4929           var attVal = null; 
    4930           for ( var ka = 0; ka < attrs.length; ++ka ) 
     4921          if ( !ancestors[k] ) 
    49314922          { 
    4932             contextSplit = attrs[ka].match(/(.*)(==|!=|===|!==|>|>=|<|<=)(.*)/); 
    4933             att = contextSplit[1]; 
    4934             comp = contextSplit[2]; 
    4935             attVal = contextSplit[3]; 
    4936  
    4937             if (!eval(ancestors[k][att] + comp + attVal)) 
     4923            // the impossible really happens. 
     4924            continue; 
     4925          } 
     4926          if ( match || ( ancestors[k].tagName.toLowerCase() == context ) ) 
     4927          { 
     4928            inContext = true; 
     4929            var contextSplit = null; 
     4930            var att = null; 
     4931            var comp = null; 
     4932            var attVal = null; 
     4933            for ( var ka = 0; ka < attrs.length; ++ka ) 
    49384934            { 
    4939               inContext = false; 
     4935              contextSplit = attrs[ka].match(/(.*)(==|!=|===|!==|>|>=|<|<=)(.*)/); 
     4936              att = contextSplit[1]; 
     4937              comp = contextSplit[2]; 
     4938              attVal = contextSplit[3]; 
     4939 
     4940              if (!eval(ancestors[k][att] + comp + attVal)) 
     4941              { 
     4942                inContext = false; 
     4943                break; 
     4944              } 
     4945            } 
     4946            if ( inContext ) 
     4947            { 
    49404948              break; 
    49414949            } 
    49424950          } 
    4943           if ( inContext ) 
    4944           { 
    4945             break; 
    4946           } 
    49474951        } 
     4952         
     4953        if(inContext) break; 
    49484954      } 
    49494955    } 
  • trunk/plugins/TableOperations/TableOperations.js

    r1282 r1358  
    7171 
    7272  cfg.dblclickList['td'] = [function() { self.dialogTableProperties() }]; 
     73  cfg.dblclickList['th'] = [function() { self.dialogTableProperties() }]; 
    7374} 
    7475 
     
    109110}; 
    110111 
     112TableOperations.prototype.getClosestMatch = function(regExpTagName) { 
     113  var editor = this.editor; 
     114  var ancestors = editor.getAllAncestors(); 
     115  var ret = null; 
     116   
     117  for (var i = 0; i < ancestors.length; ++i) { 
     118    var el = ancestors[i]; 
     119    if (el.tagName.toLowerCase().match(regExpTagName)) { 
     120      ret = el; 
     121      break; 
     122    } 
     123  } 
     124  return ret; 
     125}; 
    111126// this function gets called when some button from the TableOperations toolbar 
    112127// was pressed. 
     
    117132  // helper function that clears the content in a table row 
    118133  function clearRow(tr) { 
    119     var tds = tr.getElementsByTagName("td"); 
     134    var tds = tr.getElementsByTagName("td").append(tr.getElementsByTagName("th")); 
    120135    for (var i = tds.length; --i >= 0;) { 
    121136      var td = tds[i]; 
     
    266281    break; 
    267282  case "TO-row-split": 
    268     var td = this.getClosest("td"); 
     283    var td = this.getClosestMatch(/^(td|th)$/i); 
    269284    if (!td) { 
    270285      break; 
     
    277292  case "TO-col-insert-before": 
    278293  case "TO-col-insert-after": 
    279     var td = this.getClosest("td"); 
     294    var td = this.getClosestMatch(/^(td|th)$/i); 
    280295    if (!td) { 
    281296      break; 
     
    301316    break; 
    302317  case "TO-col-split": 
    303     var td = this.getClosest("td"); 
     318    var td = this.getClosestMatch(/^(td|th)$/i); 
    304319    if (!td) { 
    305320      break; 
     
    308323    break; 
    309324  case "TO-col-delete": 
    310     var td = this.getClosest("td"); 
     325    var td = this.getClosestMatch(/^(td|th)$/i); 
    311326    if (!td) { 
    312327      break; 
     
    332347 
    333348  case "TO-cell-split": 
    334     var td = this.getClosest("td"); 
     349    var td = this.getClosestMatch(/^(td|th)$/i); 
    335350    if (!td) { 
    336351      break; 
     
    340355  case "TO-cell-insert-before": 
    341356  case "TO-cell-insert-after": 
    342     var td = this.getClosest("td"); 
     357    var td = this.getClosestMatch(/^(td|th)$/i); 
    343358    if (!td) { 
    344359      break; 
     
    352367    break; 
    353368  case "TO-cell-delete": 
    354     var td = this.getClosest("td"); 
     369    var td = this.getClosestMatch(/^(td|th)$/i); 
    355370    if (!td) { 
    356371      break; 
     
    401416    } else { 
    402417      // Internet Explorer "browser" or not more than one cell selected in Moz 
    403       var td = this.getClosest("td"); 
     418      var td = this.getClosestMatch(/^(td|th)$/i); 
    404419      if (!td) { 
    405420        alert(Xinha._lc("Please click into some cell", "TableOperations")); 
     
    449464 
    450465  // COLS 
    451   ["col-insert-before", "td", "Insert column before"], 
    452   ["col-insert-after",  "td", "Insert column after"], 
    453   ["col-delete",        "td", "Delete column"], 
    454   ["col-split",         "td[colSpan!=1]", "Split column"], 
     466  ["col-insert-before", ["td","th"], "Insert column before"], 
     467  ["col-insert-after",  ["td","th"], "Insert column after"], 
     468  ["col-delete",        ["td","th"], "Delete column"], 
     469  ["col-split",         ["td[colSpan!=1]","th[colSpan!=1]"], "Split column"], 
    455470  null, 
    456471 
    457472  // CELLS 
    458   ["cell-prop",          "td", "Cell properties"], 
    459   ["cell-insert-before", "td", "Insert cell before"], 
    460   ["cell-insert-after",  "td", "Insert cell after"], 
    461   ["cell-delete",        "td", "Delete cell"], 
     473  ["cell-prop",          ["td","th"], "Cell properties"], 
     474  ["cell-insert-before", ["td","th"], "Insert cell before"], 
     475  ["cell-insert-after",  ["td","th"], "Insert cell after"], 
     476  ["cell-delete",        ["td","th"], "Delete cell"], 
    462477  ["cell-merge",         "tr", "Merge cells"], 
    463   ["cell-split",         "td[colSpan!=1,rowSpan!=1]", "Split cell"] 
     478  ["cell-split",         ["td[colSpan!=1,rowSpan!=1]","th[colSpan!=1,rowSpan!=1]"], "Split cell"] 
    464479]; 
    465480 
     
    605620TableOperations.prototype.dialogRowCellProperties = function(cell) { 
    606621  // retrieve existing values 
    607   var element = this.getClosest(cell ? "td" : "tr"); 
     622  var element = cell ? this.getClosestMatch(/^(td|th)$/i) : this.getClosest("tr"); 
    608623  var table = this.getClosest("table"); 
    609624 
Note: See TracChangeset for help on using the changeset viewer.