diff options
| author | Andreas Brachold <vdr07@deltab.de> | 2009-11-28 12:22:45 +0000 |
|---|---|---|
| committer | Andreas Brachold <vdr07@deltab.de> | 2009-11-28 12:22:45 +0000 |
| commit | 56adf3b3cfaba8ade8e78d6d5efe3f622d9c7cc5 (patch) | |
| tree | a18defc084a5d2253ef3e74029c510ea6e1eb358 | |
| parent | ac7c40f2127f476d28cad6473e051b6c2c4227ff (diff) | |
| download | xxv-56adf3b3cfaba8ade8e78d6d5efe3f622d9c7cc5.tar.gz xxv-56adf3b3cfaba8ade8e78d6d5efe3f622d9c7cc5.tar.bz2 | |
* jason: highlight searched text
| -rw-r--r-- | skins/jason/jason.css | 5 | ||||
| -rw-r--r-- | skins/jason/search.js | 55 |
2 files changed, 55 insertions, 5 deletions
diff --git a/skins/jason/jason.css b/skins/jason/jason.css index 99d9159..33705bd 100644 --- a/skins/jason/jason.css +++ b/skins/jason/jason.css @@ -482,3 +482,8 @@ color:red; div#audio-player { text-align:center; } object#audio-player { display:inline; } + +.x-highlight{ + background:repeat-x bottom; + background-image:url(extjs/resources/images/default/grid/invalid_line.gif); +} diff --git a/skins/jason/search.js b/skins/jason/search.js index b539647..1018b11 100644 --- a/skins/jason/search.js +++ b/skins/jason/search.js @@ -101,7 +101,7 @@ Ext.xxv.searchGrid = function(viewer, lookup) { ,scope:this
}); this.on('rowcontextmenu', this.onContextClick, this); - this.getSelectionModel().on('rowselect', this.preview.select, this.preview, {buffer:50}); + this.getSelectionModel().on('rowselect', this.select, this, {buffer:50}); };
Ext.extend(Ext.xxv.searchGrid, Ext.grid.GridPanel, {
@@ -217,7 +217,10 @@ Ext.extend(Ext.xxv.searchGrid, Ext.grid.GridPanel, { } ,EditTimer : function(record) { this.viewer.gridNow.EditTimer(record, this.store); - } + } + ,select : function(sm, index, record){ + this.preview.select(sm, index, record,this.store.baseParams.data); + } }); Ext.xxv.searchPreview = function(viewer) { @@ -255,10 +258,10 @@ Ext.xxv.searchPreview = function(viewer) { }); }; Ext.extend(Ext.xxv.searchPreview, Ext.Panel, { - select : function(sm, index, record){ + select : function(sm, index, record, lookup){ if(this.body)
XXV.getTemplate().overwrite(this.body, record.data); - + highlightText(this.body.dom,lookup,'x-highlight',1); // Enable all toolbar buttons var items = this.topToolbar.items;
var items = this.topToolbar.items;
@@ -269,7 +272,7 @@ Ext.extend(Ext.xxv.searchPreview, Ext.Panel, { if(XXV.help.cmdAllowed(key)) f.enable(); },items); } - }
+ } ,clear: function(){ if(this) {
if(this.body) @@ -281,6 +284,48 @@ Ext.extend(Ext.xxv.searchPreview, Ext.Panel, { } }); +function highlightText(node, regex, cls, deep) { + if (typeof(regex) == 'string') { + regex = new RegExp(regex, "ig"); + } else if (!regex.global) { + throw "RegExp to highlight must use the global qualifier"; + } + + var value, df, m, l, start = 0, highlightSpan; + if ((node.nodeType == 3) && (value = node.data.trim())) { + + // Loop through creating a document DocumentFragment containing text nodes interspersed with + // <span class={cls}> elements wrapping the matched text. + while (m = regex.exec(value)) { + if (!df) { + df = document.createDocumentFragment(); + } + if (l = m.index - start) { + df.appendChild(document.createTextNode(value.substr(start, l))); + } + highlightSpan = document.createElement('span'); + highlightSpan.className = cls; + highlightSpan.appendChild(document.createTextNode(m[0])); + df.appendChild(highlightSpan); + start = m.index + m[0].length; + } + + // If there is a resulting DocumentFragment, replace the original text node with the fragment + if (df) { + if (l = value.length - start) { + df.appendChild(document.createTextNode(value.substr(start, l))); + } + node.parentNode.replaceChild(df, node); + } + }else{ + if(deep){ + Ext.each(node.childNodes, function(child){ + highlightText(child, regex, cls, deep); + }); + } + } + }; + function createSearchView(viewer,id,lookup) { viewer.gridSearch = new Ext.xxv.searchGrid(viewer, lookup); |
