This commit is contained in:
qt31415926
2015-06-08 23:29:34 -04:00
parent 3e59b3e90b
commit 316858cba1
20 changed files with 338 additions and 103 deletions
+7 -7
View File
@@ -1,15 +1,15 @@
{
"name": "Mindful-Anti-Distraction",
"version": "0.3.0",
"description": "Chrome extension to help curtail poor internet habits",
"repository": {
"type": "git",
"url": "https://github.com/qt31415926/mad"
},
"private": true,
"description": "Chrome extension to help curtail poor internet habits",
"repository": {
"type": "git",
"url": "https://github.com/qt31415926/mad"
},
"private": true,
"devDependencies": {
"grunt": "^0.4.5",
"grunt-contrib-compress": "^0.13.0",
"grunt-crx": "^0.3.4",
"grunt-crx": "^1.0.3"
}
}
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
+13 -14
View File
@@ -4,6 +4,7 @@
<title>MAD</title>
<!-- Scripts -->
<script src="js/shared/jquery.min.js"></script>
<script src="js/shared/jquery-ui.min.js"></script>
<script src="js/fuzzyset.js"></script>
<script src="js/shared/bootstrap.min.js"></script>
<script src="js/shared/angular.min.js"></script>
@@ -29,8 +30,9 @@
<body>
<div class="text-center content" ng-controller="HeaderController">
<h1>MAD: <small>Mindful Anti Distraction</small></h1>
<button class='btn btn-danger' ng-click='openOptions("lg")'>Block List</button>
<button class='btn btn-success' ng-click='openReasons("lg")'>Reason Tracker</button>
<button class='btn btn-danger' ng-click='openOptions("lg")'>Block List <span class="glyphicon glyphicon-th-list"></span></button>
<button ng-if="useReasons" class='btn btn-success' ng-click='openReasons("lg")'>Reason Tracker <span class="glyphicon glyphicon-eye-open"></span></button>
<button class='btn btn-primary' ng-click='openSettings()'>Options<span class="glyphicon glyphicon-cog"></span></button>
</div>
<div class="row content">
@@ -46,8 +48,8 @@
</div>
<div ng-hide="!editMode[$index]">
<a href=""><span class='glyphicon glyphicon-chevron-left' aria-hidden="true" ng-click='switchPic("left", $index)'></span></a>
<img ng-src="{{ alt.imgsrc }}" class="restrict-img-circle img-circle">
<a href=""><span class='glyphicon glyphicon-chevron-right' aria-hidden="true" ng-click='switchPic("right", $index)'></span></a>
<img ng-src="{{ alt.imgsrc }}" class="restrict-img-circle img-circle">
<a href=""><span class='glyphicon glyphicon-chevron-right' aria-hidden="true" ng-click='switchPic("right", $index)'></span></a>
<input class='form-control text-center nice-form-control' ng-model="alt.text" ></h3>
</div>
<button class='btn btn-xs btn-danger' ng-click='deleteAlt($index)'><span class='glyphicon glyphicon-trash' aria-hidden="true"></span></button>
@@ -130,30 +132,27 @@
<form class="form-horizontal">
<div class="form-group">
<label class="col-sm-2 control-label" for="input-a">Retype</label>
<div class="col-sm-10">
<input type="text" id="input-a" class="custwidth form-control"></input>
<div class="col-sm-9">
<input type="text" id="input-a" class="form-control"></input>
</div>
</div>
<div class="form-group">
<div ng-show="useReasons" class="form-group">
<label class="col-sm-2 control-label" for="input-b">Reason Tracking (Optional)</label>
<div class="col-sm-10">
<input type="text" id="input-b" class="custwidth form-control" ng-model="reason"></input>
<div class="col-sm-9">
<input type="text" id="input-b" class="form-control" ng-model="reason"></input>
</div>
</div>
</form>
</div>
<div class="text-center">
<input id="submit1" class="btn btn-primary" type="submit" value="Verify">
<a id="submit2" class="btn btn-success" href="#" disabled="enabled" ng-click='enterSite()'>Enter Site</a>
<a id="submit1" class="btn btn-primary" type="submit" href="#target">Verify</a>
<a id="submit2" class="btn btn-success" href="#" disabled="enabled" ng-click="enterSite($event)">Enter Site</a>
<br><strong id="message"></strong>
</div>
</div>
</div>
</div>
<div class="text-center">
<h2 class="btn btn-danger text-center">HELP IM DISTRACTED</h2>
</div>
</body>
</html>
+32 -2
View File
@@ -1,8 +1,38 @@
var currTabs = []; //TODO add additional information to these objects, e.g. time
var currTabs = [];
var updateInterval = 5;
var cumulativeTime = 0;
var totalTime = 0;
var settings = {};
var defaultSettings = {
"numOfPasses": 1,
"useReasonList": true
};
var updateSettings = function(){
chrome.storage.sync.get('settings', function(items){
if (items.settings == undefined){
settings = defaultSettings;
} else {
settings = items.settings;
}
console.log(settings);
});
};
updateSettings();
var saveSettings = function(){
chrome.storage.sync.set({'settings': settings}, function(){
console.log('settings saved');
});
};
var deleteSettings = function(){
chrome.storage.sync.remove('settings', function(){
console.log('settings deleted');
});
};
function updateTimes(){
chrome.idle.queryState(60, function (state){
@@ -38,4 +68,4 @@ chrome.webRequest.onBeforeRequest.addListener(
["blocking"]
);
setInterval(updateTimes, updateInterval * 1000);
//setInterval(updateTimes, updateInterval * 1000);
+12 -16
View File
@@ -2,15 +2,7 @@
<html ng-app="app" ng-csp>
<head>
<title>MAD Options</title>
<script src="js/shared/bootstrap.min.js"></script>
<!-- <script src="js/shared/angular.min.js"></script>
<script src="js/shared/ui-bootstrap-ng.min.js"></script>-->
<link rel="stylesheet" href="css/bootstrap.min.css">
<link rel="stylesheet" href="css/bootstrap-theme.min.css">
<link rel="stylesheet" href="css/main.css">
<link href='http://fonts.googleapis.com/css?family=Open+Sans' rel='stylesheet' type='text/css'>
</head>
</head>
<body>
<div class='modal-header text-center'>
<h1> BlockList </h1>
@@ -35,21 +27,25 @@
<h3>ASSIST FUTURE SELF</h3>
<div class='row'>
<h4>Simple Block</h4>
<div class='col-md-10'>
<input id="simpleDomain" ng-model="simple" type='text' class='form-control' placeholder='e.g. reddit or twitter'/>
</div>
<div class='col-md-2 modal-right-button'>
<button class='btn btn-success btn-sm' ng-click='addSimple()'>Add</button>
</div>
<form ng-submit="addSimple()">
<div class='col-md-10'>
<input id="simpleDomain" ng-model="simple" type='text' class='form-control' placeholder='e.g. reddit or twitter'/>
</div>
<div class='col-md-2 modal-right-button'>
<button class='btn btn-success btn-sm'>Add</button>
</div>
</form>
</div>
<div class='row'>
<h4>Exactsies Block</h4>
<form ng-submit="addExact()">
<div class='col-md-10'>
<input id="exactUrl" ng-model="exact" type='text' class='form-control' placeholder='e.g. http://www.reddit.com/r/all'/>
</div>
<div class='col-md-2 modal-right-button'>
<button class='btn btn-success btn-sm' ng-click='addExact()'>Add</button>
<button class='btn btn-success btn-sm'>Add</button>
</div>
</form>
</div>
<!-- <div class='row'>
<h4>Custom Regex</h4>
+14
View File
@@ -66,3 +66,17 @@ blockquote{
}
.max-height{
min-height: 300px;
height: 100% !important;
}
#settings-container{
max-width: 950px;
margin: auto;
width: 90%;
}
.clicky{
cursor: pointer;
}
+1 -1
View File
@@ -1,4 +1,4 @@
var app = angular.module("app",['ui.bootstrap']);
var app = angular.module("app",['ui.bootstrap' ]);
var bkg = chrome.extension.getBackgroundPage();
+20 -9
View File
@@ -1,22 +1,33 @@
app.controller('FooterController', ['$scope', '$modal',
function($scope){
$scope.useReasons = bkg.settings['useReasonList'];
chrome.storage.sync.get('reasons', function(items){
if (items.reasons == undefined){
$scope.listOfReasons = [];
$scope.listOfReasons = {
unsorted: [],
good: [],
bad: []
};
} else {
$scope.listOfReasons = items.reasons;
}
$scope.$apply();
});
$scope.enterSite = function(){
if ($scope.reason == "") return;
console.log($scope.listOfReasons);
$scope.listOfReasons.push($scope.reason);
chrome.storage.sync.set( {'reasons': $scope.listOfReasons}, function(){
});
$scope.enterSite = function(href){
var reason = $scope.reason;
if (reason == "" || reason.length == 0 || reason == undefined) return;
var currTabs = chrome.extension.getBackgroundPage().currTabs;
var result = "";
var reasonObj = {
reason: reason,
link: href.target.href,
time: Date.now()
};
console.log(reasonObj);
console.log($scope.listOfReasons);
$scope.listOfReasons['unsorted'].push(reasonObj);
chrome.storage.sync.set( {'reasons': $scope.listOfReasons}, function(){ console.log("reasons saved"); });
};
}]);
+58 -5
View File
@@ -2,17 +2,67 @@ var ReasonTrackerModalInstanceCtrl = function($scope, $modalInstance){
$scope.cancel = function() {
$modalInstance.dismiss('cancel');
};
chrome.storage.sync.get('reasons', function(item){
if (item.reasons == undefined){
$scope.reasons = [];
$scope.reasons = {
unsorted: [],
good: [],
bad: []
};
} else {
console.log(item.reasons);
$scope.reasons = item.reasons;
$scope.unsortedReasons = item.reasons['unsorted'];
$scope.goodReasons = item.reasons['good'];
$scope.badReasons= item.reasons['bad'];
}
$scope.$apply();
});
$scope.move = function(dir, current, index){
if (current == 'unsorted'){
var temp = $scope.unsortedReasons.splice(index, 1)[0];
if (dir== 'left'){
$scope.goodReasons.push(temp);
}
else{
$scope.badReasons.push(temp);
}
}
else if (current == 'good'){
var temp = $scope.goodReasons.splice(index, 1)[0];
$scope.unsortedReasons.push(temp);
}
else{
var temp = $scope.badReasons.splice(index, 1)[0];
$scope.unsortedReasons.push(temp);
};
var tempArr = {
unsorted: $scope.unsortedReasons,
good: $scope.goodReasons,
bad: $scope.badReasons
};
chrome.storage.sync.set({'reasons': tempArr}, function(){
console.log('saved reasons');
});
};
$scope.clearAll = function(){
var tempArr = {
unsorted: [],
good: [],
bad: []
};
$scope.unsortedReasons = tempArr['unsorted'];
$scope.goodReasons = tempArr['good'];
$scope.badReasons= tempArr['bad'];
chrome.storage.sync.set({'reasons': tempArr}, function(){
console.log('saved reasons');
});
};
};
var BlockListModalInstanceCtrl = function($scope, $modalInstance) {
$scope.blocklist = bkg.blockList;
@@ -109,6 +159,7 @@ var BlockListModalInstanceCtrl = function($scope, $modalInstance) {
app.controller('HeaderController', ['$scope', '$modal',
function($scope, $modal){
$scope.useReasons = bkg.settings['useReasonList'];
$scope.openOptions = function(size) {
var modalInstance = $modal.open({
templateUrl:'../../blocklist.html',
@@ -125,7 +176,9 @@ app.controller('HeaderController', ['$scope', '$modal',
});
}
$scope.openSettings = function(){
chrome.runtime.openOptionsPage();
}
}]);
+3
View File
@@ -19,5 +19,8 @@ popup.controller('PopupController', ['$scope',
$scope.testfunc = function(){
alert("DOES WORK>?");
}
$scope.openSettings = function(){
chrome.runtime.openOptionsPage();
}
}]);
+19
View File
@@ -0,0 +1,19 @@
settings.controller('SettingsController', ['$scope',
function($scope){
$scope.currentSettings = bkg.settings;
$scope.numberList = [1,2,3,4,5,6,7,8,9,10];
$scope.yesNo = [true,false];
$scope.changeItem = function(item){
console.log("selected" + item);
};
$scope.settingChanged = function(){
chrome.storage.sync.set({'settings': $scope.currentSettings}, function(){
console.log('settings saved');
})
};
}]);
+3
View File
@@ -0,0 +1,3 @@
var settings= angular.module('settings', []);
var bkg = chrome.extension.getBackgroundPage();
File diff suppressed because one or more lines are too long
+13
View File
File diff suppressed because one or more lines are too long
+58 -25
View File
@@ -11,26 +11,34 @@ var defSayings = [
"Sites are only tools. They don't control me",
"Resisting this site is easy",
"Not all those who wander are lost",
"My future self can benefit from this",
"I will fight my automatic actions",
"Conserve willpower through smart choices",
"Mindless rote behaviour is changeable",
"Refocus on what needs to be done",
"I should strive to help out my future self",
"What was the cue that led me here?"
]
/* setupUpdater will be called once, on page load.
*/
var passed = false;
var count = 0;
var targetPasses= chrome.extension.getBackgroundPage().settings['numOfPasses'];
var currentText = "";
window.onload = function setupUpdater(){
var input=document.getElementById('input-a')
, count=document.getElementById('message')
, targetText = defSayings[Math.floor(Math.random()*defSayings.length)]
, a = FuzzySet([targetText])
, timeout=null;
set(target, targetText);
, timeout=null
, ifOne = "Verify"
, numLeft = "Verify (" + (targetPasses-count) +")";
changeText(target);
if ((targetPasses-count)==1) set(submit1, ifOne);
else set(submit1, numLeft);
function handleChange(){
var a = FuzzySet([currentText])
var newText=input.value;
var score = a.get(newText)[0][0];
if (score>0.88) {
@@ -49,27 +57,52 @@ window.onload = function setupUpdater(){
input.onkeydown=input.onkeyup=onClick=eventHandler;
};
var changeText = function(element){
$("#input-a").val('');
var targetText = defSayings[Math.floor(Math.random()*defSayings.length)];
while (targetText == currentText){
targetText = defSayings[Math.floor(Math.random()*defSayings.length)];
}
currentText = targetText;
set(element, targetText);
}
var activate = function(){
var currTabs = chrome.extension.getBackgroundPage().currTabs;
chrome.tabs.query({
active: true,
windowId: chrome.windows.WINDOW_ID_CURRENT
}, function (tabs){
result = $.grep(currTabs, function(e){
e.currStatus = false;
return e.tabId == tabs[0].id;
count += 1;
if (count >= targetPasses) {
var currTabs = chrome.extension.getBackgroundPage().currTabs;
chrome.tabs.query({
active: true,
windowId: chrome.windows.WINDOW_ID_CURRENT
}, function (tabs){
result = $.grep(currTabs, function(e){
e.currStatus = false;
return e.tabId == tabs[0].id;
});
if (result.length==0){
return false;
}
else{
var numLeft = "Verifed";
set(submit1, numLeft);
$("#message").text("Button Unlocked");
$("#submit1").attr("disabled", "enabled");
console.log(result[0]);
$(".btn-success").removeAttr("disabled");
$(".btn-success").attr("href", result[0].origUrl);
return true;
}
});
if (result.length==0){
return false;
}
else{
$("#message").text("Button Unlocked");
console.log(result[0]);
$(".btn-success").removeAttr("disabled");
$(".btn-success").attr("href", result[0].origUrl);
return true;
}
});
} else if ((targetPasses - count)==1){
var numLeft = "Verify";
set(submit1, numLeft);
changeText(target);
}
else{
var numLeft = "Verify (" + (targetPasses-count) +")";
set(submit1, numLeft);
changeText(target);
}
return false;
}
+1
View File
@@ -14,6 +14,7 @@
"background.html"
]
},
"options_page": "options.html",
"browser_action": {
"default_icon": "img/128.png",
"default_title": "MAD",
+48
View File
@@ -0,0 +1,48 @@
<!doctype html>
<html ng-app='settings' ng-csp>
<head>
<title>MAD Options</title>
<!-- CSS -->
<link rel="stylesheet" href="css/bootstrap.min.css">
<link rel="stylesheet" href="css/bootstrap-theme.min.css">
<link rel="stylesheet" href="css/main.css">
<link rel="stylesheet" href="css/angular-csp.css">
<link href='http://fonts.googleapis.com/css?family=Open+Sans' rel='stylesheet' type='text/css'>
<!-- Scripts -->
<script src="js/shared/jquery.min.js"></script>
<script src="js/shared/bootstrap.min.js"></script>
<script src="js/shared/angular.min.js"></script>
<!-- Module -->
<script src="js/settings.js"></script>
<script src="js/controllers/settingsController.js"></script>
</head>
<body ng-controller="SettingsController">
<div class="text-center content">
<h1>Options<h1>
</div>
<div id="settings-container">
<h3>General</h3>
<div class="row container panel-body">
<div class="col-md-2">
<div class="btn-group">
<select id="numVerif" class="form-control" ng-model="currentSettings['numOfPasses']" ng-options="number for number in numberList" ng-change="settingChanged()">
</select>
</div>
</div>
<div class="col-md-10"> <label for="numVerif"> <h4>Number of phrases to type in order to unlock page</h4><label></div>
</div>
<div class="row container panel-body">
<div class="col-md-2">
<div class="btn-group">
<select class="form-control" ng-model="currentSettings['useReasonList']" ng-options="option for option in yesNo" ng-change="settingChanged()">
</select>
</div>
</div>
<div class="col-md-7"> <h4> Show Reasons Feature</h4></div>
</div>
</body>
</html>
-3
View File
@@ -19,10 +19,7 @@
<body ng-controller="PopupController">
<div id="header">
<nav class="navbar navbar-static-top ">
<button href="" class="btn btn-primary"><span class="glyphicon glyphicon-cog"></span></button>
<button ng-click="addToBlock()" ng-disabled="isBlocked" id="blacklist_button" class="btn btn-primary" type="submit">Block this site</button>
</nav>
</div>
</body>
</html>
+36 -19
View File
@@ -3,41 +3,58 @@
<html ng-app="app" ng-csp>
<head>
<title>MAD Reasons</title>
<script src="js/shared/bootstrap.min.js"></script>
<!-- <script src="js/shared/angular.min.js"></script>
<script src="js/shared/ui-bootstrap-ng.min.js"></script>-->
<link rel="stylesheet" href="css/bootstrap.min.css">
<link rel="stylesheet" href="css/bootstrap-theme.min.css">
<link rel="stylesheet" href="css/main.css">
<link href='http://fonts.googleapis.com/css?family=Open+Sans' rel='stylesheet' type='text/css'>
</head>
<body>
<div class='modal-header text-center'>
<h1> Reason Tracker</h1>
<h1> Reason Tracker: <small>Increase Self Awareness </small></h1>
</div>
<div class="col-md-4 text-left">
<h2> Good Reasons </h2>
</div>
<div class="col-md-4 text-center">
<h2> Unsorted Reasons </h2>
<div ng-repeat="reason in reasons track by $index">
<p> {{ reason }} </p>
</div>
<h2> Good </h2>
<ul class="max-height thumbnail img-responsive">
<div ng-repeat="reason in goodReasons track by $index">
<p class="btn btn-success" tooltip="Wanted to go to: {{reason.link}}">{{reason.reason}}</p>
<span class="glyphicon clicky glyphicon-chevron-right" aria-hidden="true" ng-click="move('right', 'good', $index)"></span>
</div>
</ul>
</div>
<div class="col-md-4 text-right">
<h2> Poor Reasons </h2>
<div class="col-md-4 text-center">
<h2> Unsorted </h2>
<ul class="max-height thumbnail img-responsive">
<div ng-repeat="reason in unsortedReasons track by $index">
<span class="glyphicon clicky glyphicon-chevron-left" aria-hidden="true" ng-click="move('left', 'unsorted', $index)"></span>
<p class="btn btn-primary" tooltip="Wanted to go to: {{reason.link}}">{{reason.reason}}</p>
<span class="glyphicon clicky glyphicon-chevron-right" aria-hidden="true" ng-click="move('right', 'unsorted', $index)"></span>
</div>
</ul>
</div>
<div class="col-md-4 text-center">
<h2> Poor </h2>
<div class="max-height thumbnail img-responsive">
<div ng-repeat="reason in badReasons track by $index">
<span class="glyphicon clicky glyphicon-chevron-left" aria-hidden="true" ng-click="move('left', 'poor', $index)"></span>
<p class="btn btn-danger" tooltip="Wanted to go to: {{reason.link}}">{{reason.reason}}</p>
</div>
</div>
</div>
<div class='modal-footer text-center'>
<div class='row col-md-12 text-center'>
<button class='btn btn-primary' ng-disabled='undoBool' ng-click='undo()'>Clear All</button>
<button class='btn btn-primary' ng-click='clearAll()'>Clear All</button>
<button class='btn btn-danger' ng-click='cancel()'>Close</button>
</div>
</div>
</body>
<script type="text/javascript">
$(document).ready(function(){
$('[data-toggle="tooltip"]').tooltip();
});
</script>
</html>