summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Brachold <vdr07@deltab.de>2009-11-28 12:22:45 +0000
committerAndreas Brachold <vdr07@deltab.de>2009-11-28 12:22:45 +0000
commit56adf3b3cfaba8ade8e78d6d5efe3f622d9c7cc5 (patch)
treea18defc084a5d2253ef3e74029c510ea6e1eb358
parentac7c40f2127f476d28cad6473e051b6c2c4227ff (diff)
downloadxxv-56adf3b3cfaba8ade8e78d6d5efe3f622d9c7cc5.tar.gz
xxv-56adf3b3cfaba8ade8e78d6d5efe3f622d9c7cc5.tar.bz2
* jason: highlight searched text
-rw-r--r--skins/jason/jason.css5
-rw-r--r--skins/jason/search.js55
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);