-
Notifications
You must be signed in to change notification settings - Fork 1
/
YQLAutoTagger.js
78 lines (78 loc) · 2.44 KB
/
YQLAutoTagger.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
/*
YQLAutoTagger by Christian Heilmann
Homepage: http://github.com/codepo8/YQLAutoTagger/
Copyright (c) 2009, Christian Heilmann
Code licensed under the BSD License:
http://wait-till-i.com/license.txt
*/
YQLAutoTagger = function(){
var cfg = {
loadingClass:'loading',
tagDelimiter:' ',
addQuotes:true,
disableField:true
};
var inputField,tagField;
function init(input,output){
inputField = document.getElementById(input);
tagField = document.getElementById(output);
if(inputField && tagField){
addEvent(inputField,'blur',function(){
var content = inputField.value.replace('"','');
var url = 'http://query.yahooapis.com/v1/public/yql?'+
'q=select%20*%20from%20search.termextract%20'+
'where%20context%3D%22'+encodeURIComponent(content)+
'%22&format=json&callback=YQLAutoTagger.received';
var s = document.createElement('script');
s.setAttribute('type','text/javascript');
s.setAttribute('src',url);
document.getElementsByTagName('head')[0].appendChild(s);
if(cfg.disableField===true){
tagField.setAttribute('disabled','true');
}
if(cfg.loadingClass !== ''){
inputField.className += cfg.loadingClass;
}
},false);
}
}
function YQLreceived(o){
if(cfg.disableField === true){
tagField.removeAttribute('disabled');
}
if(cfg.loadingClass !== ''){
var cl = inputField.className;
inputField.className = cl.replace(cfg.loadingClass,'');
}
if(o.query && o.query.results){
var tags = o.query.results.Result;
if(typeof tags!=='string'){
if(cfg.addQuotes === true){
for(var i=tags.length-1;i>0;i--){
if(tags[i].indexOf(' ')!==-1){
tags[i] = '"' + tags[i] + '"';
}
}
}
tags = tags.join(cfg.tagDelimiter);
} else {
if(cfg.addQuotes === true){
tags = (tags.indexOf(' ') !== -1) ? '"' + tags + '"' : tags;
}
}
tagField.value = tags;
}
}
function addEvent(elm, evType, fn, useCapture){
if (elm.addEventListener){
elm.addEventListener(evType, fn, useCapture);
return true;
} else if (elm.attachEvent) {
var r = elm.attachEvent('on' + evType, fn);
return r;
} else {
elm['on' + evType] = fn;
}
}
return{received:YQLreceived,init:init,config:cfg};
}();