-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathremind.js
More file actions
executable file
·56 lines (46 loc) · 13.6 KB
/
Copy pathremind.js
File metadata and controls
executable file
·56 lines (46 loc) · 13.6 KB
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
#!/usr/bin/env node
var exec = require('child_process').exec;
var moment = require('moment');
/**
* Watson - Collects data for Sherlock to analyze.
* Copyright (c) 2014 Tabule, Inc.
*/
var Watson=(function(){var helpers={};return{preprocess:function(str){var Sherlocked={};return[str,Sherlocked]},postprocess:function(Sherlocked){return Sherlocked},config:{disableRanges:false}}})();
/*!
* Sherlock
* Copyright (c) 2017 Neil Gupta
* Version 1.3.6
*/
var Sherlock=function(){var e={rangeSplitters:/(\bto\b|\-|\b(?:un)?till?\b|\bthrough\b|\bthru\b|\band\b|\bends?\b)/g,months:"\\b(jan(?:uary)?|feb(?:ruary)?|mar(?:ch)?|apr(?:il)?|may|jun(?:e)?|jul(?:y)?|aug(?:ust)?|sep(?:tember)?|oct(?:ober)?|nov(?:ember)?|dec(?:ember)?)\\b",days:"\\b(?:(?:(?:on )?the )(?=\\d\\d?(?:st|nd|rd|th)))?([1-2]\\d|3[0-1]|0?[1-9])(?:st|nd|rd|th)?(?:,|\\b)",years:"\\b(20\\d{2}|\\d{2}[6-9]\\d)\\b",shortForm:/\b(0?[1-9]|1[0-2])\/([1-2]\d|3[0-1]|0?[1-9])\/?(\d{2,4})?\b/,weekdaysStr:"\\b(sun|mon|tue(?:s)?|wed(?:nes)?|thu(?:rs?)?|fri|sat(?:ur)?)(?:day)?\\b",relativeDateStr:"((?:next|last|this) (?:week|month|year)|tom(?:orrow)?|tmrw|tod(?:ay)?|(?:right )?now|tonight|day after (?:tom(?:orrow)?|tmrw)|yest(?:erday)?|day before yest(?:erday)?)",inRelativeDateStr:"(\\d{1,4}|a) (day|week|month|year)s? ?(ago|old)?",inRelativeTime:/\b(\d{1,2} ?|a |an )(h(?:our)?|m(?:in(?:ute)?)?)s? ?(ago|old)?\b/,inMilliTime:/\b(\d+) ?(s(?:ec(?:ond)?)?|ms|millisecond)s? ?(ago|old)?\b/,midtime:/(?:@ ?)?\b(?:at )?(dawn|morn(?:ing)?|noon|afternoon|evening|night|midnight)\b/,internationalTime:/\b(?:(0[0-9]|1[3-9]|2[0-3]):?([0-5]\d))\b/,explicitTime:/(?:@ ?)?\b(?:at |from )?(1[0-2]|[1-2]?[1-9])(?::?([0-5]\d))? ?([ap]\.?m?\.?)?(?:o'clock)?\b/,more_than_comparator:/((?:more|greater|older|newer) than|after|before)/i,less_than_comparator:/((?:less|fewer) than)/i,fillerWords:/ (from|is|was|at|on|for|in|due(?! date)|(?:un)?till?)\b/,fillerWords2:/ (was|is|due(?! date))\b/},t=null,a=function(){return t?new Date(t.getTime()):new Date},r=function(e){return"undefined"!=typeof Watson&&Watson.config?Watson.config[e]:null},n=function(e,t,a){var r={},n=!1,o=!1,u=l.strToNum(e);return(n=i(u,t,a))&&(u=u.replace(new RegExp(n),""),e=e.replace(new RegExp(l.numToStr(n)),"")),(o=s(u,t,a))&&(e=e.replace(new RegExp(l.numToStr(o)),"")),r.eventTitle=e,r.isAllDay=!(!n||o||n.match(/^(?:right )?now$|^tonight$/)),r.isValidDate=!(!n&&!o),r},s=function(t,a,r){var n,s,i,o,l=0,u=!1;if(n=t.match(new RegExp(e.explicitTime.source,"g")))if(n=n.sort(function(e,t){var a=e.trim().length,r=t.trim().length;return e.match(/(?:a|p).?m.?/)&&(a+=20),t.match(/(?:a|p).?m.?/)&&(r+=20),r-a})[0].trim(),n.length<=2&&t.trim().length>2)l=0;else{l=n.length,n=n.match(e.explicitTime);var h=parseInt(n[1]),g=n[2]||0,c=n[3];c?(0===c.indexOf("p")&&12!=h?h+=12:0===c.indexOf("a")&&12==h&&(h=0),l+=20):h<12&&(h<7||h<=a.getHours())&&(h+=12),s=h,i=g,o=!!c,u=n[0]}var d=function(){return u&&(a.setHours(s,i,0),a.hasMeridian=o),u};if(!(l<4))return d();if(n=t.match(e.inRelativeTime))switch(isNaN(n[1])&&(n[1]=1),n[3]&&(n[1]=parseInt(n[1])*-1),n[2].substring(0,1)){case"h":return a.setHours(a.getHours()+parseInt(n[1])),n[0];case"m":return a.setMinutes(a.getMinutes()+parseInt(n[1])),n[0];default:return d()}else if(n=t.match(e.inMilliTime))switch(n[3]&&(n[1]=parseInt(n[1])*-1),n[2].substring(0,1)){case"s":return a.setSeconds(a.getSeconds()+parseInt(n[1])),n[0];case"m":return a.setMilliseconds(a.getMilliseconds()+parseInt(n[1])),n[0];default:return d()}else{if(!(n=t.match(e.midtime)))return(n=t.match(e.internationalTime))?(a.setHours(n[1],n[2],0),a.hasMeridian=!0,n[0]):d();switch(n[1]){case"dawn":return a.setHours(5,0,0),a.hasMeridian=!0,n[0];case"morn":case"morning":return a.setHours(8,0,0),a.hasMeridian=!0,n[0];case"noon":return a.setHours(12,0,0),a.hasMeridian=!0,n[0];case"afternoon":return a.setHours(14,0,0),a.hasMeridian=!0,n[0];case"evening":return a.setHours(19,0,0),a.hasMeridian=!0,n[0];case"night":return a.setHours(21,0,0),a.hasMeridian=!0,n[0];case"midnight":return a.setHours(0,0,0),a.hasMeridian=!0,n[0];default:return d()}}},i=function(t,a,r){var n;if(n=t.match(e.monthDay))return n[3]?(a.setFullYear(n[3],l.changeMonth(n[1]),n[2]),a.hasYear=!0):a.setMonth(l.changeMonth(n[1]),n[2]),n[0];if(n=t.match(e.dayMonth))return n[3]?(a.setFullYear(n[3],l.changeMonth(n[2]),n[1]),a.hasYear=!0):a.setMonth(l.changeMonth(n[2]),n[1]),n[0];if(n=t.match(e.shortForm)){var s=n[3],i=null;return s&&(i=parseInt(s)),i&&s.length<4&&(i+=i>50?1900:2e3),i?(a.setFullYear(i,n[1]-1,n[2]),a.hasYear=!0):a.setMonth(n[1]-1,n[2]),n[0]}if(n=t.match(e.oxtDays)||t.match(e.oxtDaysUK))switch(n[1].substr(0,3)){case"sun":return l.changeDay(a,0,"oxt"),n[0];case"mon":return l.changeDay(a,1,"oxt"),n[0];case"tue":return l.changeDay(a,2,"oxt"),n[0];case"wed":return l.changeDay(a,3,"oxt"),n[0];case"thu":return l.changeDay(a,4,"oxt"),n[0];case"fri":return l.changeDay(a,5,"oxt"),n[0];case"sat":return l.changeDay(a,6,"oxt"),n[0];default:return!1}else{if(!(n=t.match(e.weekdays))){if(n=t.match(e.inRelativeDateFromRelativeDate))return!(!l.relativeDateMatcher(n[4],a)||!l.inRelativeDateMatcher(n[1],n[2],n[3],a))&&n[0];if(n=t.match(e.relativeDate))return!!l.relativeDateMatcher(n[1],a)&&n[0];if(n=t.match(e.inRelativeDate))return!!l.inRelativeDateMatcher(n[1],n[2],n[3],a)&&n[0];if(n=t.match(new RegExp(e.days,"g"))){if(n=n.sort(function(e,t){return t.trim().length-e.trim().length})[0].trim(),0!==n.indexOf("on")&&(0!==n.indexOf("the")||n.indexOf(",",n.length-1)===-1)&&t.indexOf(n,t.length-n.length-1)===-1||(!r||!r.isAllDay)&&n.length<=2)return!1;n=n.match(e.daysOnly);var o=a.getMonth(),u=n[1];return u<a.getDate()&&o++,a.setMonth(o,u),n[0]}return!1}switch(n[2].substr(0,3)){case"sun":return l.changeDay(a,0,n[1]),n[0];case"mon":return l.changeDay(a,1,n[1]),n[0];case"tue":return l.changeDay(a,2,n[1]),n[0];case"wed":return l.changeDay(a,3,n[1]),n[0];case"thu":return l.changeDay(a,4,n[1]),n[0];case"fri":return l.changeDay(a,5,n[1]),n[0];case"sat":return l.changeDay(a,6,n[1]),n[0];default:return!1}}},o=function(t,r,n,s,i){var o=a();r?t>r&&r>o&&l.isSameDay(t,r)&&l.isSameDay(t,o)?t.hasMeridian?t.setDate(t.getDate()-1):(t.setHours(t.getHours()-12),t>r&&t.setHours(t.getHours()-12)):t>r?r.setDate(t.getDate()+1):r<o&&s.indexOf(" was ")===-1&&l.monthDiff(r,o)>=3&&!r.hasYear&&!t.hasYear&&(r.setFullYear(r.getFullYear()+1),t.setFullYear(t.getFullYear()+1)):t&&(t<=o&&!t.hasYear&&!s.match(/was|ago|old\b/)&&(l.isSameDay(t,o)&&!n?t.hasMeridian||t.getHours()<19?t.setDate(t.getDate()+1):(t.setHours(t.getHours()+12),t<=o&&(t.setHours(t.getHours()-12),t.setDate(t.getDate()+1))):l.monthDiff(t,o)>=3&&t.setFullYear(t.getFullYear()+1)),i.eventTitle.match(e.more_than_comparator)?(t<=o&&(!l.isSameDay(t,o)||s.match(/ago|old\b/))&&!i.eventTitle.match(/after|newer/i)||i.eventTitle.match(/older|before/i)?(i.endDate=new Date(t.getTime()),i.startDate=new Date(1900,0,1,0,0,0,0)):i.endDate=new Date(3e3,0,1,0,0,0,0),i.eventTitle=i.eventTitle.replace(e.more_than_comparator,"")):i.eventTitle.match(e.less_than_comparator)&&(t<=o?l.isSameDay(t,o)&&!s.match(/ago|old\b/)?(i.endDate=new Date(t.getTime()),i.startDate=new Date(1900,0,1,0,0,0,0)):i.endDate=new Date(o.getTime()):(i.endDate=new Date(t.getTime()),i.startDate=new Date(o.getTime())),i.eventTitle=i.eventTitle.replace(e.less_than_comparator,"")))},l={relativeDateMatcher:function(e,t){var r=a();switch(e){case"next week":return t.setFullYear(r.getFullYear(),r.getMonth(),r.getDate()+7),t.hasYear=!0,!0;case"next month":return t.setFullYear(r.getFullYear(),r.getMonth()+1,r.getDate()),t.hasYear=!0,!0;case"next year":return t.setFullYear(r.getFullYear()+1,r.getMonth(),r.getDate()),t.hasYear=!0,!0;case"last week":return t.setFullYear(r.getFullYear(),r.getMonth(),r.getDate()-7),t.hasYear=!0,!0;case"last month":return t.setFullYear(r.getFullYear(),r.getMonth()-1,r.getDate()),t.hasYear=!0,!0;case"last year":return t.setFullYear(r.getFullYear()-1,r.getMonth(),r.getDate()),t.hasYear=!0,!0;case"tom":case"tmrw":case"tomorrow":return t.setFullYear(r.getFullYear(),r.getMonth(),r.getDate()+1),t.hasYear=!0,!0;case"day after tom":case"day after tmrw":case"day after tomorrow":return t.setFullYear(r.getFullYear(),r.getMonth(),r.getDate()+2),t.hasYear=!0,!0;case"this week":case"this month":case"this year":case"tod":case"today":return t.setFullYear(r.getFullYear(),r.getMonth(),r.getDate()),t.hasYear=!0,!0;case"now":case"right now":case"tonight":return t.setFullYear(r.getFullYear(),r.getMonth(),r.getDate()),t.setHours(r.getHours(),r.getMinutes(),r.getSeconds(),0),"tonight"===e&&t.getHours()<21&&t.setHours(21,0,0,0),t.hasMeridian=!0,t.hasYear=!0,!0;case"yest":case"yesterday":return t.setFullYear(r.getFullYear(),r.getMonth(),r.getDate()-1),t.hasYear=!0,!0;case"day before yest":case"day before yesterday":return t.setFullYear(r.getFullYear(),r.getMonth(),r.getDate()-2),t.hasYear=!0,!0;default:return!1}},inRelativeDateMatcher:function(e,t,a,r){switch(e=isNaN(e)?1:parseInt(e),a&&(e*=-1),t){case"day":return r.setDate(r.getDate()+e),r.hasYear=!0,!0;case"week":return r.setDate(r.getDate()+7*e),r.hasYear=!0,!0;case"month":return r.setMonth(r.getMonth()+e),r.hasYear=!0,!0;case"year":return r.setFullYear(r.getFullYear()+e),r.hasYear=!0,!0;default:return!1}},changeMonth:function(e){return this.monthToInt[e.substr(0,3)]},changeDay:function(e,t,a){var r=7-e.getDay()+t;(r>7&&void 0===a||"last"===a)&&(r-=7),r>=0&&"last"===a&&(r-=7),"oxt"===a&&(r+=7),e.setDate(e.getDate()+r)},monthDiff:function(e,t){var a;return a=12*(t.getFullYear()-e.getFullYear()),a-=e.getMonth()+1,a+=t.getMonth()+1,a<=0?0:a},escapeRegExp:function(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")},isSameDay:function(e,t){return e.getMonth()===t.getMonth()&&e.getDate()===t.getDate()&&e.getFullYear()===t.getFullYear()},monthToInt:{jan:0,feb:1,mar:2,apr:3,may:4,jun:5,jul:6,aug:7,sep:8,oct:9,nov:10,dec:11},wordsToInt:{one:1,first:1,two:2,second:2,three:3,third:3,four:4,fourth:4,five:5,fifth:5,six:6,sixth:6,seven:7,seventh:7,eight:8,eighth:8,nine:9,ninth:9,ten:10,tenth:10},intToWords:["one|first","two|second","three|third","four|fourth","five|fifth","six|sixth","seven|seventh","eight|eighth","nine|ninth","ten|tenth"],strToNum:function(t){return t.replace(e.digit,function(e){var t=l.wordsToInt[e];return e.indexOf("th",e.length-2)!==-1?t+="th":e.indexOf("st",e.length-2)!==-1?t+="st":e.indexOf("nd",e.length-2)!==-1?t+="nd":e.indexOf("rd",e.length-2)!==-1&&(t+="rd"),t})},numToStr:function(e){return e.replace(/((?:[1-9]|10)(?:st|nd|rd|th)?)/g,function(e){return"(?:"+e+"|"+l.intToWords[parseInt(e)-1]+")"})}};return e.monthDay=new RegExp(e.months+" "+e.days+"(?: "+e.years+")?"),e.dayMonth=new RegExp(e.days+"(?: (?:day )?of)? "+e.months+"(?: "+e.years+")?"),e.daysOnly=new RegExp(e.days),e.digit=new RegExp("\\b("+l.intToWords.join("|")+")\\b","g"),e.relativeDate=new RegExp("\\b"+e.relativeDateStr+"\\b"),e.inRelativeDate=new RegExp("\\b"+e.inRelativeDateStr+"\\b"),e.inRelativeDateFromRelativeDate=new RegExp("\\b"+e.inRelativeDateStr+" from "+e.relativeDateStr+"\\b"),e.weekdays=new RegExp("(?:(next|last) (?:week (?:on )?)?)?"+e.weekdaysStr),e.oxtDays=new RegExp("(?:\\boxt|\\bweek next) "+e.weekdaysStr),e.oxtDaysUK=new RegExp(e.weekdaysStr+" week\\b"),String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")}),{parse:function(t){null===t&&(t="");var s=a(),i="undefined"!=typeof Watson?Watson.preprocess(t):[t,{}],t=i[0],u=i[1],h=r("disableRanges")?[t.toLowerCase()]:t.toLowerCase().split(e.rangeSplitters);for(e.rangeSplitters.lastIndex=0,s.setMilliseconds(0);!u.startDate&&(null!==(i=n(h[0],s,null))&&(i.isAllDay&&s.setHours(0,0,0),u.isAllDay=i.isAllDay,u.eventTitle=i.eventTitle,u.startDate=i.isValidDate?s:null),!u.startDate&&h.length>=3);){for(var g=[h[0]+h[1]+h[2]],c=3;c<h.length;c++)g.push(h[c]);h=g}for(;!u.endDate;)if(h.length>1&&(s=new Date(s.getTime()),null!==(i=n(h[2],s,u))&&(u.isAllDay&&s.setHours(0,0,0),i.eventTitle.length>u.eventTitle.length&&(u.eventTitle=i.eventTitle),u.endDate=i.isValidDate?s:null)),!u.endDate){if(!(h.length>=4)){u.endDate=null;break}for(var g=[h[0],h[1],h[2]+h[3]+h[4]],c=5;c<h.length;c++)g.push(h[c]);h=g}if(o(u.startDate,u.endDate,u.isAllDay,t,u),u.eventTitle){var d=r("disableRanges")?e.fillerWords2:e.fillerWords;u.eventTitle=u.eventTitle.split(d)[0].trim(),u.eventTitle=u.eventTitle.replace(/(?:^| )(?:\.|-$|by$|in$|at$|from$|on$|starts?$|for$|(?:un)?till?$|!|,|;)+/g,"").replace(/ +/g," ").trim();var m=t.match(new RegExp(l.escapeRegExp(u.eventTitle),"i"));m&&(u.eventTitle=m[0].replace(/ +/g," ").trim(),""==u.eventTitle&&(u.eventTitle=null))}else u.eventTitle=null;return"undefined"!=typeof Watson&&Watson.postprocess(u),u},_setNow:function(e){t=e}}}();"function"==typeof define&&define.amd?define(Sherlock):"undefined"!=typeof module&&module.exports&&(module.exports=Sherlock);
if (!process.argv[2]) {
console.log("Create Reminder Failed: No arguments");
process.exit(1);
}
var sherlocked = Sherlock.parse(process.argv[2]);
if (!sherlocked) {
console.log("Create Reminder Failed: Couldn't parse arguments");
process.exit(1);
}
var applescript = [
'tell application "Reminders"',
'set newremin to make new reminder',
'set name of newremin to "' + sherlocked.eventTitle + '"'
];
if (sherlocked.startDate) {
setTime = sherlocked.isAllDay ? "[ at 09:00:00 AM]" : "";
format = sherlocked.isAllDay ? "dddd, MMMM D, YYYY" + setTime : "dddd, MMMM D, YYYY [at] hh:mm:ss A";
dateString = moment(sherlocked.startDate).format(format);
applescript.push('set due date of newremin to date "' + dateString + '"');
}
applescript.push('end tell');
var scriptString = '';
for (var i in applescript) {
scriptString += "-e '" + applescript[i] + "' ";
}
exec('osascript ' + scriptString, function(error) {
if (!error) {
console.log("Created Reminder: " + sherlocked.eventTitle);
} else {
console.log("Create Reminder Failed: " + error.message);
}
});