locatine 0.0092 → 0.00463
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/locatine/search.rb +25 -85
- data/lib/locatine/version.rb +7 -1
- data/lib/locatine.rb +1 -2
- metadata +2 -11
- data/lib/locatine/app/background.js +0 -9
- data/lib/locatine/app/content.css +0 -40
- data/lib/locatine/app/content.js +0 -94
- data/lib/locatine/app/devtools.html +0 -1
- data/lib/locatine/app/devtools.js +0 -3
- data/lib/locatine/app/manifest.json +0 -20
- data/lib/locatine/app/popup.css +0 -41
- data/lib/locatine/app/popup.html +0 -17
- data/lib/locatine/app/popup.js +0 -50
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 3f5d7a3f44e75991451c83cc507561dc4a1c7f06
|
|
4
|
+
data.tar.gz: 88aaf2612d0f3d4b0a56b2fa1ef6cb830eddd790
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 967f585713d8557bf164013ba74fb804d55b1628d5f2057b450873b3107027cd36f9ef7db48e0f0e1741a92296518a879748adf0c0c075f02d3df87c4a474414
|
|
7
|
+
data.tar.gz: 387240a6229f98260bb3ce3f64a6bcfc8f0e6eae856c8bb579a870d92be2193ae5acab128dd194d86545e7342ef88dbb2abca2b6a295a4719c3d25ab22252d3d
|
data/lib/locatine/search.rb
CHANGED
|
@@ -2,31 +2,27 @@ require "watir"
|
|
|
2
2
|
require "json"
|
|
3
3
|
require "fileutils"
|
|
4
4
|
require "chromedriver-helper"
|
|
5
|
+
require "pry"
|
|
5
6
|
|
|
6
7
|
module Locatine
|
|
7
8
|
|
|
8
9
|
##
|
|
9
10
|
# Search is the main class of the Locatine
|
|
10
11
|
#
|
|
11
|
-
# Locatine can
|
|
12
|
+
# Locatine can dance.
|
|
12
13
|
class Search
|
|
13
14
|
|
|
14
15
|
attr_accessor :data, :depth, :browser, :learn, :json, :stability_limit, :scope
|
|
15
16
|
|
|
16
17
|
##
|
|
17
|
-
# Creates a new instance of
|
|
18
|
+
# Creates a new instance of Dance
|
|
18
19
|
#
|
|
19
20
|
# Params:
|
|
20
21
|
# +json+ is the name of file to store//read data. Default => "./Locatine_files/default.json"
|
|
21
|
-
#
|
|
22
22
|
# +depth+ is the value that shows how many data will be stored for element.
|
|
23
|
-
#
|
|
24
23
|
# +browser+ is the instance of Watir::Browser. Unless provided it gonna be created with locatine-app onboard.
|
|
25
|
-
#
|
|
26
24
|
# +learn+ shows will locatine ask for assistance from user or will fail on error. learn is true when LEARN parameter is set in environment.
|
|
27
|
-
#
|
|
28
25
|
# +stability_limit+ shows max times attribute should be present to consider it trusted.
|
|
29
|
-
#
|
|
30
26
|
# +scope+ will be used in search (if not provided) defaulkt is "Default"
|
|
31
27
|
def initialize(json: "./Locatine_files/default.json",
|
|
32
28
|
depth: 3,
|
|
@@ -53,30 +49,14 @@ module Locatine
|
|
|
53
49
|
# Looking for the element
|
|
54
50
|
#
|
|
55
51
|
# Params:
|
|
56
|
-
#
|
|
57
52
|
# +scope+ is a parameter that is used to get information about the element from @data. Default is "Default"
|
|
58
|
-
#
|
|
59
53
|
# +name+ is a parameter that is used to get information about the element from @data. Must not be nil.
|
|
60
|
-
#
|
|
61
54
|
# +exact+ if true locatine will be forced to use only basic search. Default is false
|
|
62
|
-
#
|
|
63
55
|
# +locator+ if not empty it is used for the first attempt to find the element. Default is {}
|
|
64
|
-
#
|
|
65
56
|
# +vars+ hash of variables that will be used for dynamic attributes. See readme for example
|
|
66
|
-
#
|
|
67
57
|
# +look_in+ only elements of that kind will be used. Use Watir::Browser methods returning collections (:text_fields, :links, :divs, etc.)
|
|
68
|
-
#
|
|
69
58
|
# +iframe+ if provided locatine will look for elements inside of it
|
|
70
|
-
def find(simple_name = nil,
|
|
71
|
-
name: nil,
|
|
72
|
-
scope: nil,
|
|
73
|
-
exact: false,
|
|
74
|
-
locator: {},
|
|
75
|
-
vars: {},
|
|
76
|
-
look_in: nil,
|
|
77
|
-
iframe: nil,
|
|
78
|
-
return_locator: false,
|
|
79
|
-
collection: false)
|
|
59
|
+
def find(simple_name = nil, name: nil, scope: nil, exact: false, locator: {}, vars: {}, look_in: nil, iframe: nil, return_locator: false)
|
|
80
60
|
name ||= simple_name
|
|
81
61
|
raise ArgumentError, ":name should be provided" if !name
|
|
82
62
|
@type = look_in
|
|
@@ -94,18 +74,15 @@ module Locatine
|
|
|
94
74
|
end
|
|
95
75
|
end
|
|
96
76
|
result, attributes = ask(scope, name, result, vars) if @learn
|
|
97
|
-
raise RuntimeError, "Nothing was found for #{scope} #{name}" if !result
|
|
98
|
-
if
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
else
|
|
103
|
-
return nil
|
|
104
|
-
end
|
|
77
|
+
raise RuntimeError, "Nothing was found for #{scope} #{name}" if !result
|
|
78
|
+
attributes = generate_data(result, vars) if !attributes
|
|
79
|
+
@type = nil
|
|
80
|
+
store(attributes, scope, name)
|
|
81
|
+
return return_locator ? {xpath: generate_xpath(attributes, vars)} : to_subtype(result)
|
|
105
82
|
end
|
|
106
83
|
|
|
107
84
|
##
|
|
108
|
-
# Find alias with return_locator
|
|
85
|
+
# Find alias with return_locator enforced
|
|
109
86
|
def lctr(*args)
|
|
110
87
|
if args.last.class == Hash
|
|
111
88
|
args.last[:return_locator] = true
|
|
@@ -115,12 +92,6 @@ module Locatine
|
|
|
115
92
|
find(args)
|
|
116
93
|
end
|
|
117
94
|
|
|
118
|
-
##
|
|
119
|
-
# Find alias with collection option enforced
|
|
120
|
-
def collect(*args)
|
|
121
|
-
enforce(:collection, true, *args)
|
|
122
|
-
end
|
|
123
|
-
|
|
124
95
|
private
|
|
125
96
|
|
|
126
97
|
##
|
|
@@ -142,18 +113,6 @@ module Locatine
|
|
|
142
113
|
end
|
|
143
114
|
end
|
|
144
115
|
|
|
145
|
-
def enforce(what, value, *args)
|
|
146
|
-
if args.last.class == Hash
|
|
147
|
-
args.last[what] = value
|
|
148
|
-
find(*args)
|
|
149
|
-
else
|
|
150
|
-
temp = Hash.new
|
|
151
|
-
temp[what] = value
|
|
152
|
-
args.push(temp)
|
|
153
|
-
find(*args)
|
|
154
|
-
end
|
|
155
|
-
end
|
|
156
|
-
|
|
157
116
|
def engine
|
|
158
117
|
return (@iframe || @browser)
|
|
159
118
|
end
|
|
@@ -201,12 +160,7 @@ module Locatine
|
|
|
201
160
|
end
|
|
202
161
|
|
|
203
162
|
def get_trusted(array)
|
|
204
|
-
|
|
205
|
-
max_stability = (array.max_by {|i| i["stability"].to_i})["stability"].to_i
|
|
206
|
-
return (array.select {|i| i["stability"].to_i == max_stability}).uniq
|
|
207
|
-
else
|
|
208
|
-
return []
|
|
209
|
-
end
|
|
163
|
+
return (array.select {|i| i["stability"].to_i == (array.max_by {|i| i["stability"].to_i})["stability"].to_i}).uniq
|
|
210
164
|
end
|
|
211
165
|
|
|
212
166
|
def generate_xpath(data, vars)
|
|
@@ -262,8 +216,7 @@ module Locatine
|
|
|
262
216
|
@cold_time = timeout
|
|
263
217
|
raise RuntimeError, "Locatine is unable to find element #{name} in #{scope}" if all.length == 0
|
|
264
218
|
# Something esoteric here :)
|
|
265
|
-
|
|
266
|
-
suggestion = (all.select {|i| all.count(i) == max}).uniq
|
|
219
|
+
suggestion = (all.select {|i| all.count(i) == all.count(all.max_by {|i| all.count(i)})}).uniq
|
|
267
220
|
attributes = generate_data(suggestion, vars)
|
|
268
221
|
return suggestion, attributes
|
|
269
222
|
end
|
|
@@ -319,15 +272,12 @@ module Locatine
|
|
|
319
272
|
end
|
|
320
273
|
end
|
|
321
274
|
|
|
322
|
-
def set_title(text)
|
|
323
|
-
puts text
|
|
324
|
-
send_to_app("locatinetitle", text)
|
|
325
|
-
end
|
|
326
|
-
|
|
327
275
|
##
|
|
328
276
|
# Sending request to locatine app
|
|
329
277
|
def start_listening(scope, name)
|
|
330
278
|
send_to_app("locatinestyle", "blocked", @browser) if @iframe
|
|
279
|
+
puts "You are defining #{name} in #{scope}" # TODO send to app
|
|
280
|
+
send_to_app("locatinetitle", "You are defining #{name} in #{scope}.")
|
|
331
281
|
send_to_app("locatinehint", "Toggle single//collection mode button if you need. If you want to do some actions on the page toggle Locatine waiting button. You also can select element on devtools -> Elements. Do not forget to confirm your selection.")
|
|
332
282
|
send_to_app("locatinestyle", "set_true")
|
|
333
283
|
sleep 0.5
|
|
@@ -343,17 +293,15 @@ module Locatine
|
|
|
343
293
|
all = all + find_by_locator({xpath: "//*[@*[contains(., '#{part}')]]"}).to_a
|
|
344
294
|
end
|
|
345
295
|
if all.length>0
|
|
346
|
-
|
|
347
|
-
guess = (all.select {|i| all.count(i) == max}).uniq
|
|
296
|
+
guess = (all.select {|i| all.count(i) == all.count(all.max_by {|i| all.count(i)})}).uniq
|
|
348
297
|
guess_data = generate_data(guess, vars)
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
set_title "Locatine has no good guess for #{name} in #{scope}. Try to change the name. Or just define it."
|
|
298
|
+
if (engine.elements.length/find_by_data(guess_data, vars).length <=4)
|
|
299
|
+
puts "Locatine has no good guess for #{name} in #{scope}. Try to change the name. Or just define it."
|
|
352
300
|
guess = nil
|
|
353
301
|
guess_data = {}
|
|
354
302
|
end
|
|
355
303
|
else
|
|
356
|
-
|
|
304
|
+
puts "Locatine has no guess for #{name} in #{scope}. Try to change the name. Or just define it."
|
|
357
305
|
end
|
|
358
306
|
@cold_time = timeout
|
|
359
307
|
return guess, guess_data.to_h
|
|
@@ -367,8 +315,7 @@ module Locatine
|
|
|
367
315
|
if !element.nil?
|
|
368
316
|
attributes = generate_data(element, vars)
|
|
369
317
|
else
|
|
370
|
-
|
|
371
|
-
element, attributes = find_by_guess(scope, name, vars) if name.length >= 5
|
|
318
|
+
element, attributes = find_by_guess(scope, name, vars)
|
|
372
319
|
end
|
|
373
320
|
while !finished do
|
|
374
321
|
sleep 0.1
|
|
@@ -388,17 +335,13 @@ module Locatine
|
|
|
388
335
|
if old_element != element
|
|
389
336
|
mass_highlight_turn(old_element, false) if old_element
|
|
390
337
|
mass_highlight_turn(element) if element
|
|
391
|
-
|
|
392
|
-
set_title "Nothing is selected as #{name} in #{scope}"
|
|
393
|
-
else
|
|
394
|
-
set_title "#{element.length} elements were selected as #{name} in #{scope}. If it is correct - confirm the selection."
|
|
395
|
-
end
|
|
338
|
+
puts "#{element.length} elemens were selected as #{name} in #{scope}"
|
|
396
339
|
end
|
|
397
340
|
old_element, old_tag, old_index = element, tag, index
|
|
398
341
|
case get_from_app("locatineconfirmed")
|
|
399
342
|
when "true"
|
|
400
343
|
send_to_app("locatineconfirmed", "ok")
|
|
401
|
-
send_to_app("locatinetitle", "
|
|
344
|
+
send_to_app("locatinetitle", "You are defining nothing. So no button will work")
|
|
402
345
|
send_to_app("locatinehint", "Place for a smart hint here")
|
|
403
346
|
finished = true
|
|
404
347
|
when "declined"
|
|
@@ -586,14 +529,11 @@ module Locatine
|
|
|
586
529
|
#
|
|
587
530
|
# Params:
|
|
588
531
|
# +result+ must be Watir::HTMLElementCollection or Array
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
when true
|
|
532
|
+
def to_subtype(result)
|
|
533
|
+
if result.size == 1
|
|
534
|
+
return result[0].to_subtype
|
|
535
|
+
else
|
|
594
536
|
return result
|
|
595
|
-
when false
|
|
596
|
-
return result.first.to_subtype
|
|
597
537
|
end
|
|
598
538
|
end
|
|
599
539
|
end
|
data/lib/locatine/version.rb
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
module Locatine
|
|
2
2
|
# constants here...
|
|
3
|
-
|
|
3
|
+
generator = Random.new 42
|
|
4
|
+
versions = []
|
|
5
|
+
1000.times do
|
|
6
|
+
versions.push generator.rand.round(5)
|
|
7
|
+
end
|
|
8
|
+
ITERATION = 0
|
|
9
|
+
VERSION = versions.sort[ITERATION].to_s
|
|
4
10
|
NAME = "locatine"
|
|
5
11
|
HOME = File.readable?("#{Dir.pwd}/lib/#{Locatine::NAME}")? "#{Dir.pwd}/lib/#{Locatine::NAME}" : "#{Gem.dir}/gems/#{Locatine::NAME}-#{Locatine::VERSION}/lib/#{Locatine::NAME}"
|
|
6
12
|
end
|
data/lib/locatine.rb
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
require "locatine/version"
|
|
1
|
+
Dir.glob("./lib/locatine/*.rb").each {|it| require it}
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: locatine
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: '0.
|
|
4
|
+
version: '0.00463'
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Sergei Seleznev
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2019-03-
|
|
11
|
+
date: 2019-03-01 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|
|
@@ -115,15 +115,6 @@ extensions: []
|
|
|
115
115
|
extra_rdoc_files: []
|
|
116
116
|
files:
|
|
117
117
|
- lib/locatine.rb
|
|
118
|
-
- lib/locatine/app/background.js
|
|
119
|
-
- lib/locatine/app/content.css
|
|
120
|
-
- lib/locatine/app/content.js
|
|
121
|
-
- lib/locatine/app/devtools.html
|
|
122
|
-
- lib/locatine/app/devtools.js
|
|
123
|
-
- lib/locatine/app/manifest.json
|
|
124
|
-
- lib/locatine/app/popup.css
|
|
125
|
-
- lib/locatine/app/popup.html
|
|
126
|
-
- lib/locatine/app/popup.js
|
|
127
118
|
- lib/locatine/search.rb
|
|
128
119
|
- lib/locatine/version.rb
|
|
129
120
|
homepage: https://github.com/sseleznevqa/locatine
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
@keyframes locatine_found {
|
|
2
|
-
0% {border: 4px dashed #6495ED;}
|
|
3
|
-
20% {border: 4px dashed #FF7F50;}
|
|
4
|
-
40% {border: 4px dashed #8FBC8F;}
|
|
5
|
-
60% {border: 4px dashed #FFA500;}
|
|
6
|
-
80% {border: 4px dashed #DDA0DD;}
|
|
7
|
-
100% {border: 4px dashed #6495ED;}
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
div[locatinestyle=true] {
|
|
11
|
-
position:fixed;
|
|
12
|
-
padding:0;
|
|
13
|
-
margin:0;
|
|
14
|
-
top:0;
|
|
15
|
-
left:0;
|
|
16
|
-
opacity: 0;
|
|
17
|
-
background: black;
|
|
18
|
-
height: 100%;
|
|
19
|
-
width: 100%;
|
|
20
|
-
pointer-events: visible;
|
|
21
|
-
display: block;
|
|
22
|
-
z-index: 2147483646;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
div[locatinestyle=false] {
|
|
26
|
-
height: 0%;
|
|
27
|
-
width: 0%;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
div[locatinestyle=blocked] {
|
|
31
|
-
height: 0%;
|
|
32
|
-
width: 0%;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
[locatineclass=foundbylocatine]
|
|
36
|
-
{animation: locatine_found 6s infinite;
|
|
37
|
-
-webkit-appearance: none;
|
|
38
|
-
-moz-appearance: none;
|
|
39
|
-
appearance: none;
|
|
40
|
-
}
|
data/lib/locatine/app/content.js
DELETED
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
async function set_value(name, value){
|
|
2
|
-
let temp = {};
|
|
3
|
-
temp[name] = value;
|
|
4
|
-
await chrome.storage.sync.set(temp, function() {});
|
|
5
|
-
};
|
|
6
|
-
|
|
7
|
-
async function get_value(name) {
|
|
8
|
-
let x = await new Promise((resolve, reject) => chrome.storage.sync.get([name], resolve));
|
|
9
|
-
return x[name];
|
|
10
|
-
};
|
|
11
|
-
|
|
12
|
-
document.addEventListener("locatine_send", async function(e) {
|
|
13
|
-
await set_value(e.detail.varname, e.detail.varvalue);
|
|
14
|
-
});
|
|
15
|
-
|
|
16
|
-
async function refreshData(){
|
|
17
|
-
if (!document.getElementById("locatine_magic_div")){
|
|
18
|
-
const options = {
|
|
19
|
-
"locatineclass": "locatine_smthing",
|
|
20
|
-
"id":"locatine_magic_div",
|
|
21
|
-
"locatinestyle": await get_value('magic_div') || "false",
|
|
22
|
-
"locatinetitle": "ok",
|
|
23
|
-
"locatinehint": "ok"
|
|
24
|
-
};
|
|
25
|
-
locatine_create_element(document.body, "div", options, "");
|
|
26
|
-
} else {
|
|
27
|
-
const magicDiv = document.getElementById("locatine_magic_div");
|
|
28
|
-
if (magicDiv.getAttribute("locatinestyle") === "set_true") {
|
|
29
|
-
await set_value('magic_div', true);
|
|
30
|
-
magicDiv.setAttribute("locatinestyle", "true");
|
|
31
|
-
};
|
|
32
|
-
if (magicDiv.getAttribute("locatinetitle") != "ok") {
|
|
33
|
-
await set_value('locatine_title', magicDiv.getAttribute("locatinetitle"));
|
|
34
|
-
await set_value('locatine_hint', magicDiv.getAttribute("locatinehint"));
|
|
35
|
-
magicDiv.setAttribute("locatinetitle", "ok");
|
|
36
|
-
}
|
|
37
|
-
let status = await get_value('magic_div');
|
|
38
|
-
if (magicDiv.getAttribute("locatinestyle") != "set_true"){
|
|
39
|
-
magicDiv.setAttribute("locatinestyle", status);
|
|
40
|
-
}
|
|
41
|
-
magicDiv.setAttribute("locatinecollection", await get_value("locatine_collection"))
|
|
42
|
-
if (magicDiv.getAttribute("locatineconfirmed") === "ok") {
|
|
43
|
-
magicDiv.removeAttribute("tag");
|
|
44
|
-
magicDiv.removeAttribute("index");
|
|
45
|
-
await set_value("locatine_confirm", false);
|
|
46
|
-
await set_value('magic_div', false);
|
|
47
|
-
}
|
|
48
|
-
const confirmed = await get_value('locatine_confirm');
|
|
49
|
-
magicDiv.setAttribute("locatineconfirmed", confirmed);
|
|
50
|
-
};
|
|
51
|
-
const magic_cover = document.getElementById('locatine_magic_div');
|
|
52
|
-
magic_cover.onclick = function(e) {locatine_magic_click(e)};
|
|
53
|
-
};
|
|
54
|
-
|
|
55
|
-
function getSelected(value){
|
|
56
|
-
const tagName = value.tagName;
|
|
57
|
-
const array = Array.prototype.slice.call( document.getElementsByTagName(tagName) );
|
|
58
|
-
const index = array.indexOf(value);
|
|
59
|
-
document.getElementById("locatine_magic_div").setAttribute("tag", tagName);
|
|
60
|
-
document.getElementById("locatine_magic_div").setAttribute("index", index);
|
|
61
|
-
};
|
|
62
|
-
|
|
63
|
-
function locatine_magic_click(e) {
|
|
64
|
-
document.getElementById("locatine_magic_div").setAttribute("locatinestyle", "blocked");
|
|
65
|
-
const value = document.elementFromPoint(e.clientX, e.clientY);
|
|
66
|
-
document.getElementById("locatine_magic_div").setAttribute("locatinestyle", "true");
|
|
67
|
-
const tagName = value.tagName;
|
|
68
|
-
const array = Array.prototype.slice.call( document.getElementsByTagName(tagName) );
|
|
69
|
-
const index = array.indexOf(value);
|
|
70
|
-
document.getElementById("locatine_magic_div").setAttribute("TAG", tagName);
|
|
71
|
-
document.getElementById("locatine_magic_div").setAttribute("INDEX", index);
|
|
72
|
-
};
|
|
73
|
-
|
|
74
|
-
function locatine_create_element(dom, tag, attrs, inner) {
|
|
75
|
-
const element = document.createElement(tag);
|
|
76
|
-
dom.appendChild(element);
|
|
77
|
-
for (var key in attrs) {
|
|
78
|
-
element.setAttribute(key, attrs[key])
|
|
79
|
-
};
|
|
80
|
-
element.innerHTML = inner;
|
|
81
|
-
return element;
|
|
82
|
-
};
|
|
83
|
-
|
|
84
|
-
//set_value('magic_div','off');
|
|
85
|
-
|
|
86
|
-
setInterval(async function(){
|
|
87
|
-
if (document.getElementById("locatine_magic_div")) {
|
|
88
|
-
if (document.getElementById("locatine_magic_div").getAttribute("locatinestyle") != "blocked") {
|
|
89
|
-
await refreshData()
|
|
90
|
-
}
|
|
91
|
-
} else {
|
|
92
|
-
await refreshData()
|
|
93
|
-
}
|
|
94
|
-
}, 100);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<script src="devtools.js"></script>
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "Locatine app",
|
|
3
|
-
"version": "0.0092",
|
|
4
|
-
"description": "Messaging from browser to main app",
|
|
5
|
-
"devtools_page": "devtools.html",
|
|
6
|
-
"permissions": ["activeTab", "storage", "contextMenus", "tabs"],
|
|
7
|
-
"background": {
|
|
8
|
-
"scripts": ["background.js"],
|
|
9
|
-
"persistent": true
|
|
10
|
-
},
|
|
11
|
-
"content_scripts": [{
|
|
12
|
-
"matches": ["<all_urls>"],
|
|
13
|
-
"all_frames": true,
|
|
14
|
-
"js": ["content.js"],
|
|
15
|
-
"css": ["content.css"]
|
|
16
|
-
}],
|
|
17
|
-
"browser_action": {
|
|
18
|
-
"default_title": "Locatine"},
|
|
19
|
-
"manifest_version": 2
|
|
20
|
-
}
|
data/lib/locatine/app/popup.css
DELETED
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
.button {
|
|
2
|
-
border: none;
|
|
3
|
-
height: 30px;
|
|
4
|
-
width: 100%;
|
|
5
|
-
color: white;
|
|
6
|
-
padding: 5px 32px;
|
|
7
|
-
text-align: center;
|
|
8
|
-
text-decoration: none;
|
|
9
|
-
display: inline-block;
|
|
10
|
-
font-size: 16px;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
.green {
|
|
14
|
-
background-color: #4CAF50
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
.red {
|
|
18
|
-
background-color: #AF4C50
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
.blue {
|
|
22
|
-
background-color: #4C50AF
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
.header {
|
|
26
|
-
padding: 10px 5px 10px 5px;
|
|
27
|
-
text-align: center;
|
|
28
|
-
color: black;
|
|
29
|
-
font-size: 25px;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
.hint {
|
|
33
|
-
padding: 10px 5px 10px 5px;
|
|
34
|
-
text-align: center;
|
|
35
|
-
background-color: #EFFA93;
|
|
36
|
-
box-shadow: 5px 5px 5px;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
.block {
|
|
40
|
-
padding: 30px 5px 30px 5px;
|
|
41
|
-
}
|
data/lib/locatine/app/popup.html
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
<html>
|
|
3
|
-
<head>
|
|
4
|
-
<link rel="stylesheet" href="popup.css">
|
|
5
|
-
</head>
|
|
6
|
-
<body>
|
|
7
|
-
<h2 class="header" id="mainTitle">Right now you are defining nothing. So no button will work</h2>
|
|
8
|
-
<h3 class="hint" id="hint">But you can click it anyway :)</h3>
|
|
9
|
-
<div class="block">
|
|
10
|
-
<input class="blue button" id="watchSwitch" type="button" value="Do not watch"/>
|
|
11
|
-
<input class="blue button" id="mode" type="button" value="Adding mode is enabled"/>
|
|
12
|
-
<input class="red button" id="clearMark" type="button" value="Clear selection"/>
|
|
13
|
-
<input class="green button" id="confirm" type="button" value="Confirm selection"/>
|
|
14
|
-
</div>
|
|
15
|
-
<script src="popup.js"></script>
|
|
16
|
-
</body>
|
|
17
|
-
</html>
|
data/lib/locatine/app/popup.js
DELETED
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
async function get_value(name) {
|
|
2
|
-
let x = await new Promise((resolve, reject) => chrome.storage.sync.get([name], resolve));
|
|
3
|
-
return x[name];
|
|
4
|
-
};
|
|
5
|
-
|
|
6
|
-
async function set_value(name, value){
|
|
7
|
-
let temp = {};
|
|
8
|
-
temp[name] = value;
|
|
9
|
-
await chrome.storage.sync.set(temp, function() {});
|
|
10
|
-
};
|
|
11
|
-
|
|
12
|
-
async function correct_buttons() {
|
|
13
|
-
if (await get_value("magic_div") === true) {
|
|
14
|
-
document.getElementById("watchSwitch").setAttribute("value", "Locatine is waiting for click");
|
|
15
|
-
} else {
|
|
16
|
-
document.getElementById("watchSwitch").setAttribute("value", "Locatine is not waiting now");
|
|
17
|
-
};
|
|
18
|
-
if (await get_value("locatine_collection") === true) {
|
|
19
|
-
document.getElementById("mode").setAttribute("value", "You are in collection mode")
|
|
20
|
-
} else {
|
|
21
|
-
document.getElementById("mode").setAttribute("value", "You are in single selection mode")
|
|
22
|
-
};
|
|
23
|
-
document.getElementById("mainTitle").innerText = await get_value("locatine_title");
|
|
24
|
-
document.getElementById("hint").innerText = await get_value("locatine_hint");
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
async function watch() {
|
|
28
|
-
await set_value("magic_div", !(await get_value("magic_div")));
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
function clear() {
|
|
32
|
-
set_value("locatine_confirm", "declined");
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
function confirm() {
|
|
36
|
-
set_value("locatine_confirm", true);
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
async function mode() {
|
|
40
|
-
await set_value("locatine_collection", !(await get_value("locatine_collection")));
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
document.getElementById("watchSwitch").onclick = function() {watch()};
|
|
44
|
-
document.getElementById("clearMark").onclick = function() {clear()};
|
|
45
|
-
document.getElementById("confirm").onclick = function() {confirm()};
|
|
46
|
-
document.getElementById("mode").onclick = function() {mode()};
|
|
47
|
-
|
|
48
|
-
setInterval(function(){
|
|
49
|
-
correct_buttons();
|
|
50
|
-
}, 100);
|