move standalone projects into own directory
This commit is contained in:
9
projects/_standalone/tig-spy/src/tig_spy/Background.hx
Normal file
9
projects/_standalone/tig-spy/src/tig_spy/Background.hx
Normal file
@@ -0,0 +1,9 @@
|
||||
package tig_spy;
|
||||
|
||||
import kiss.Prelude;
|
||||
import kiss_firefox.API;
|
||||
import haxe.Constraints;
|
||||
import tig_spy.Message;
|
||||
|
||||
@:build(kiss.Kiss.build())
|
||||
class Background {}
|
||||
22
projects/_standalone/tig-spy/src/tig_spy/Background.kiss
Normal file
22
projects/_standalone/tig-spy/src/tig_spy/Background.kiss
Normal file
@@ -0,0 +1,22 @@
|
||||
(var &mut :Array<String> collectedAuthors [])
|
||||
(var &mut :Array<String> pages [])
|
||||
|
||||
(function sendNextPage [:Function sendResponse]
|
||||
(awaitLet [tabs (API.browser.tabs.query (object active true))
|
||||
&sync id .id (first tabs)]
|
||||
(if pages
|
||||
(API.browser.tabs.sendMessage id (object type "nextPage" data [(pages.shift)]))
|
||||
(API.browser.tabs.sendMessage id (object type "authorList" data collectedAuthors)))))
|
||||
|
||||
(API.browser.runtime.onMessage.addListener ->[:Message message sender sendResponse]
|
||||
(let [:Function sendResponse sendResponse]
|
||||
(case message
|
||||
((object type "authors" data authors)
|
||||
(set collectedAuthors (collectedAuthors.concat authors))
|
||||
(sendNextPage sendResponse))
|
||||
((object type "pages" data pageUrls)
|
||||
(set collectedAuthors [])
|
||||
(set pages pageUrls)
|
||||
(sendResponse ""))
|
||||
(never otherwise))
|
||||
true))
|
||||
7
projects/_standalone/tig-spy/src/tig_spy/Main.hx
Normal file
7
projects/_standalone/tig-spy/src/tig_spy/Main.hx
Normal file
@@ -0,0 +1,7 @@
|
||||
package tig_spy;
|
||||
|
||||
class Main {
|
||||
static function main() {
|
||||
Main_.main();
|
||||
}
|
||||
}
|
||||
96
projects/_standalone/tig-spy/src/tig_spy/Main_.kiss
Normal file
96
projects/_standalone/tig-spy/src/tig_spy/Main_.kiss
Normal file
@@ -0,0 +1,96 @@
|
||||
(import kiss_firefox.API)
|
||||
(import js.lib.Promise)
|
||||
(import tig_spy.Message)
|
||||
|
||||
(var :Dynamic document js.Lib.global.document)
|
||||
(var :Dynamic window js.Lib.global.window)
|
||||
|
||||
(function p [text]
|
||||
(let [element (document.createElement "p")]
|
||||
(set element.innerHTML text)
|
||||
element))
|
||||
|
||||
(let [analyticsDiv (document.createElement "div")]
|
||||
(document.body.prepend analyticsDiv)
|
||||
(set Prelude.printStr ->s (analyticsDiv.appendChild (p s))))
|
||||
|
||||
(function postElements [:Dynamic document]
|
||||
(let [postTable (.item (document.getElementsByClassName "bordercolor") 0)
|
||||
postTableBody (postTable.children.item 0)
|
||||
tableRows (for i (range postTableBody.children.length) (postTableBody.children.item i))]
|
||||
// There is an empty row at the end:
|
||||
(tableRows.pop)
|
||||
tableRows))
|
||||
|
||||
(function postAuthors [:Dynamic document]
|
||||
(API.browser.runtime.sendMessage
|
||||
(object
|
||||
type "authors"
|
||||
data
|
||||
(for [idx post] (enumerate (postElements document))
|
||||
(let [links (post.getElementsByTagName "a")
|
||||
userLink (links.item (min idx 1))]
|
||||
userLink.innerHTML)))))
|
||||
|
||||
(function printPostStats [:Array<String> authors]
|
||||
(let [:String subjectLine .innerHTML (document.getElementById "top_subject")
|
||||
lastLeftParenIndex (subjectLine.lastIndexOf "(")
|
||||
lastRightParenIndex (subjectLine.lastIndexOf ")")
|
||||
[Read n times] (.split (substr subjectLine lastLeftParenIndex lastRightParenIndex) " ")]
|
||||
(print "$n views"))
|
||||
|
||||
(let [op (first authors)
|
||||
:Map<String,Bool> repliers (new Map)
|
||||
&mut updates 0
|
||||
&mut replies 0]
|
||||
(doFor author authors
|
||||
(cond
|
||||
((= op author)
|
||||
(+= updates 1))
|
||||
(true
|
||||
(dictSet repliers author true)
|
||||
(+= replies 1))))
|
||||
(print "$updates updates by OP")
|
||||
(print "$replies replies by $(count repliers) followers")))
|
||||
|
||||
(cond
|
||||
((StringTools.endsWith window.location.href ".0")
|
||||
(let [analyticsLink (document.createElement "a")]
|
||||
(analyticsLink.addEventListener "click"
|
||||
->:Void {
|
||||
(let [:String url
|
||||
window.location.href
|
||||
urlWithoutStartingPost0
|
||||
(substr url 0 -1)
|
||||
postsPerPage
|
||||
20
|
||||
navPageElements
|
||||
(document.getElementsByClassName "navPages")
|
||||
numPages
|
||||
(if (< 0 navPageElements.length)
|
||||
(Std.parseInt .innerHTML (nth navPageElements (- navPageElements.length 1)))
|
||||
1)]
|
||||
|
||||
(awaitLet [_
|
||||
(API.browser.runtime.sendMessage
|
||||
(object
|
||||
type "pages"
|
||||
data (for page (range 1 numPages) "${urlWithoutStartingPost0}$(* page postsPerPage)")))]
|
||||
(postAuthors document)))
|
||||
})
|
||||
(set analyticsLink.innerHTML "Run analytics")
|
||||
(document.body.prepend analyticsLink)))
|
||||
(true
|
||||
(window.addEventListener "load"
|
||||
->:Void (postAuthors document))))
|
||||
|
||||
(API.browser.runtime.onMessage.addListener
|
||||
->[:Message message sender sendResponse] {
|
||||
(case message
|
||||
((object type "nextPage" data [pageUrl])
|
||||
(set window.location.href pageUrl))
|
||||
((object type "authorList" data authors)
|
||||
(printPostStats authors))
|
||||
(never otherwise))
|
||||
true
|
||||
})
|
||||
6
projects/_standalone/tig-spy/src/tig_spy/Message.hx
Normal file
6
projects/_standalone/tig-spy/src/tig_spy/Message.hx
Normal file
@@ -0,0 +1,6 @@
|
||||
package tig_spy;
|
||||
|
||||
typedef Message = {
|
||||
type:String,
|
||||
data:Array<String>
|
||||
};
|
||||
Reference in New Issue
Block a user