-
Notifications
You must be signed in to change notification settings - Fork 0
/
2.js
143 lines (95 loc) · 3.44 KB
/
2.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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
$(document).ready(function(){
//console.log(document.URL.substring(0, 23));
if (document.URL.substring(0, 23) == "https://plus.googleapis" || document.URL.substring(0, 23) == "https://apis.google.com") {
flag = false;
if(inIframe() == true){
tryTimer = setInterval(attemptClick, 200);
}else{};
/*
setTimeout(doSomething, 100);
setTimeout(doSomething, 500);
setTimeout(doSomethingElse, 900);
setTimeout(doSomethingElse, 1300);
*/
}
function attemptClick(){
try{
sel = doSomething();
sel = doSomething();
doSomethingElse(sel);
doSomethingElse(sel);
flag = checkStatus();
}catch(e){console.log(e);
};
if(flag == true){
clearInterval(tryTimer);
}else{};
};
//function to be called to see if the change was successful. Uses brute force search because speed is not apperant to user.
function checkStatus(){
var el = $('div').filter(function(){return $(this).text() === 'Newest first';});
if(($(el).css('display') == 'inline-block') && (typeof($(el).css('display')) !== 'undefined')){
return true;
}else{return false;
};
};
function getElementByXpath(path) {
return document.evaluate(path, document, null, 9, null).singleNodeValue;
};
//actual mechanics of simulating the mouse click.
function dispatchMouseEvent(target, var_args) {
var e = document.createEvent("MouseEvents");
e.initEvent.apply(e, Array.prototype.slice.call(arguments, 1));
target.dispatchEvent(e);
};
function find1Elem(){
//attempt to find by a brute force search
var el = $('div').filter(function(){return $(this).text() === 'Top comments';});
//if that fails try the last known xpath
if(el.length == 0){
return getElementByXpath('//*[@id="widget_bounds"]/div[2]/div[4]/div[1]/div/div[1]/div/div[2]/div[1]');
}else{
return el[0];
}
};
function find2Elem(el1){
//attempt to find by looking in the children of the last found element
el = $(el1).parent().filter(function(){return $(this).text() === 'Newest first';});
//next, look by a brute force search
//disabled because it overrides the first method on the first couple of function calls
/*
if(el.length == 0){
el = $('div').filter(function(){return $(this).text() === 'Newest first';});
}*/
//if all of that fails try the last xpath
if(el.length == 0){
return getElementByXpath('/html/body/div[2]/div[2]');
}else{
return el[0];
}
};
//function to call the mouse click on the outer menu
function doSomething(){
var el = find1Elem()
dispatchMouseEvent(el, 'mouseover', true, true);
dispatchMouseEvent(el, 'mousedown', true, true);
dispatchMouseEvent(el, 'click', true, true);
dispatchMouseEvent(el, 'mouseup', true, true);
return el;
};
//then call the mouse click on the inner menu
function doSomethingElse(el1){
var el2 = find2Elem(el1);
dispatchMouseEvent(el2, 'mouseover', true, true);
dispatchMouseEvent(el2, 'mousedown', true, true);
dispatchMouseEvent(el2, 'click', true, true);
dispatchMouseEvent(el2, 'mouseup', true, true);
};
function inIframe () {
try {
return window.self !== window.top;
} catch (e) {
return true;
}
}
});