NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name Bruxelles // @namespace http://www.stepstone.be // @description Region Bruxelles // @include http://www.stepstone.be/* // @exclude http://www.stepstone.be/admin* // @version 1 // @grant none // ==/UserScript== (function () { window.addEventListener('load', searchCountry, 'false'); var find=null; var className = "bruxelles"; var caseSensitive = false; var color = 'background-color:#003178; cursor:help; color:#FFFFFF; display:inline;font-size: 1em;padding: 0 2px; width:auto; float:none; margin:0; left:0px; right:0px; top:0px; bottom:0px; ' function searchCountry(){ // Die Kommentierung vor den beiden folgenden Zeilen löschen um die Ausführung des Skiptes auf Prewievlinks zu stoppen var url = window.top.location.href; if ((url.match("http://www.stepstone.be/offers*"))||(url.match("http://www.stepstone.nl/offers*"))) return; var s = "Bruxelles|Laeken|Schaerbeek|Etterbeek|Ixelles|Saint-Gilles|Anderlecht|Molenbeek-Saint-Jean|Koekelberg|Berchem-Sainte-Agathe|Ganshoren|Jette|Neder-Over-Heembeek|Haren|Evere|Auderghem|Watermael-Boitsfort|Uccle|Forest|Woluwe-Saint-Lambert|Woluwe-Saint-Pierre|Saint-Josse-Ten-Noode" if (s == null || s == '') return; if(find==null) find=new Find(); else{ find.clr(); find.build(); } find.findr(s); } function Find(node){ if(!node) node=document.getElementsByTagName('body')[0]; this.rootNode=node; this.hits=0; this.selected=0; this.selection=[]; this.build(); } /** Clears highlightings from previous searches. **/ Find.prototype.clr=function(){ if(this.hits==0)return; var nodes=[]; var c=0; var i; for(i=0;i<this.hits;i++){ var j; for(j=0;j<this.selection[i].nodes.length;j++){ nodes[c++]=this.selection[i].nodes[j]; } } for(i=0;i<c;i++){ var node=nodes[i]; var parent=node.parentNode; var t=''; var sibling=node.previousSibling; if(sibling!=null && sibling.nodeType==3){//Text node. t=sibling.textContent; parent.removeChild(sibling); } t+=node.childNodes[0].textContent; sibling=node.nextSibling; if(sibling!=null && sibling.nodeType==3){//Text node. t+=sibling.textContent; parent.removeChild(sibling); } parent.replaceChild(document.createTextNode(t),node); } this.selected=0; this.selection=[]; this.hits=0; } /** Builds data structures to use in search. **/ Find.prototype.build=function(){ var nodec=0; var nodes=[]; var index=[]; var text=''; var lastSymbol='\n'; traverse(this.rootNode,process); this.nodes=nodes; this.text=text; this.index=index; this.nodec=nodec; function traverse(node,func){ function trav(node){ if(!node) return; if(node.nodeType==1){//Element node. if(node.tagName=='TEXTAREA' || node.tagName=='SCRIPT' || node.tagName=='STYLE') return; } else if(node.nodeType!=3) return;//Text node. if(node.id == "offerInformation") return; if(node.nodeType==3)//Text node. func(node); var children=node.childNodes; for(var i=0;i<children.length;i++){ trav(children[i]); } } trav(node); } function process(node){ var t=node.textContent; if(t!='\n' || lastSymbol!='\n'){ nodes[nodec]=node; index[nodec]=text.length; ++nodec; text+=t; lastSymbol=t.charAt(t.length-1); } } } /** Find regular expression. **/ Find.prototype.findr=function(s){ var regex = new RegExp(s, caseSensitive ? "g" : "ig"); var myArray; var text=this.text; while ((myArray = regex.exec(text)) != null){ this.mark(myArray.index,regex.lastIndex); } if(this.hits>0){ this.selection.sort( function(a,b){ var r=a.y-b.y; if(r==0){ r=a.from-b.from; while(r>=1||r<=-1)r/=10; } return r; }); var i; var nodes=this.selection[this.selected].nodes; var n=nodes.length; for(i=0;i<n;i++){ nodes[i].setAttribute('style',color); } } } /** Searches for a string. **/ Find.prototype.find=function(s){ var last=-1; var text=this.text; while(true){ var p=(last==-1 ? text.indexOf(s) : text.indexOf(s,last+s.length)); if(p==-1){ break; } this.mark(p,p+s.length); last=p; } } /** Highlights everything between the given indeces in the flattened text. **/ Find.prototype.mark=function(from,to){ var parts=0; var selected=[]; var nodes=this.nodes; var index=this.index; var text=this.text; var first=this.nodec-1; var last=this.nodec-1; var i=0; for(i=0;i<this.nodec;i++){ if(index[i]>from){first=i-1;break;} } for(i=first;i<this.nodec;i++){ if(index[i]>=to){last=i-1;break;} } function createNode(){ var d=document.createElement('span'); d.setAttribute('style',color); d.className=className; d.writeAttribute("title", "Région: Bruxelles - Pays: Belgique" ); selected[parts++]=d; return d; } if(first==last){ var start=document.createTextNode(text.substring(index[first],from)); var middle=createNode(); var len=to-from; middle.appendChild(document.createTextNode( nodes[first].textContent.substr(from-index[first],len))); var end=document.createTextNode( nodes[first].textContent.substr(from-index[first]+len)); var parent=nodes[first].parentNode; parent.replaceChild(end,nodes[first]); parent.insertBefore(middle,end); parent.insertBefore(start,middle); nodes[first]=end; index[first]=to; } else{ var start=document.createTextNode(text.substring(index[first],from)); var end=createNode(); end.appendChild(document.createTextNode( nodes[first].textContent.substr(from-index[first]))); var parent=nodes[first].parentNode; parent.replaceChild(end,nodes[first]); parent.insertBefore(start,end); for(i=first+1;i<last;i++){ var currentNode=nodes[i]; var n=createNode(); n.appendChild(currentNode.cloneNode(true)); currentNode.parentNode.replaceChild(n,currentNode); } start=createNode(); end=document.createTextNode( nodes[last].textContent.substr(to-index[last])); start.appendChild(document.createTextNode( nodes[last].textContent.substring(0,to-index[last]))); var parent=nodes[last].parentNode; parent.replaceChild(end,nodes[last]); parent.insertBefore(start,end); nodes[last]=end; index[last]=to; } this.nodes=nodes; this.index=index; var hit=new Object(); hit.nodes=selected; var node=selected[0]; var y=0; do{ y+=node.offsetTop; node=node.offsetParent; }while(node); hit.y=y>=20?y-20:y; hit.from=from; hit.to=to; if(this.hits==0){ this.position=y; window.scroll(0,hit.y); } this.selection[this.hits++]=hit; } /** Returns currently highlighted match (string). **/ Find.prototype.getSelection=function(){ var o=this.selection[this.selected]; return this.text.substring(o.from,o.to); } /** Select (green hightlight) next match. **/ Find.prototype.next=function(){ if(this.hits<2)return; var nodes=this.selection[this.selected].nodes; var i=0; for(i=0;i<nodes.length;i++){ nodes[i].setAttribute('style',color); } if(this.selected>=this.selection.length-1) this.selected=0; else this.selected++; nodes=this.selection[this.selected].nodes; for(i=0;i<nodes.length;i++){ nodes[i].setAttribute('style',color); } window.scroll(0,this.selection[this.selected].y); } } )();