├── resources ├── sound │ └── alert.mp3 ├── img │ └── icons │ │ ├── 16x16.png │ │ ├── 19x19.png │ │ ├── 38x38.png │ │ ├── 48x48.png │ │ ├── help.png │ │ ├── icon.png │ │ ├── icon.psd │ │ └── 128x128.png ├── css │ ├── snellman.css │ └── style.css └── js │ ├── tmtools │ ├── analytics.js │ ├── background.js │ ├── main.js │ └── content.js │ └── jquery │ └── jquery-1.9.1.min.js ├── screenshots ├── 2_mainPage.png ├── 1_browseButton.png ├── 3_replayFeature.png ├── 4_filterByPlayer.png ├── 7_filterBySiteGame.png ├── 8_filterBySiteGameAll.png ├── 1_browseButton_1280x800.png ├── 6_filterBySiteFinished.png ├── 5_filterByPlayerAllSameLine.png └── 8_filterBySiteGameAll_1280_800.png ├── .gitattributes ├── .gitignore ├── manifest.json ├── README.md ├── main.html └── privacy_policy.md /resources/sound/alert.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafalimaz/TMTools/HEAD/resources/sound/alert.mp3 -------------------------------------------------------------------------------- /screenshots/2_mainPage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafalimaz/TMTools/HEAD/screenshots/2_mainPage.png -------------------------------------------------------------------------------- /resources/img/icons/16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafalimaz/TMTools/HEAD/resources/img/icons/16x16.png -------------------------------------------------------------------------------- /resources/img/icons/19x19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafalimaz/TMTools/HEAD/resources/img/icons/19x19.png -------------------------------------------------------------------------------- /resources/img/icons/38x38.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafalimaz/TMTools/HEAD/resources/img/icons/38x38.png -------------------------------------------------------------------------------- /resources/img/icons/48x48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafalimaz/TMTools/HEAD/resources/img/icons/48x48.png -------------------------------------------------------------------------------- /resources/img/icons/help.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafalimaz/TMTools/HEAD/resources/img/icons/help.png -------------------------------------------------------------------------------- /resources/img/icons/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafalimaz/TMTools/HEAD/resources/img/icons/icon.png -------------------------------------------------------------------------------- /resources/img/icons/icon.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafalimaz/TMTools/HEAD/resources/img/icons/icon.psd -------------------------------------------------------------------------------- /screenshots/1_browseButton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafalimaz/TMTools/HEAD/screenshots/1_browseButton.png -------------------------------------------------------------------------------- /resources/img/icons/128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafalimaz/TMTools/HEAD/resources/img/icons/128x128.png -------------------------------------------------------------------------------- /screenshots/3_replayFeature.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafalimaz/TMTools/HEAD/screenshots/3_replayFeature.png -------------------------------------------------------------------------------- /screenshots/4_filterByPlayer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafalimaz/TMTools/HEAD/screenshots/4_filterByPlayer.png -------------------------------------------------------------------------------- /screenshots/7_filterBySiteGame.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafalimaz/TMTools/HEAD/screenshots/7_filterBySiteGame.png -------------------------------------------------------------------------------- /screenshots/8_filterBySiteGameAll.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafalimaz/TMTools/HEAD/screenshots/8_filterBySiteGameAll.png -------------------------------------------------------------------------------- /screenshots/1_browseButton_1280x800.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafalimaz/TMTools/HEAD/screenshots/1_browseButton_1280x800.png -------------------------------------------------------------------------------- /screenshots/6_filterBySiteFinished.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafalimaz/TMTools/HEAD/screenshots/6_filterBySiteFinished.png -------------------------------------------------------------------------------- /screenshots/5_filterByPlayerAllSameLine.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafalimaz/TMTools/HEAD/screenshots/5_filterByPlayerAllSameLine.png -------------------------------------------------------------------------------- /screenshots/8_filterBySiteGameAll_1280_800.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rafalimaz/TMTools/HEAD/screenshots/8_filterBySiteGameAll_1280_800.png -------------------------------------------------------------------------------- /resources/css/snellman.css: -------------------------------------------------------------------------------- 1 | table.ledger { 2 | border-spacing: 0px; 3 | padding-bottom: 40px; 4 | white-space: nowrap; 5 | } 6 | 7 | table.ledger tr td { 8 | margin: 0px; 9 | font: 14px Verdana; 10 | } 11 | 12 | table.ledger tr td.ledger-delta { 13 | padding-left: 1ex; 14 | padding-right: 0.5ex; 15 | } 16 | 17 | table.ledger tr td.ledger-value { 18 | padding-right: 1ex; 19 | padding-left: 0.5ex; 20 | color: #888; 21 | } -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | 4 | # Custom for Visual Studio 5 | *.cs diff=csharp 6 | 7 | # Standard to msysgit 8 | *.doc diff=astextplain 9 | *.DOC diff=astextplain 10 | *.docx diff=astextplain 11 | *.DOCX diff=astextplain 12 | *.dot diff=astextplain 13 | *.DOT diff=astextplain 14 | *.pdf diff=astextplain 15 | *.PDF diff=astextplain 16 | *.rtf diff=astextplain 17 | *.RTF diff=astextplain 18 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Windows image file caches 2 | Thumbs.db 3 | ehthumbs.db 4 | 5 | # Folder config file 6 | Desktop.ini 7 | 8 | # Recycle Bin used on file shares 9 | $RECYCLE.BIN/ 10 | 11 | # Windows Installer files 12 | *.cab 13 | *.msi 14 | *.msm 15 | *.msp 16 | 17 | # Windows shortcuts 18 | *.lnk 19 | 20 | # ========================= 21 | # Operating System Files 22 | # ========================= 23 | 24 | # OSX 25 | # ========================= 26 | 27 | .DS_Store 28 | .AppleDouble 29 | .LSOverride 30 | 31 | # Thumbnails 32 | ._* 33 | 34 | # Files that might appear on external disk 35 | .Spotlight-V100 36 | .Trashes 37 | 38 | # Directories potentially created on remote AFP share 39 | .AppleDB 40 | .AppleDesktop 41 | Network Trash Folder 42 | Temporary Items 43 | .apdisk 44 | -------------------------------------------------------------------------------- /manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "TM Tools", 3 | "short_name": "TM Tools", 4 | "version": "1.0.6", 5 | "manifest_version": 2, 6 | "description" : "Some tools to help people who like Terra Mystica enjoy more from the Snellman's platform.", 7 | "icons": { "16": "resources/img/icons/16x16.png", "38": "resources/img/icons/38x38.png", "48": "resources/img/icons/48x48.png", "128": "resources/img/icons/128x128.png" }, 8 | 9 | "browser_action": { 10 | "default_icon": "resources/img/icons/icon.png", 11 | "default_title": "TM Tools", 12 | "default_popup": "main.html" 13 | }, 14 | 15 | "background": { 16 | "scripts": ["resources/js/jquery/jquery-1.9.1.min.js", "resources/js/tmtools/background.js"] 17 | }, 18 | 19 | "content_security_policy": "script-src 'self' https://ssl.google-analytics.com; object-src 'self'", 20 | 21 | "permissions": [ 22 | "storage" 23 | ], 24 | 25 | "content_scripts": [ 26 | { 27 | "matches": ["https://terra.snellman.net/*"], 28 | "js": ["resources/js/jquery/jquery-1.9.1.min.js", "resources/js/tmtools/content.js", "resources/js/canvasjs/canvasjs.min.js"], 29 | "css": ["resources/css/snellman.css"] 30 | } 31 | ] 32 | } -------------------------------------------------------------------------------- /resources/js/tmtools/analytics.js: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 | // Use of this source code is governed by a BSD-style license that can be 3 | // found in the LICENSE file. 4 | /** 5 | * Add your Analytics tracking ID here. 6 | */ 7 | //var _AnalyticsCode = 'UA-86751916-1'; //For Web Store tracking 8 | var _AnalyticsCode = 'UA-86751916-2'; //For Dev Mode tracking 9 | 10 | /** 11 | * Below is a modified version of the Google Analytics asynchronous tracking 12 | * code snippet. It has been modified to pull the HTTPS version of ga.js 13 | * instead of the default HTTP version. It is recommended that you use this 14 | * snippet instead of the standard tracking snippet provided when setting up 15 | * a Google Analytics account. 16 | */ 17 | var _gaq = _gaq || []; 18 | _gaq.push(['_setAccount', _AnalyticsCode]); 19 | _gaq.push(['_trackPageview']); 20 | 21 | function trackClick(e) { 22 | _gaq.push(['_trackEvent', e.target.id, 'clicked']); 23 | }; 24 | 25 | function trackHover(e) { 26 | _gaq.push(['_trackEvent', e.target.id, 'hover']); 27 | }; 28 | 29 | (function() { 30 | var ga = document.createElement('script'); 31 | ga.type = 'text/javascript'; 32 | ga.async = true; 33 | ga.src = 'https://ssl.google-analytics.com/ga.js'; 34 | var s = document.getElementsByTagName('script')[0]; 35 | s.parentNode.insertBefore(ga, s); 36 | 37 | document.getElementById('playLink').addEventListener('click', trackClick); 38 | 39 | document.getElementById('helpOptions').addEventListener('mouseover', trackHover); 40 | document.getElementById('helpFilterBySite').addEventListener('mouseover', trackHover); 41 | document.getElementById('helpFilterByPlayer').addEventListener('mouseover', trackHover); 42 | 43 | document.getElementById('donateLink').addEventListener('click', trackClick); 44 | document.getElementById('donateLink').addEventListener('mouseover', trackHover); 45 | })(); -------------------------------------------------------------------------------- /resources/css/style.css: -------------------------------------------------------------------------------- 1 | body { 2 | overflow: hidden; 3 | margin: 0px; 4 | padding: 0px; 5 | background: white; 6 | width: 800px; 7 | } 8 | 9 | .options { 10 | width: 640px; 11 | float: left; 12 | height: 40px; 13 | } 14 | 15 | .label-sound-update { 16 | margin: 2px; 17 | } 18 | 19 | .label-sound-update input { 20 | width:29px; 21 | } 22 | 23 | .label-sound-update span{ 24 | margin-left:2px; 25 | } 26 | 27 | .filter { 28 | height: 30px; 29 | } 30 | 31 | #playerName { 32 | width: 80px; 33 | } 34 | 35 | .play { 36 | width: 108px; 37 | height: 40px; 38 | float: left; 39 | } 40 | 41 | .play a { 42 | margin-left: 28px; 43 | } 44 | 45 | .factions { 46 | float: right; 47 | display: inline-block; 48 | } 49 | 50 | .factions div { 51 | cursor: pointer; 52 | text-align: center; 53 | padding: 1px 3px; 54 | font-family: sans-serif; 55 | font-size: 1em; 56 | width: 100px; 57 | margin-top: 1px; 58 | border: 1px solid black; 59 | } 60 | 61 | .factions div:first-child { 62 | margin-top: 0px; 63 | } 64 | 65 | .factions div:hover { 66 | text-decoration: underline; 67 | } 68 | 69 | .factions label { 70 | margin: 10px; 71 | } 72 | 73 | .statistics { 74 | width: 640px; 75 | height: 432px; 76 | float: left; 77 | } 78 | 79 | .statistics #chartContainer { 80 | height: 340px; 81 | width: 100%; 82 | } 83 | 84 | .statistics span{ 85 | display: block; 86 | visibility: hidden; 87 | } 88 | 89 | .red { 90 | color: rgb(0, 0, 0); background-color: rgb(240, 128, 128); 91 | } 92 | 93 | .black { 94 | color: rgb(192, 192, 192); background-color: rgb(64, 64, 64); 95 | } 96 | 97 | .green { 98 | color: rgb(0, 0, 0); background-color: rgb(128, 240, 128); 99 | } 100 | 101 | .yellow { 102 | color: rgb(0, 0, 0); background-color: rgb(240, 240, 128); 103 | } 104 | 105 | .brown { 106 | color: rgb(0, 0, 0); background-color: rgb(176, 128, 64); 107 | } 108 | 109 | .gray { 110 | color: rgb(0, 0, 0); background-color: rgb(192, 192, 192); 111 | } 112 | 113 | .blue { 114 | color: rgb(0, 0, 0); background-color: rgb(96, 192, 240); 115 | } 116 | 117 | .orange{ 118 | color: rgb(0, 0, 0); background-color: rgb(240, 192, 96); 119 | } 120 | 121 | .white{ 122 | color: rgb(0, 0, 0); background-color: rgb(224, 240, 255); 123 | } 124 | 125 | .neutral{ 126 | color: rgb(0, 0, 0); background-color: rgb(255, 235, 205); 127 | } 128 | 129 | .transparent { 130 | color: inherit; 131 | } 132 | 133 | input[type=checkbox]{ 134 | position:relative; 135 | top:2px 136 | } 137 | 138 | .footer a { 139 | font-size: 10px; 140 | } -------------------------------------------------------------------------------- /resources/js/tmtools/background.js: -------------------------------------------------------------------------------- 1 | function loadCounter(){ 2 | chrome.storage.local.get('token', function (result) { 3 | if (result.token) { 4 | getCounter(result.token); 5 | } else { 6 | chrome.tabs.query({"active": true}, function(tabs) { 7 | var tabId = tabs[0].id; 8 | chrome.tabs.sendMessage(tabId, {type: 'csrf-token'}, getCounter); 9 | }); 10 | } 11 | }); 12 | } 13 | 14 | var audio; 15 | function getCounter(token) 16 | { 17 | if(token){ 18 | chrome.storage.local.set({'token': token}); 19 | } else { 20 | return; 21 | } 22 | 23 | $.ajax({ 24 | type: 'GET', 25 | url: "https://terra.snellman.net/app/list-games?mode=user&status=running&csrf-token=" + token, 26 | success: function(jsonObj) 27 | { 28 | var count = 0; 29 | var link = "https://terra.snellman.net"; 30 | var games = jsonObj.games; 31 | chrome.storage.local.get('alert', function (result) { 32 | for (var i = 0; i < games.length; i++){ 33 | if(games[i].action_required == 1 || games[i].unread_chat_messages > 0){ 34 | count += 1; 35 | if(count == 1){ 36 | link += games[i].link; 37 | if(!audio) { 38 | audio = new Audio("resources/sound/alert.mp3"); 39 | } 40 | if(result.alert == undefined || result.alert){ 41 | audio.play(); 42 | } 43 | } 44 | } 45 | } 46 | 47 | if(audio && count == 0){ 48 | audio.pause(); 49 | } 50 | chrome.storage.local.set({'playLink': link }); 51 | chrome.browserAction.setBadgeText({text: count.toString()}); 52 | }); 53 | }, 54 | error: function(data) { 55 | console.log("Error getting games. " + data); 56 | chrome.browserAction.setBadgeText({text: 'Error'}); 57 | chrome.storage.local.remove("token"); 58 | } 59 | }); 60 | } 61 | 62 | var alertInterval; 63 | function updateSound(){ 64 | if(alertInterval) { 65 | clearInterval(alertInterval); 66 | } 67 | chrome.storage.local.get('soundUpdate', function (result) { 68 | var soundUpdate = (result.soundUpdate == undefined ? 30 : result.soundUpdate); 69 | alertInterval = setInterval(function(){ loadCounter(); }, parseInt(soundUpdate) * 1000); 70 | }); 71 | } 72 | 73 | chrome.extension.onMessage.addListener( 74 | function(request, sender, sendResponse) { 75 | switch (request.directive) { 76 | case "popup-click": 77 | if(audio && request.stopSound){ 78 | audio.pause(); 79 | } 80 | sendResponse({}); 81 | break; 82 | case "update-sound": 83 | updateSound(); 84 | sendResponse({}); 85 | break; 86 | default: 87 | alert("Unmatched request of '" + request + "' from script to background.js from " + sender); 88 | } 89 | } 90 | ); 91 | 92 | $(document).ready(function() { 93 | chrome.browserAction.setBadgeText({text: "..."}); 94 | updateSound(); 95 | }); -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # TMTools 2 | 3 | **TMTools** is a helpfull chrome extension for Snellman's Terra Mystica moderator [website](http://terra.snellman.net). Its is designed to provide some features which are still not implemented on original website like more sound alerts and more flexible filters. Also provides some graphs and statistics to help newcomers evaluate their overall improvement on the game. If you have suggestions, doubts or other stuff just contact [me](https://github.com/rafalimaz) 4 | 5 | ### Motivation 6 | 7 | The main motivation for building this extension was the need to improve my gameplay. I started to see games from best players of the site and one day I saw a very interesting game from the known great player [Xevoc](http://terra.snellman.net/player/Xevoc), the [Petri20](http://terra.snellman.net/game/Petri20). In this game he crossed the 200VP barrier and for me that was the best that I could reach. As my objective was study only his moves I created a simple script (javascript) to filter the log. So that helped me a lot to improve my overall gameplay with [Engineers](http://www.terra-mystica-spiel.de/en/voelker.php?show=8) (I went from an average of 110VP to a respectable 174VP on a 3 player [game](http://terra.snellman.net/game/TheInvestors)) 8 | 9 | ### Installation 10 | 11 | ##### Chrome Web Store 12 | 13 | In order to use TMTools just install the extension from [Chrome Web Store](https://chrome.google.com/webstore/detail/tm-tools/jandhnpfekgdcklcgfcljmijgbgnchni) 14 | 15 | ##### Development Mode 16 | 17 | It is possible to use TMTools without install the extension through Chrome Web Store. It is only need to download TMTools zip [Last Release] (https://api.github.com/repos/rafalimaz/tmtools/zipball) and do the steps as follows: 18 | 19 | 1. Extract the contents somewhere 20 | 2. In Chrome, open [extensions](chrome://extensions/) `chrome://extensions/` 21 | 3. Click + Developer mode 22 | 4. Click Load unpacked extension… 23 | 5. Navigate to the extracted folder and click OK `..\TMTools-{version}\TMTools-{version}` 24 | 6. Log into Terra Mystica [website](http://terra.snellman.net) `http://terra.snellman.net/` 25 | 7. An active games counter should appear on browser 26 | 27 | ### Main features 28 | 29 | #### Main page 30 | * The main page of the extension has all features and links. It was designed that way to make easily find features and settings. It can be seen on the following picture: 31 | 32 |  33 | 34 | #### Filter games and graphics 35 | * **By player**: User should open the extension, provide a player name and click on some faction. It will show match data on a graph. 36 | 37 |  38 | 39 | * **By site** (finished games): User should open a finished games page of some player that shows a list with all games played. After this, the user should open the extension. By clicking on a faction it will filter that list showing only games for this specific faction. Also a graph is showed with these games. 40 | 41 |  42 | 43 | * **By site** (game log): User should open a game (active or finished). After this, the user should open the extension. By clicking on a faction that is current in play it will filter the log showing only moves from that faction. Also a graph is showed with these moves and score history for that faction. 44 | 45 |  46 | 47 | #### Browser Notification 48 | * A **counter** of the games which it is the player's turn appears on the extension browser button. Also there is a **go to site** link that opens the first opened game for the player. 49 | 50 |  51 | 52 | #### Sound Alert 53 | * If enabled, a **sound alert** will play every time there are some games which is the player's turn according to the update rate set (default is 30 seconds). 54 | 55 | ### Known Issues 56 | * If user removes (unpacked) source files after installing the plugin, Chrome disables the plugin because the manifest file becomes unavailable. Users should keep source files. Thanks [Konush](http://terra.snellman.net/player/konush) 57 | 58 | ### Changelog 59 | 60 | ##### 1.0.6 Last Moves (2017-09-15) 61 | * Added last moves to game page 62 | * Some fixes on graphs (max and min value) 63 | * Added help icons and improved tooltips 64 | 65 | ##### 1.0.5 Filter games by opponent (2016-11-09) 66 | * Fixed a bug on replay feature 67 | 68 | ##### 1.0.4 Filter games by opponent (2016-11-09) 69 | * Added markers representing rounds and win/lose on graphs 70 | * Added opponent' filter on profile user page 71 | * Added first and last links to replay area 72 | * Improvements on replay feature 73 | 74 | ##### 1.0.3 Filter by faction on replay (2016-11-02) 75 | * Added replay filter by faction 76 | * Added paypal donate button 77 | * Added analytics tracking code for developer mode 78 | * Added analytics support 79 | * Added TMTools to Chrome Web Store 80 | 81 | ##### 1.0.2 Replay Improvement (2016-11-01) 82 | * Added more info on replay area as suggested by ttchong 83 | * Fixed a bug on counter caused by chrome API update 84 | 85 | ##### 1.0.1 Fix on counter (2015-12-31) 86 | * Fixed bug on counter reported by CTKShadow 87 | 88 | ##### 1.0 Replay function (2015-01-22) 89 | * Added replay feature with prev/next buttons 90 | 91 | ##### 0.9 Initial version (2015-01-19) 92 | * Added main features like counter, filters, graphs and sound alert 93 | 94 | ### Useful Links 95 | * [BGG Discussion](http://boardgamegeek.com/thread/1305425/tmtools-chrome-extension-snellman-site) 96 | * [Snellman's website](http://terra.snellman.net) 97 | * [TM AI](http://lodev.org/tmai/) 98 | * [Terra Mystica Strategy Guide](http://boardgamegeek.com/filepage/104541/terra-mystica-strategy-reference-guide) 99 | 100 | 101 | ### Credits 102 | Terra Mystica is a trademark of [Feuerland Spiele](http://www.feuerland-spiele.de/en/). Terra Mystica website was created by [Juho Snellman](https://www.snellman.net/). TMTools extension was created by [Rafael de Lima](https://github.com/rafalimaz) 103 | 104 | 105 | 106 | 107 | 108 | 109 | -------------------------------------------------------------------------------- /main.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 |Last updated: April 12, 2022
4 |This Privacy Policy describes Our policies and procedures on the collection, use and disclosure of Your information when You use the Service and tells You about Your privacy rights and how the law protects You.
5 |We use Your Personal data to provide and improve the Service. By using the Service, You agree to the collection and use of information in accordance with this Privacy Policy. This Privacy Policy has been created with the help of the Privacy Policy Template.
6 |The words of which the initial letter is capitalized have meanings defined under the following conditions. The following definitions shall have the same meaning regardless of whether they appear in singular or in plural.
9 |For the purposes of this Privacy Policy:
11 |Account means a unique account created for You to access our Service or parts of our Service.
14 |Company (referred to as either "the Company", "We", "Us" or "Our" in this Agreement) refers to TM Tools Chrome Extension.
17 |Cookies are small files that are placed on Your computer, mobile device or any other device by a website, containing the details of Your browsing history on that website among its many uses.
20 |Country refers to: California, United States
23 |Device means any device that can access the Service such as a computer, a cellphone or a digital tablet.
26 |Personal Data is any information that relates to an identified or identifiable individual.
29 |Service refers to the Website.
32 |Service Provider means any natural or legal person who processes the data on behalf of the Company. It refers to third-party companies or individuals employed by the Company to facilitate the Service, to provide the Service on behalf of the Company, to perform services related to the Service or to assist the Company in analyzing how the Service is used.
35 |Usage Data refers to data collected automatically, either generated by the use of the Service or from the Service infrastructure itself (for example, the duration of a page visit).
38 |Website refers to TM Tools Chrome Extension, accessible from https://github.com/rafalimaz/TMTools
41 |You means the individual accessing or using the Service, or the company, or other legal entity on behalf of which such individual is accessing or using the Service, as applicable.
44 |While using Our Service, We may ask You to provide Us with certain personally identifiable information that can be used to contact or identify You. Personally identifiable information may include, but is not limited to:
50 |Usage Data is collected automatically when using the Service.
55 |Usage Data may include information such as Your Device's Internet Protocol address (e.g. IP address), browser type, browser version, the pages of our Service that You visit, the time and date of Your visit, the time spent on those pages, unique device identifiers and other diagnostic data.
56 |When You access the Service by or through a mobile device, We may collect certain information automatically, including, but not limited to, the type of mobile device You use, Your mobile device unique ID, the IP address of Your mobile device, Your mobile operating system, the type of mobile Internet browser You use, unique device identifiers and other diagnostic data.
57 |We may also collect information that Your browser sends whenever You visit our Service or when You access the Service by or through a mobile device.
58 |We use Cookies and similar tracking technologies to track the activity on Our Service and store certain information. Tracking technologies used are beacons, tags, and scripts to collect and track information and to improve and analyze Our Service. The technologies We use may include:
60 |Cookies can be "Persistent" or "Session" Cookies. Persistent Cookies remain on Your personal computer or mobile device when You go offline, while Session Cookies are deleted as soon as You close Your web browser. Learn more about cookies: Cookies by PrivacyPolicies Generator.
66 |We use both Session and Persistent Cookies for the purposes set out below:
67 |Necessary / Essential Cookies
70 |Type: Session Cookies
71 |Administered by: Us
72 |Purpose: These Cookies are essential to provide You with services available through the Website and to enable You to use some of its features. They help to authenticate users and prevent fraudulent use of user accounts. Without these Cookies, the services that You have asked for cannot be provided, and We only use these Cookies to provide You with those services.
73 |Cookies Policy / Notice Acceptance Cookies
76 |Type: Persistent Cookies
77 |Administered by: Us
78 |Purpose: These Cookies identify if users have accepted the use of cookies on the Website.
79 |Functionality Cookies
82 |Type: Persistent Cookies
83 |Administered by: Us
84 |Purpose: These Cookies allow us to remember choices You make when You use the Website, such as remembering your login details or language preference. The purpose of these Cookies is to provide You with a more personal experience and to avoid You having to re-enter your preferences every time You use the Website.
85 |For more information about the cookies we use and your choices regarding cookies, please visit our Cookies Policy or the Cookies section of our Privacy Policy.
88 |The Company may use Personal Data for the following purposes:
90 |To provide and maintain our Service, including to monitor the usage of our Service.
93 |To manage Your Account: to manage Your registration as a user of the Service. The Personal Data You provide can give You access to different functionalities of the Service that are available to You as a registered user.
96 |For the performance of a contract: the development, compliance and undertaking of the purchase contract for the products, items or services You have purchased or of any other contract with Us through the Service.
99 |To contact You: To contact You by email, telephone calls, SMS, or other equivalent forms of electronic communication, such as a mobile application's push notifications regarding updates or informative communications related to the functionalities, products or contracted services, including the security updates, when necessary or reasonable for their implementation.
102 |To provide You with news, special offers and general information about other goods, services and events which we offer that are similar to those that you have already purchased or enquired about unless You have opted not to receive such information.
105 |To manage Your requests: To attend and manage Your requests to Us.
108 |For business transfers: We may use Your information to evaluate or conduct a merger, divestiture, restructuring, reorganization, dissolution, or other sale or transfer of some or all of Our assets, whether as a going concern or as part of bankruptcy, liquidation, or similar proceeding, in which Personal Data held by Us about our Service users is among the assets transferred.
111 |For other purposes: We may use Your information for other purposes, such as data analysis, identifying usage trends, determining the effectiveness of our promotional campaigns and to evaluate and improve our Service, products, services, marketing and your experience.
114 |We may share Your personal information in the following situations:
117 |The Company will retain Your Personal Data only for as long as is necessary for the purposes set out in this Privacy Policy. We will retain and use Your Personal Data to the extent necessary to comply with our legal obligations (for example, if we are required to retain your data to comply with applicable laws), resolve disputes, and enforce our legal agreements and policies.
127 |The Company will also retain Usage Data for internal analysis purposes. Usage Data is generally retained for a shorter period of time, except when this data is used to strengthen the security or to improve the functionality of Our Service, or We are legally obligated to retain this data for longer time periods.
128 |Your information, including Personal Data, is processed at the Company's operating offices and in any other places where the parties involved in the processing are located. It means that this information may be transferred to — and maintained on — computers located outside of Your state, province, country or other governmental jurisdiction where the data protection laws may differ than those from Your jurisdiction.
130 |Your consent to this Privacy Policy followed by Your submission of such information represents Your agreement to that transfer.
131 |The Company will take all steps reasonably necessary to ensure that Your data is treated securely and in accordance with this Privacy Policy and no transfer of Your Personal Data will take place to an organization or a country unless there are adequate controls in place including the security of Your data and other personal information.
132 |If the Company is involved in a merger, acquisition or asset sale, Your Personal Data may be transferred. We will provide notice before Your Personal Data is transferred and becomes subject to a different Privacy Policy.
135 |Under certain circumstances, the Company may be required to disclose Your Personal Data if required to do so by law or in response to valid requests by public authorities (e.g. a court or a government agency).
137 |The Company may disclose Your Personal Data in the good faith belief that such action is necessary to:
139 |The security of Your Personal Data is important to Us, but remember that no method of transmission over the Internet, or method of electronic storage is 100% secure. While We strive to use commercially acceptable means to protect Your Personal Data, We cannot guarantee its absolute security.
148 |Our Service does not address anyone under the age of 13. We do not knowingly collect personally identifiable information from anyone under the age of 13. If You are a parent or guardian and You are aware that Your child has provided Us with Personal Data, please contact Us. If We become aware that We have collected Personal Data from anyone under the age of 13 without verification of parental consent, We take steps to remove that information from Our servers.
150 |If We need to rely on consent as a legal basis for processing Your information and Your country requires consent from a parent, We may require Your parent's consent before We collect and use that information.
151 |Our Service may contain links to other websites that are not operated by Us. If You click on a third party link, You will be directed to that third party's site. We strongly advise You to review the Privacy Policy of every site You visit.
153 |We have no control over and assume no responsibility for the content, privacy policies or practices of any third party sites or services.
154 |We may update Our Privacy Policy from time to time. We will notify You of any changes by posting the new Privacy Policy on this page.
156 |We will let You know via email and/or a prominent notice on Our Service, prior to the change becoming effective and update the "Last updated" date at the top of this Privacy Policy.
157 |You are advised to review this Privacy Policy periodically for any changes. Changes to this Privacy Policy are effective when they are posted on this page.
158 |If you have any questions about this Privacy Policy, You can contact us:
160 || Replay [First|Prev|Next|Last] | ' + lastLogTD + "
| t |