-
Notifications
You must be signed in to change notification settings - Fork 1
/
amazon-notepad.user.js
109 lines (94 loc) · 3.33 KB
/
amazon-notepad.user.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
// ==UserScript==
// @name Amazon Notepad
// @namespace https://github.com/LeoDupont/userscripts
// @version 0.1
// @description Lets you annotate Amazon products. Uses localStorage.
// @author LeoDupont
// @match https://www.amazon.fr/*
// @match https://www.amazon.de/*
// @match https://www.amazon.es/*
// @match https://www.amazon.it/*
// @match https://www.amazon.nl/*
// @match https://www.amazon.se/*
// @match https://www.amazon.co.uk/*
// @match https://www.amazon.com/*
// @match https://www.amazon.ca/*
// @match https://www.amazon.mx/*
// @match https://www.amazon.br/*
// @match https://www.amazon.jp/*
// @match https://www.amazon.in/*
// @icon https://www.google.com/s2/favicons?sz=64&domain=amazon.fr
// @grant none
// @require https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js
// ==/UserScript==
////////////////////////////////////////////////////////////////////
// Amazon Notepad
//
// Displays a simple text input under the product's name
// * on product pages (always),
// * on search results pages (if notes were found).
//
// Notes are saved on 'change' event.
// => the input need to loose focus for the event to be triggered,
// => a simple Tab or a click away will do the job.
//
// Uses the browser's localStorage to store notes.
// => notes are not synced anywhere on the Internet.
////////////////////////////////////////////////////////////////////
var $ = window.$; // Declaration
(function() {
'use strict';
// === Product Page ===
var pageId = getProductIdFromUrl(document.URL);
if (pageId) {
var pageNotes = loadProductNotes(pageId);
showNotepad(pageId, pageNotes, '#titleSection');
}
// === Search Results Page ===
$('h2.a-size-mini > a.a-link-normal').each(function(i, elm) {
var productId = getProductIdFromUrl(elm.href);
if (productId) {
var productNotes = loadProductNotes(productId);
if (productNotes) {
showNotepad(productId, productNotes, $(elm).parent().parent());
}
}
});
})();
// =======================================================
// == Helpers
// =======================================================
function getProductIdFromUrl(url) {
var match = url.match(/\/(\w{10})/);
if (match) {
return match[1];
}
}
// =======================================================
// == UI
// =======================================================
function showNotepad(productId, value, elmToAppendTo) {
$('<input>')
.attr({
id: 'amazon-notepad-' + productId,
name: 'amazon-notepad',
style: 'width: 100%; margin: 10px 0; background-color: lightyellow;',
value: value,
placeholder: 'Amazon Notepad...',
})
.appendTo(elmToAppendTo)
.change(function(e) {
var newNotes = e.target.value;
console.log('[AMAZON NOTEPAD] Storing new notes for ' + productId + ': ' + newNotes);
saveProductNotes(productId, newNotes);
});
}
// =======================================================
// == Storage
// =======================================================
function loadProductNotes(productId) {
return localStorage.getItem('amazon-notepad-' + productId);
}
function saveProductNotes(productId, notes) {
localStorage.setItem('amazon-notepad-' + productId, notes);
}