Changeset 805 for trunk/plugins


Ignore:
Timestamp:
03/29/07 20:00:06 (12 years ago)
Author:
ray
Message:

I had accidentially commited a version of stylist.js that contained the patch from Ticket #945 in rev [780], which was not fully functional. This version contains the fix for Ticket #543, whhithout this

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/plugins/Stylist/stylist.js

    r780 r805  
    8383    var className = x.trim(); 
    8484    var applicable = true; 
    85     var idApplicable = false; 
    8685    var apply_to   = active_elem; 
    8786 
     
    9796      // No class name, just redefines a tag 
    9897      applicable = false; 
    99    
    100       if (className.indexOf('#') >= 0) 
    101       { 
    102         idApplicable = true; 
    103       } 
    10498    } 
    10599 
     
    153147    } 
    154148 
    155     if (idApplicable) // IDs 
    156     { 
    157        // requires specific html tag 
    158       tag = className.substring(0, className.indexOf('#')).toLowerCase(); 
    159       var idName = className.substring(className.indexOf('#'), className.length); 
    160    
    161       // To apply we must have an ancestor tag that is the right type 
    162       if(active_elem != null && active_elem.tagName.toLowerCase() == tag) 
    163       { 
    164         idApplicable = true; 
    165         apply_to = active_elem; 
    166       } 
    167       else 
    168       { 
    169         if(this._getFirstAncestor(this._getSelection(), [tag]) != null) 
    170         { 
    171           idApplicable = true; 
    172           apply_to = this._getFirstAncestor(this._getSelection(), [tag]); 
    173         } 
    174         else 
    175         { 
    176           // alert (this._getFirstAncestor(this._getSelection(), tag)); 
    177           // If we don't have an ancestor, but it's a div/span/p/hx stle, we can make one 
    178           if(( tag == 'div' || tag == 'span' || tag == 'p' 
    179               || (tag.substr(0,1) == 'h' && tag.length == 2 && tag != 'hr'))) 
    180           { 
    181             if(!this._selectionEmpty(this._getSelection())) 
    182             { 
    183               idApplicable = true; 
    184               apply_to = 'new'; 
    185             } 
    186             else 
    187             { 
    188               // See if we can get a paragraph or header that can be converted 
    189               apply_to = this._getFirstAncestor(sel, ['p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'h7']); 
    190               if(apply_to != null) 
    191               { 
    192                 idApplicable = true; 
    193               } 
    194             } 
    195           } 
    196           else 
    197           { 
    198             idApplicable = false; 
    199           } 
    200         } 
    201       }     
    202     } 
    203  
    204  
    205     if(applicable || idApplicable) 
    206     { 
    207  
    208       if (idApplicable) 
    209       { 
    210         // Remove the first . 
    211         idName = idName.substring(idName.indexOf('#'), idName.length); 
    212  
    213         // Replace any futher ones with spaces (for multiple id definitions (yes it happens)) 
    214         idName = idName.replace('#', ' '); 
    215       } 
    216       else 
    217       { 
    218         // Remove the first . 
    219         className = className.substring(className.indexOf('.'), className.length); 
    220  
    221         // Replace any futher ones with spaces (for multiple class definitions) 
    222         className = className.replace('.', ' '); 
    223       } 
     149    if(applicable) 
     150    { 
     151      // Remove the first . 
     152      className = className.substring(className.indexOf('.'), className.length); 
     153 
     154      // Replace any futher ones with spaces (for multiple class definitions) 
     155      className = className.replace('.', ' '); 
    224156 
    225157      if(apply_to == null) 
     
    238170    } 
    239171 
    240     if (idApplicable) 
    241     { 
    242       var applied    = (this._ancestorsWithIDs(sel, tag, idName).length > 0 ? true : false); 
    243       var applied_to = this._ancestorsWithIDs(sel, tag, idName); 
    244     } 
    245     else 
    246     { 
    247       var applied    = (this._ancestorsWithClasses(sel, tag, className).length > 0 ? true : false); 
    248       var applied_to = this._ancestorsWithClasses(sel, tag, className); 
    249     } 
    250  
    251     if(applicable || idApplicable) 
     172    var applied    = (this._ancestorsWithClasses(sel, tag, className).length > 0 ? true : false); 
     173    var applied_to = this._ancestorsWithClasses(sel, tag, className); 
     174 
     175    if(applicable) 
    252176    { 
    253177      var anch = document.createElement('a'); 
    254       if (idApplicable) 
    255         anch._stylist_idName = idName.trim();   
    256       else 
    257         anch._stylist_className = className.trim(); 
     178      anch._stylist_className = className.trim(); 
    258179      anch._stylist_applied   = applied; 
    259180      anch._stylist_appliedTo = applied_to; 
     
    264185      anch.href = 'javascript:void(0)'; 
    265186      var editor = this; 
    266       if (idApplicable) 
    267       {   
    268         anch.onclick = function() 
    269         { 
    270           if(this._stylist_applied == true) 
    271           { 
    272             editor._stylistRemoveIDs(this._stylist_idName, this._stylist_appliedTo); 
    273           } 
    274           else 
    275           { 
    276             editor._stylistAddIDs(this._stylist_applyTo, this._stylist_applyTag, this._stylist_idName); 
    277           } 
    278           return false; 
    279         } 
    280       } 
    281       else 
    282       { 
    283         anch.onclick = function() 
    284         { 
    285           if(this._stylist_applied == true) 
    286           { 
    287             editor._stylistRemoveClasses(this._stylist_className, this._stylist_appliedTo); 
    288           } 
    289           else 
    290           { 
    291             editor._stylistAddClasses(this._stylist_applyTo, this._stylist_applyTag, this._stylist_className); 
    292           } 
    293           return false; 
    294         } 
     187      anch.onclick = function() 
     188      { 
     189        if(this._stylist_applied == true) 
     190        { 
     191          editor._stylistRemoveClasses(this._stylist_className, this._stylist_appliedTo); 
     192        } 
     193        else 
     194        { 
     195          editor._stylistAddClasses(this._stylist_applyTo, this._stylist_applyTag, this._stylist_className); 
     196        } 
     197        return false; 
    295198      } 
    296199 
     
    350253    this.updateToolbar(); 
    351254  }; 
    352    
    353 Xinha.prototype._stylistAddIDs = function(el, tag, ids) 
    354   { 
    355     if(el == 'new') 
    356     { 
    357       this.insertHTML('<' + tag + ' id="' + ids + '">' + this.getSelectedHTML() + '</' + tag + '>'); 
    358     } 
    359     else 
    360     { 
    361       if(tag != null && el.tagName.toLowerCase() != tag) 
    362       { 
    363         // Have to change the tag! 
    364         var new_el = this.switchElementTag(el, tag); 
    365  
    366         if(typeof el._stylist_usedToBe != 'undefined') 
    367         { 
    368           new_el._stylist_usedToBe = el._stylist_usedToBe; 
    369           new_el._stylist_usedToBe[new_el._stylist_usedToBe.length] = {'tagName' : el.tagName, 'id' : el.getAttribute('id')}; 
    370         } 
    371         else 
    372         { 
    373           new_el._stylist_usedToBe = [{'tagName' : el.tagName, 'id' : el.getAttribute('id')}]; 
    374         } 
    375  
    376         Xinha.addIDs(new_el, ids); 
    377       } 
    378       else 
    379       { 
    380         Xinha._addIDs(el, ids); 
    381       } 
    382     } 
    383     this.focusEditor(); 
    384     this.updateToolbar(); 
    385   };   
    386255 
    387256/** 
     
    397266    this.updateToolbar(); 
    398267  }; 
    399    
    400 Xinha.prototype._stylistRemoveIDs = function(ids, from) 
    401   { 
    402     for(var x = 0; x < from.length; x++) 
    403     { 
    404       this._stylistRemoveIDsFull(from[x], ids); 
    405     } 
    406     this.focusEditor(); 
    407     this.updateToolbar(); 
    408   };   
    409268 
    410269Xinha.prototype._stylistRemoveClassesFull = function(el, classes) 
     
    462321    { 
    463322      el.className = new_thiers.join(' ').trim(); 
    464     } 
    465     else 
    466     { 
    467       // Must be a span with no classes and no id, so we can splice it out 
    468       var prnt = el.parentNode; 
    469       var childs = el.childNodes; 
    470       for(var x = 0; x < childs.length; x++) 
    471       { 
    472         prnt.insertBefore(childs[x], el); 
    473       } 
    474       prnt.removeChild(el); 
    475     } 
    476   } 
    477 }; 
    478  
    479 Xinha.prototype._stylistRemoveIDsFull = function(el, ids) 
    480 { 
    481   if(el != null) 
    482   { 
    483     var thiers = el.id.trim().split(' '); 
    484     var new_thiers = [ ]; 
    485     var ours   = ids.split(' '); 
    486     for(var x = 0; x < thiers.length; x++) 
    487     { 
    488       var exists = false; 
    489       for(var i = 0; exists == false && i < ours.length; i++) 
    490       { 
    491         if(ours[i] == thiers[x]) 
    492         { 
    493           exists = true; 
    494         } 
    495       } 
    496       if(exists == false) 
    497       { 
    498         new_thiers[new_thiers.length] = thiers[x]; 
    499       } 
    500     } 
    501  
    502     if(new_thiers.length == 0 && el._stylist_usedToBe && el._stylist_usedToBe.length > 0 && el._stylist_usedToBe[el._stylist_usedToBe.length - 1].id != null) 
    503     { 
    504       // Revert back to what we were IF the classes are identical 
    505       var last_el = el._stylist_usedToBe[el._stylist_usedToBe.length - 1]; 
    506       var last_ids = Xinha.arrayFilter(last_el.id.trim().split(' '), function(c) { if (c == null || c.trim() == '') { return false;} return true; }); 
    507  
    508       if( 
    509         (new_thiers.length == 0) 
    510         || 
    511         ( 
    512         Xinha.arrayContainsArray(new_thiers, last_ids) 
    513         && Xinha.arrayContainsArray(last_ids, new_thiers) 
    514         ) 
    515       ) 
    516       { 
    517         el = this.switchElementTag(el, last_el.tagName); 
    518         new_thiers = last_ids; 
    519       } 
    520       else 
    521       { 
    522         // We can't rely on the remembered tags any more 
    523         el._stylist_usedToBe = [ ]; 
    524       } 
    525     } 
    526  
    527     if(     new_thiers.length > 0 
    528         ||  el.tagName.toLowerCase() != 'span' 
    529         || (el.id && el.id != '') 
    530       ) 
    531     { 
    532       el.id = new_thiers.join(' ').trim(); 
    533323    } 
    534324    else 
     
    654444}; 
    655445 
    656 Xinha.prototype._ancestorsWithIDs = function(sel, tag, ids) 
    657 { 
    658   var ancestors = [ ]; 
    659   var prnt = this._activeElement(sel); 
    660   if(prnt == null) 
    661   { 
    662     try 
    663     { 
    664       prnt = (Xinha.is_ie ? this._createRange(sel).parentElement() : this._createRange(sel).commonAncestorContainer); 
    665     } 
    666     catch(e) 
    667     { 
    668       return ancestors; 
    669     } 
    670   } 
    671   var search_ids = ids.trim().split(' '); 
    672  
    673   while(prnt) 
    674   { 
    675     if(prnt.nodeType == 1 && prnt.id) 
    676     { 
    677       if(tag == null || prnt.tagName.toLowerCase() == tag) 
    678       { 
    679         var ids = prnt.id.trim().split(' '); 
    680         var found_all = true; 
    681         for(var i = 0; i < search_ids.length; i++) 
    682         { 
    683           var found_id = false; 
    684           for(var x = 0; x < ids.length; x++) 
    685           { 
    686             if(search_ids[i] == ids[x]) 
    687             { 
    688               found_id = true; 
    689               break; 
    690             } 
    691           } 
    692  
    693           if(!found_id) 
    694           { 
    695             found_all = false; 
    696             break; 
    697           } 
    698         } 
    699  
    700         if(found_all) ancestors[ancestors.length] = prnt; 
    701       } 
    702       if(prnt.tagName.toLowerCase() == 'body')    break; 
    703       if(prnt.tagName.toLowerCase() == 'table'  ) break; 
    704     } 
    705     prnt = prnt.parentNode; 
    706   } 
    707  
    708   return ancestors; 
    709 }; 
    710  
    711446 
    712447Xinha.ripStylesFromCSSFile = function(URL) 
     
    758493  developer_url: "http://www.gogo.co.nz/", 
    759494  c_owner      : "Gogo Internet Services", 
    760   license      : "htmlArea", 
     495  license      : "HTMLArea", 
    761496  sponsor      : "Gogo Internet Services", 
    762497  sponsor_url  : "http://www.gogo.co.nz/" 
Note: See TracChangeset for help on using the changeset viewer.