Changeset 982


Ignore:
Timestamp:
03/21/08 19:55:25 (11 years ago)
Author:
ray
Message:

#1171 SmartReplace? could also replace three dots with an ellipsis

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/plugins/SmartReplace/smart-replace.js

    r974 r982  
    22 SmartReplace for Xinha 
    33 _______________________ 
    4      
     4         
    55\*------------------------------------------*/ 
    66 
     
    3838 
    3939SmartReplace.prototype._lc = function(string) { 
    40     return Xinha._lc(string, 'SmartReplace'); 
     40        return Xinha._lc(string, 'SmartReplace'); 
    4141}; 
    4242 
     
    6969        var self = this; 
    7070        Xinha._addEvent( 
    71         self.editor._doc, 
    72         "keypress", 
    73         function (event) 
    74         { 
    75           return self.keyEvent(Xinha.is_ie ? self.editor._iframe.contentWindow.event : event); 
    76         }); 
    77      
    78     var quotes = this.editor.config.SmartReplace.quotes; 
     71                self.editor._doc, 
     72                "keypress", 
     73                function (event) 
     74                { 
     75                  return self.keyEvent(Xinha.is_ie ? self.editor._iframe.contentWindow.event : event); 
     76                }); 
     77         
     78        var quotes = this.editor.config.SmartReplace.quotes; 
    7979    
    80     if (quotes && typeof quotes == 'object') 
    81     { 
    82             this.openingQuotes = quotes[0]; 
     80        if (quotes && typeof quotes == 'object') 
     81        { 
     82                this.openingQuotes = quotes[0]; 
    8383                this.closingQuotes = quotes[1]; 
    8484                this.openingQuote  = quotes[2]; 
    8585                this.closingQuote  = quotes[3]; 
    86     } 
    87     else 
    88     { 
    89         this.openingQuotes = this._lc("OpeningDoubleQuotes"); 
     86        } 
     87        else 
     88        { 
     89                this.openingQuotes = this._lc("OpeningDoubleQuotes"); 
    9090                this.closingQuote  = this._lc("ClosingSingleQuote"); 
    9191                this.closingQuotes = this._lc("ClosingDoubleQuotes"); 
    9292                this.openingQuote  = this._lc("OpeningSingleQuote"); 
    93     } 
    94          
     93        } 
     94         
    9595        if (this.openingQuotes == 'OpeningDoubleQuotes') //If nothing else is defined, English style as default 
    9696        { 
     
    110110        var key = String.fromCharCode(charCode); 
    111111 
    112         if (charCode == 32) //space bar 
    113         { 
    114                 return this.smartDash(ev) 
    115         } 
    116112        if ( key == '"' || key == "'") 
    117113        { 
    118114                Xinha._stopEvent(ev); 
    119115                return this.smartQuotes(key); 
     116        } 
     117        if (charCode == 32) //space bar 
     118        { 
     119                return this.smartReplace(ev, 2, /^\s-/, ' –', false); // space-space -> dash  
     120        } 
     121        if ( key == '.' ) // ... -> ellipsis 
     122        { 
     123                return this.smartReplace(ev, 2, /\.\./, '
', true); 
    120124        } 
    121125        return true; 
     
    185189} 
    186190 
    187 SmartReplace.prototype.smartDash = function(ev) 
     191SmartReplace.prototype.smartReplace = function(ev, lookback, re, replace, stopEvent) 
    188192{ 
    189193        var editor = this.editor; 
     
    193197        if (Xinha.is_ie) 
    194198        { 
    195                 r.moveStart('character', -2); 
     199                r.moveStart('character', -lookback); 
    196200                 
    197                 if(r.text.match(/\s-/)) 
    198                 { 
    199                         r.text = ' '+ String.fromCharCode(8211); 
    200                 } 
    201         } 
    202         else 
    203         { 
    204                 if (r.startOffset > 1) r.setStart(r.startContainer, r.startOffset -2); 
    205  
    206                 if(r.toString().match(/^ -/)) 
    207                 { 
     201                if(r.text.match(re)) 
     202                { 
     203                        r.text = replace; 
     204                        if (stopEvent)  
     205                        { 
     206                                Xinha._stopEvent(ev); 
     207                                return false 
     208                        } 
     209                } 
     210        } 
     211        else 
     212        { 
     213                if (r.startOffset > 1) r.setStart(r.startContainer, r.startOffset -lookback); 
     214 
     215                if(r.toString().match(re)) 
     216                { 
     217                        this.editor.insertNodeAtSelection(document.createTextNode(replace)); 
    208218                        r.deleteContents(); 
    209                         this.editor.insertNodeAtSelection(document.createTextNode(' ' + String.fromCharCode(8211))); 
     219                        r.collapse(true); 
     220                  if (stopEvent)  
     221                  { 
     222                                Xinha._stopEvent(ev); 
     223                                return false 
     224                  } 
    210225                } 
    211226                editor.getSelection().collapseToEnd(); 
     
    213228        return true; 
    214229} 
     230 
    215231 
    216232SmartReplace.prototype.replaceAll = function() 
     
    298314  if( !this._dialog) 
    299315  { 
    300     this._dialog = new SmartReplace.Dialog(this); 
     316        this._dialog = new SmartReplace.Dialog(this); 
    301317  } 
    302318}; 
     
    324340  if(this.html == false) 
    325341  { 
    326     Xinha._getback(_editor_url + 'plugins/SmartReplace/dialog.html', function(getback) { pluginDialogObject.html = getback; pluginDialogObject._prepareDialog(); }); 
    327     return; 
     342        Xinha._getback(_editor_url + 'plugins/SmartReplace/dialog.html', function(getback) { pluginDialogObject.html = getback; pluginDialogObject._prepareDialog(); }); 
     343        return; 
    328344  } 
    329345   
     
    340356  if(!this.ready) 
    341357  { 
    342     var pluginDialogObject = this; 
    343     window.setTimeout(function() {pluginDialogObject.show(inputs,ok,cancel);},100); 
    344     return; 
     358        var pluginDialogObject = this; 
     359        window.setTimeout(function() {pluginDialogObject.show(inputs,ok,cancel);},100); 
     360        return; 
    345361  } 
    346362 
     
    350366  if(ok) 
    351367  { 
    352     this.dialog.getElementById('ok').onclick = ok; 
     368        this.dialog.getElementById('ok').onclick = ok; 
    353369  } 
    354370  else 
    355371  { 
    356     this.dialog.getElementById('ok').onclick = function() {pluginDialogObject.hide();}; 
     372        this.dialog.getElementById('ok').onclick = function() {pluginDialogObject.hide();}; 
    357373  } 
    358374 
    359375  if(cancel) 
    360376  { 
    361     this.dialog.getElementById('cancel').onclick = cancel; 
     377        this.dialog.getElementById('cancel').onclick = cancel; 
    362378  } 
    363379  else 
    364380  { 
    365     this.dialog.getElementById('cancel').onclick = function() { pluginDialogObject.hide()}; 
     381        this.dialog.getElementById('cancel').onclick = function() { pluginDialogObject.hide()}; 
    366382  } 
    367383 
Note: See TracChangeset for help on using the changeset viewer.