diff --git a/_locales/en/messages.json b/_locales/en/messages.json
index 1747985..476b392 100644
--- a/_locales/en/messages.json
+++ b/_locales/en/messages.json
@@ -145,5 +145,23 @@
},
"empty": {
"message": "Empty"
+ },
+ "cut": {
+ "message": "Cut"
+ },
+ "copy": {
+ "message": "Copy"
+ },
+ "paste": {
+ "message": "Paste"
+ },
+ "clipboard": {
+ "message": "Clipboard"
+ },
+ "select": {
+ "message": "Select"
+ },
+ "dragAndDrop": {
+ "message": "Drag & Drop"
}
}
diff --git a/assets/icons/128.png b/assets/icons/128.png
new file mode 100644
index 0000000..5b6d179
Binary files /dev/null and b/assets/icons/128.png differ
diff --git a/assets/icons/128.png~ b/assets/icons/128.png~
new file mode 100644
index 0000000..14227f9
Binary files /dev/null and b/assets/icons/128.png~ differ
diff --git a/assets/icons/16.png b/assets/icons/16.png
new file mode 100644
index 0000000..1030059
Binary files /dev/null and b/assets/icons/16.png differ
diff --git a/assets/icons/16.png~ b/assets/icons/16.png~
new file mode 100644
index 0000000..5b6d179
Binary files /dev/null and b/assets/icons/16.png~ differ
diff --git a/assets/icons/32.png b/assets/icons/32.png
new file mode 100644
index 0000000..512eee1
Binary files /dev/null and b/assets/icons/32.png differ
diff --git a/assets/icons/32.png~ b/assets/icons/32.png~
new file mode 100644
index 0000000..14227f9
Binary files /dev/null and b/assets/icons/32.png~ differ
diff --git a/assets/icons/48.png b/assets/icons/48.png
new file mode 100644
index 0000000..b28b42e
Binary files /dev/null and b/assets/icons/48.png differ
diff --git a/assets/icons/48.png~ b/assets/icons/48.png~
new file mode 100644
index 0000000..14227f9
Binary files /dev/null and b/assets/icons/48.png~ differ
diff --git a/content-scripts.js b/content-scripts.js
index a8dc3f5..f90b153 100644
--- a/content-scripts.js
+++ b/content-scripts.js
@@ -38,10 +38,10 @@ function prevent(event) {
var data = JSON.parse(SETTINGS.data[key]);
if (
- data.key === HID.key &&
- data.shiftKey === HID.shiftKey &&
- data.ctrlKey === HID.ctrlKey &&
- data.altKey === HID.altKey &&
+ (data.key === HID.key || isset(data.key) === false) &&
+ (data.shiftKey === HID.shiftKey || isset(data.shiftKey) === false) &&
+ (data.ctrlKey === HID.ctrlKey || isset(data.ctrlKey) === false) &&
+ (data.altKey === HID.altKey || isset(data.altKey) === false) &&
data.click === HID.click &&
data.context === HID.context &&
data.wheel === HID.wheel
@@ -202,9 +202,75 @@ window.addEventListener('mouseup', function(event) {
}
}, true);
+window.addEventListener('cut', function(event) {
+ if (SETTINGS.data.cut !== false) {
+ event.stopPropagation();
+ }
+}, true);
+
+window.addEventListener('copy', function(event) {
+ if (SETTINGS.data.copy !== false) {
+ console.log('COPY', event);
+ event.stopPropagation();
+ }
+}, true);
+
+window.addEventListener('paste', function(event) {
+ if (SETTINGS.data.paste !== false) {
+ event.stopPropagation();
+ }
+}, true);
+
+window.addEventListener('select', function(event) {
+ if (SETTINGS.data.select !== false) {
+ event.stopPropagation();
+ }
+}, true);
+
+window.addEventListener('drag', function(event) {
+ if (SETTINGS.data.drag_and_drop !== false) {
+ event.stopPropagation();
+ }
+}, true);
+
+window.addEventListener('dragend', function(event) {
+ if (SETTINGS.data.drag_and_drop !== false) {
+ event.stopPropagation();
+ }
+}, true);
+
+window.addEventListener('dragenter', function(event) {
+ if (SETTINGS.data.drag_and_drop !== false) {
+ event.stopPropagation();
+ }
+}, true);
+
+window.addEventListener('dragstart', function(event) {
+ if (SETTINGS.data.drag_and_drop !== false) {
+ event.stopPropagation();
+ }
+}, true);
+
+window.addEventListener('dragleave', function(event) {
+ if (SETTINGS.data.drag_and_drop !== false) {
+ event.stopPropagation();
+ }
+}, true);
+
+window.addEventListener('dragover', function(event) {
+ if (SETTINGS.data.drag_and_drop !== false) {
+ event.stopPropagation();
+ }
+}, true);
+
+window.addEventListener('drop', function(event) {
+ if (SETTINGS.data.drag_and_drop !== false) {
+ event.stopPropagation();
+ }
+}, true);
+
/*window.addEventListener('dbclick', prevent, true);
-window.addEventListener('mousemove', prevent, true);
-window.addEventListener('select', prevent, true);*/
+window.addEventListener('mousemove', prevent, true);*/
/*---------------------------------------------------------------
diff --git a/manifest.json b/manifest.json
index e4f6387..e2460a8 100644
--- a/manifest.json
+++ b/manifest.json
@@ -1,7 +1,13 @@
{
"manifest_version": 2,
"name": "HID control prevention",
- "version": "0.61",
+ "version": "1.0",
+ "icons": {
+ "16": "assets/icons/16.png",
+ "32": "assets/icons/32.png",
+ "48": "assets/icons/48.png",
+ "128": "assets/icons/128.png"
+ },
"default_locale": "en",
diff --git a/popup/popup.js b/popup/popup.js
index 5968e5b..f752387 100644
--- a/popup/popup.js
+++ b/popup/popup.js
@@ -9,15 +9,14 @@
/*---------------------------------------------------------------
1.0 OBJECT
---------------------------------------------------------------*/
-
var Menu = {
header: {
type: 'header',
-
+
section_start: {
type: 'section',
class: 'satus-section--align-start',
-
+
go_back: {
type: 'button',
class: 'satus-button--back',
@@ -34,14 +33,14 @@ var Menu = {
section_end: {
type: 'section',
class: 'satus-section--align-end',
-
+
button_vert: {
type: 'button',
icon: '',
onClickRender: {
type: 'dialog',
class: 'satus-dialog--vertical-menu',
-
+
rate_us: {
type: 'folder',
before: '',
@@ -70,18 +69,18 @@ var Menu = {
var self = (this === window ? document.querySelector('.satus-main') : this),
item = self.history[self.history.length - 1],
id = item.appearanceKey;
-
+
if (!Satus.isset(container)) {
container = document.querySelector('.satus-main__container');
}
-
+
document.querySelector('.satus-text--title').innerText = Satus.locale.getMessage(this.history[this.history.length - 1].label) || 'HID control prevention';
document.body.dataset.appearance = id;
container.dataset.appearance = id;
}
},
-
+
tooltip: {
type: 'section',
class: 'satus-section--tooltip',
@@ -91,10 +90,10 @@ var Menu = {
value: true
}
},
-
+
section: {
type: 'section',
-
+
filters: {
type: 'folder',
label: 'filters',
@@ -106,19 +105,19 @@ var Menu = {
label: 'websites',
before: '',
appearanceKey: 'websites',
-
+
section: {
type: 'section',
-
+
onrender: function() {
var data = satus.storage.get('websites') || {},
list = {};
-
+
for (var key in data) {
list[key] = {
type: 'folder',
label: key,
-
+
section: {
type: 'section',
class: 'satus-section--shortcuts',
@@ -127,12 +126,12 @@ var Menu = {
var data = satus.storage.get(this.storage_key) || {},
list = {},
length = 0;
-
+
for (var key in data) {
list[key] = {
type: 'section',
class: 'satus-section--row',
-
+
shortcut: {
type: 'shortcut',
storage_key: this.storage_key + key
@@ -144,19 +143,19 @@ var Menu = {
storage_key: this.storage_key + key,
onclick: function() {
satus.storage.set(this.storage_key, undefined);
-
+
this.parentNode.style.height = 0;
-
- setTimeout(function(){
+
+ setTimeout(function() {
this.parentNode.remove();
}, .2);
}
}
};
-
+
length++;
}
-
+
if (length > 0) {
satus.render(list, this);
} else {
@@ -173,7 +172,7 @@ var Menu = {
footer: {
type: 'div',
class: 'satus-div--create',
-
+
button: {
type: 'shortcut',
class: 'satus-shortcut--create',
@@ -185,7 +184,7 @@ var Menu = {
}
};
}
-
+
if (Object.keys(list).length > 0) {
satus.render(list, this);
} else {
@@ -503,7 +502,7 @@ var Menu = {
}
}
},
-
+
made_with_love: {
type: 'text',
class: 'made-with-love',
@@ -522,10 +521,10 @@ var Menu = {
function init(response) {
HOSTNAME = response || '';
-
+
satus.storage.import(function() {
var language = satus.storage.get('language') || 'en';
-
+
satus.locale.import('../_locales/' + language + '/messages.json', function() {
satus.modules.updateStorageKeys(Menu, function() {
if (HOSTNAME === '') {
@@ -538,70 +537,118 @@ function init(response) {
Menu.main.tooltip.enable.label = HOSTNAME;
Menu.main.tooltip.enable.storage_key = 'websites/' + HOSTNAME + '/enabled';
}
-
+
if (HOSTNAME !== '') {
Menu.main.section.filters.tabs = {
type: 'tabs',
-
+
global: {
type: 'tab',
label: 'global',
-
+
+ section_00: {
+ type: 'section',
+
+ clipboard: {
+ type: 'folder',
+ label: 'clipboard',
+
+ section: {
+ type: 'section',
+
+ cut: {
+ type: 'switch',
+ label: 'cut',
+ value: true,
+ storage_key: 'global/cut'
+ },
+ copy: {
+ type: 'switch',
+ label: 'copy',
+ value: true,
+ storage_key: 'global/copy'
+ },
+ paste: {
+ type: 'switch',
+ label: 'paste',
+ value: true,
+ storage_key: 'global/paste'
+ }
+ }
+ },
+ select: {
+ type: 'switch',
+ label: 'select',
+ value: true,
+ storage_key: 'global/select'
+ },
+ drag_and_drop: {
+ type: 'switch',
+ label: 'dragAndDrop',
+ value: true,
+ storage_key: 'global/drag_and_drop'
+ }
+ },
+
section: {
type: 'section',
class: 'satus-section--shortcuts global',
onrender: function() {
var data = satus.storage.get('global') || {},
- list = {},
- length = 0;
-
- for (var key in data) {
- list[key] = {
- type: 'section',
- class: 'satus-section--row',
-
- shortcut: {
+ list = {
+ search: {
type: 'shortcut',
- storage_key: 'global/' + key
- },
- remove: {
- type: 'button',
- class: 'satus-button--remove',
- before: '',
- storage_key: 'global/' + key,
- onclick: function() {
- satus.storage.set(this.storage_key, undefined);
-
- this.parentNode.style.height = 0;
-
- setTimeout(function(){
- this.parentNode.remove();
- }, .2);
- }
+ value: {
+ key: "f",
+ keyCode: 70,
+ shiftKey: false,
+ ctrlKey: true,
+ altKey: false,
+ click: false,
+ context: false,
+ wheel: false
+ },
+ storage_key: 'global/search'
}
};
-
- length++;
- }
-
- if (length > 0) {
- satus.render(list, this);
- } else {
- satus.render({
- type: 'text',
- label: 'empty',
- style: {
- margin: '0 16px'
- }
- }, this);
+
+ for (var key in data) {
+ if (['cut', 'copy', 'paste', 'select', 'drag_and_drop'].indexOf(key) === -1) {
+ list[key] = {
+ type: 'section',
+ class: 'satus-section--row',
+
+ shortcut: {
+ type: 'shortcut',
+ storage_key: 'global/' + key
+ },
+ remove: {
+ type: 'button',
+ class: 'satus-button--remove',
+ before: '',
+ storage_key: 'global/' + key,
+ onclick: function() {
+ satus.storage.set(this.storage_key, undefined);
+
+ this.parentNode.style.height = 0;
+
+ setTimeout(function() {
+ this.parentNode.remove();
+ }, 200);
+ }
+ }
+ };
+ }
}
+
+ satus.render(list, this);
}
}
},
current: {
type: 'tab',
label: 'current',
-
+
section: {
type: 'section',
class: 'satus-section--shortcuts',
@@ -609,12 +656,12 @@ function init(response) {
var data = satus.storage.get('websites/' + HOSTNAME + '/items') || {},
list = {},
length = 0;
-
+
for (var key in data) {
list[key] = {
type: 'section',
class: 'satus-section--row',
-
+
shortcut: {
type: 'shortcut',
storage_key: 'websites/' + HOSTNAME + '/items/' + key
@@ -626,19 +673,19 @@ function init(response) {
storage_key: 'websites/' + HOSTNAME + '/items/' + key,
onclick: function() {
satus.storage.set(this.storage_key, undefined);
-
+
this.parentNode.style.height = 0;
-
- setTimeout(function(){
+
+ setTimeout(function() {
this.parentNode.remove();
}, .2);
}
}
};
-
+
length++;
}
-
+
if (length > 0) {
satus.render(list, this);
} else {
@@ -660,63 +707,111 @@ function init(response) {
class: 'satus-section--label',
label: 'global'
};
-
+
+ Menu.main.section.filters.section_00 = {
+ type: 'section',
+
+ clipboard: {
+ type: 'folder',
+ label: 'clipboard',
+
+ section: {
+ type: 'section',
+
+ cut: {
+ type: 'switch',
+ label: 'cut',
+ value: true,
+ storage_key: 'global/cut'
+ },
+ copy: {
+ type: 'switch',
+ label: 'copy',
+ value: true,
+ storage_key: 'global/copy'
+ },
+ paste: {
+ type: 'switch',
+ label: 'paste',
+ value: true,
+ storage_key: 'global/paste'
+ }
+ }
+ },
+ select: {
+ type: 'switch',
+ label: 'select',
+ value: true,
+ storage_key: 'global/select'
+ },
+ drag_and_drop: {
+ type: 'switch',
+ label: 'dragAndDrop',
+ value: true,
+ storage_key: 'global/drag_and_drop'
+ }
+ };
+
Menu.main.section.filters.section = {
type: 'section',
- class: 'satus-section--shortcuts',
+ class: 'satus-section--shortcuts global',
onrender: function() {
var data = satus.storage.get('global') || {},
- list = {},
- length = 0;
-
- for (var key in data) {
- list[key] = {
- type: 'section',
- class: 'satus-section--row',
-
- shortcut: {
+ list = {
+ search: {
type: 'shortcut',
- storage_key: 'global/' + key
- },
- remove: {
- type: 'button',
- class: 'satus-button--remove',
- before: '',
- storage_key: 'global/' + key,
- onclick: function() {
- satus.storage.set(this.storage_key, undefined);
-
- this.parentNode.style.height = 0;
-
- setTimeout(function(){
- this.parentNode.remove();
- }, .2);
- }
+ value: {
+ key: "f",
+ keyCode: 70,
+ shiftKey: false,
+ ctrlKey: true,
+ altKey: false,
+ click: false,
+ context: false,
+ wheel: false
+ },
+ storage_key: 'global/search'
}
};
-
- length++;
- }
-
- if (length > 0) {
- satus.render(list, this);
- } else {
- satus.render({
- type: 'text',
- label: 'empty',
- style: {
- margin: '0 16px'
- }
- }, this);
+
+ for (var key in data) {
+ if (['cut', 'copy', 'paste', 'select', 'drag_and_drop'].indexOf(key) === -1) {
+ list[key] = {
+ type: 'section',
+ class: 'satus-section--row',
+
+ shortcut: {
+ type: 'shortcut',
+ storage_key: 'global/' + key
+ },
+ remove: {
+ type: 'button',
+ class: 'satus-button--remove',
+ before: '',
+ storage_key: 'global/' + key,
+ onclick: function() {
+ satus.storage.set(this.storage_key, undefined);
+
+ this.parentNode.style.height = 0;
+
+ setTimeout(function() {
+ this.parentNode.remove();
+ }, .2);
+ }
+ }
+ };
+ }
}
+
+ satus.render(list, this);
}
};
}
-
+
Menu.main.section.filters.footer = {
type: 'div',
class: 'satus-div--create',
-
+
button: {
type: 'shortcut',
class: 'satus-shortcut--create',
@@ -727,10 +822,46 @@ function init(response) {
} else {
this.skelet.storage_key = 'websites/' + HOSTNAME + '/items/' + new Date().getTime();
}
+ },
+ onchange: function(object, value) {
+ var item = {
+ type: 'section',
+ class: 'satus-section--row',
+
+ shortcut: {
+ type: 'shortcut',
+ storage_key: object.storage_key
+ },
+ remove: {
+ type: 'button',
+ class: 'satus-button--remove',
+ before: '',
+ storage_key: object.storage_key,
+ onclick: function() {
+ satus.storage.set(this.storage_key, undefined);
+
+ this.parentNode.style.height = 0;
+
+ setTimeout(function() {
+ this.parentNode.remove();
+ }, 200);
+ }
+ }
+ };
+
+ if (document.querySelector('.global')) {
+ satus.render(item, document.querySelector('.global'));
+ } else {
+ if (document.querySelector('.satus-section--shortcuts .satus-text')) {
+ document.querySelector('.satus-section--shortcuts .satus-text').remove();
+ }
+
+ satus.render(item, document.querySelector('.satus-section--shortcuts'));
+ }
}
}
};
-
+
satus.render(Menu);
});
});
diff --git a/satus/satus.js b/satus/satus.js
index 9590690..bcd4825 100644
--- a/satus/satus.js
+++ b/satus/satus.js
@@ -525,26 +525,26 @@ Satus.modules.user = function() {
return data;
};
-/*--------------------------------------------------------------
+/*---------------------------------------------------------------
>>> CHROMIUM STORAGE
-----------------------------------------------------------------
+-----------------------------------------------------------------
1.0 Get
2.0 Set
3.0 Import
4.0 Clear
---------------------------------------------------------------*/
+---------------------------------------------------------------*/
-Satus.storage = {
+satus.storage = {
data: {}
};
-/*--------------------------------------------------------------
-# GET
---------------------------------------------------------------*/
+/*---------------------------------------------------------------
+1.0 GET
+---------------------------------------------------------------*/
-Satus.storage.get = function(name) {
+satus.storage.get = function(name) {
if (satus.isset(name)) {
- var target = Satus.storage;
+ var target = satus.storage.data;
name = name.split('/').filter(function(value) {
return value != '';
@@ -563,15 +563,15 @@ Satus.storage.get = function(name) {
};
-/*--------------------------------------------------------------
-# SET
---------------------------------------------------------------*/
+/*---------------------------------------------------------------
+2.0 SET
+---------------------------------------------------------------*/
-Satus.storage.set = function(name, value) {
+satus.storage.set = function(name, value) {
var items = {},
- target = Satus.storage;
+ target = Satus.storage.data;
- if (!Satus.isset(name)) {
+ if (!satus.isset(name)) {
return false;
}
@@ -596,25 +596,21 @@ Satus.storage.set = function(name, value) {
}
}
- for (var key in Satus.storage) {
- if (typeof Satus.storage[key] !== 'function') {
- items[key] = Satus.storage[key];
- }
+ for (var key in satus.storage.data) {
+ items[key] = satus.storage.data[key];
}
chrome.storage.local.set(items);
};
-/*--------------------------------------------------------------
-# IMPORT
---------------------------------------------------------------*/
+/*---------------------------------------------------------------
+3.0 IMPORT
+---------------------------------------------------------------*/
-Satus.storage.import = function(callback) {
+satus.storage.import = function(callback) {
chrome.storage.local.get(function(items) {
- for (var key in items) {
- Satus.storage[key] = items[key];
- }
+ satus.storage.data = items;
if (callback) {
callback();
@@ -623,18 +619,14 @@ Satus.storage.import = function(callback) {
};
-/*--------------------------------------------------------------
-# CLEAR
---------------------------------------------------------------*/
+/*---------------------------------------------------------------
+4.0 CLEAR
+---------------------------------------------------------------*/
-Satus.storage.clear = function() {
+satus.storage.clear = function() {
chrome.storage.local.clear();
- for (var key in Satus.storage) {
- if (typeof Satus.storage[key] !== 'function') {
- delete Satus.storage[key];
- }
- }
+ delete satus.storage.data;
};
/*-----------------------------------------------------------------------------
@@ -868,25 +860,27 @@ Satus.components.table = function(item) {
}
function sortArray(array, index, mode) {
- if (mode === 'asc') {
- if (typeof array[0][index].text === 'number') {
- sorted = array.sort(function(a, b) {
- return a[index].text - b[index].text;
- });
- } else {
- sorted = array.sort(function(a, b) {
- return a[index].text.localeCompare(b[index].text);
- });
- }
- } else {
- if (typeof array[0][index].text === 'number') {
- sorted = array.sort(function(a, b) {
- return b[index].text - a[index].text;
- });
+ if (array[0]) {
+ if (mode === 'asc') {
+ if (typeof array[0][index].text === 'number') {
+ sorted = array.sort(function(a, b) {
+ return a[index].text - b[index].text;
+ });
+ } else {
+ sorted = array.sort(function(a, b) {
+ return a[index].text.localeCompare(b[index].text);
+ });
+ }
} else {
- sorted = array.sort(function(a, b) {
- return b[index].text.localeCompare(a[index].text);
- });
+ if (typeof array[0][index].text === 'number') {
+ sorted = array.sort(function(a, b) {
+ return b[index].text - a[index].text;
+ });
+ } else {
+ sorted = array.sort(function(a, b) {
+ return b[index].text.localeCompare(a[index].text);
+ });
+ }
}
}
@@ -940,7 +934,7 @@ Satus.components.table = function(item) {
component.data = item.data;
component.paging = item.paging;
- component.pagingIndex = 0;
+ component.pagingIndex = 1;
component.update = function(data, index, mode) {
if (Satus.isset(data)) {
@@ -971,35 +965,54 @@ Satus.components.table = function(item) {
// PAGING
+ function pagingButton(i, c) {
+ var button = document.createElement('button');
+
+ if (i === component.pagingIndex) {
+ button.className = 'active';
+ }
- function pagingUpdate() {
- if (typeof this.paging === 'number') {
- var pages = Math.ceil(this.data.length / this.paging);
-
- this.querySelector('.satus-table__paging').innerHTML = '';
-
- for (var i = 1; i <= pages; i++) {
- var button = document.createElement('button');
-
- if (i === (this.pagingIndex || 1)) {
- button.className = 'active';
- }
+ button.innerText = i;
+ button.parentComponent = component;
+ button.addEventListener('click', function() {
+ this.parentComponent.pagingIndex = Number(this.innerText);
+ this.parentComponent.update(this.parentComponent.data);
+ this.parentComponent.pagingUpdate();
+ });
- button.innerText = i;
- button.parentComponent = this;
- button.addEventListener('click', function() {
- if (this.parentNode.querySelector('button.active')) {
- this.parentNode.querySelector('button.active').classList.remove('active');
- }
+ c.appendChild(button);
+ }
- this.classList.add('active');
+ function pagingUpdate() {
+ if (typeof this.paging === 'number') {
+ var pages = Math.ceil(this.data.length / this.paging),
+ c = this.querySelector('.satus-table__paging');
- this.parentComponent.pagingIndex = Number(this.innerText);
- this.parentComponent.update(this.parentComponent.data);
- });
+ c.innerHTML = '';
+
+ pagingButton(1, c);
+
+ if (component.pagingIndex - 2 > 2) {
+ var span = document.createElement('span');
+
+ span.innerText = '...';
+
+ c.appendChild(span);
+ }
- this.querySelector('.satus-table__paging').appendChild(button);
+ for (var i = component.pagingIndex - 2 < 2 ? 2 : component.pagingIndex - 2, l = component.pagingIndex + 2 > pages - 1 ? pages - 1 : component.pagingIndex + 2; i <= l; i++) {
+ pagingButton(i, c);
}
+
+ if (component.pagingIndex + 2 < pages - 1) {
+ var span = document.createElement('span');
+
+ span.innerText = '...';
+
+ c.appendChild(span);
+ }
+
+ pagingButton(pages, c);
}
resize();
@@ -2315,6 +2328,11 @@ satus.components.shortcut = function(object) {
component_button_save.addEventListener('click', function() {
Satus.storage.set(object.storage_key, JSON.stringify(value));
+
+ if (typeof object.onchange === 'function') {
+ object.onchange(object, value);
+ }
+
close();
});