Created
September 28, 2017 16:23
-
-
Save scripting/b5212bd2062a089af403894f944700c7 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function runUserScript (s, scriptName) { | |
var now = new Date (); | |
function msg (s) { | |
var package = { | |
text: s, | |
path: scriptName | |
}; | |
bullMancuso.send ("callback", "msg", utils.jsonStringify (package)); | |
} | |
function persist (objectName) { | |
if (localStorage [objectName] === undefined) { | |
localStorage [objectName] = new Object (); | |
} | |
return (localStorage [objectName]); | |
} | |
var number = { | |
random: function (lower, upper) { | |
return (utils.random (lower, upper)); | |
} | |
} | |
var file = { | |
readWholeFile: function (path) { | |
return (fs.readFileSync (path).toString ()); | |
}, | |
writeWholeFile: function (path, data) { | |
return (fs.writeFileSync (path, data)); | |
}, | |
exists: function (path) { | |
return (fs.existsSync (path)); | |
}, | |
getDatePath: function (theDate, flLastSeparator) { | |
return (utils.getDatePath (theDate, flLastSeparator)); | |
}, | |
sureFilePath: function (path) { | |
return (utils.sureFilePathSync (path)); | |
}, | |
copy: function (source, dest) { | |
return (file.writeWholeFile (dest, file.readWholeFile (source))); | |
}, | |
isFolder: function (path) { | |
return (fs.statSync (path).isDirectory ()); | |
}, | |
getFileList: function (folderpath) { | |
return (fs.readdirSync (folderpath)); | |
}, | |
getPathChar: function () { | |
return ("/"); //must be made cross-platform -- 2/17/17 by DW | |
}, | |
fileFromPath: function (f) { | |
return (string.lastField (f, file.getPathChar ())); | |
}, | |
newFolder: function (path) { | |
return (fs.mkdirSync (path)); | |
}, | |
folderFromPath: function (f) { | |
var pc = file.getPathChar (); | |
return (string.popLastField (f, pc) + pc); | |
}, | |
getUserDataFolder: function () { | |
return (appConsts.userDataFolder + "/"); | |
} | |
getCurrentFilePath: function () { | |
var tab = appPrefs.myTabs [appPrefs.ixCurrentTab]; | |
return (appConsts.outlinesPath + tab.fname); | |
}, | |
getCurrentFileTitle: function () { | |
var tab = appPrefs.myTabs [appPrefs.ixCurrentTab]; | |
return (tab.name); | |
}, | |
getCurrentFileInfo: function () { //1/15/17 by DW | |
return (appPrefs.myTabs [appPrefs.ixCurrentTab]); | |
}, | |
viewCurrentFileInReader: function () { //7/28/13 by DW | |
file.makeFileViewable (function (theUrl) { | |
if (theUrl === undefined) { | |
dialog.alert ("Can't open the file in the reader, possibly because it's not public."); | |
} | |
else { | |
webBrowser.openUrl (theUrl); | |
} | |
}) | |
openInTacoPie (); | |
}, | |
saveCurrentFileAsMarkdown: function () { //7/28/13 by DW | |
fileSaveAsMarkdownCommand (); | |
}, | |
makeFilePublic: function (callback) { //1/15/17 by DW | |
makeFilePublic (callback); | |
}, | |
getPublicUrl: function () { //1/17/17 by DW | |
var theTab = appPrefs.myTabs [appPrefs.ixCurrentTab]; | |
return (theTab.urlPublic); | |
}, | |
makeFileViewable: function (callback) { //1/15/17 by DW | |
makeFileViewable (callback); | |
}, | |
getFileList: function (callback) { //1/16/17 by DW | |
twGetUserFiles (true, function (privateFiles) { | |
twGetUserFiles (false, function (publicFiles) { | |
function addFiles (whichFiles) { | |
for (var i = 0; i < whichFiles.length; i++) { | |
var theFile = whichFiles [i]; | |
theFiles [theFiles.length] = theFile.path; | |
} | |
} | |
var theFiles = new Array (); | |
addFiles (publicFiles); | |
addFiles (privateFiles); | |
if (callback !== undefined) { | |
callback (theFiles); | |
} | |
}); | |
}); | |
} | |
} | |
var http = { | |
readUrl: function (url, callback) { | |
request (url, function (err, response, body) { | |
if (callback !== undefined) { | |
if (err) { | |
callback (undefined); | |
} | |
else { | |
callback (body.toString ()); | |
} | |
} | |
}); | |
} | |
} | |
var s3 = { | |
newObject: function (path, text, type, callback) { | |
var s = text.toString (); | |
s3Lib.newObject (path, s, type, undefined, function (err, data) { | |
if (callback !== undefined) { | |
callback (err, data); | |
} | |
}); | |
}, | |
getObject: function (path, callback) { | |
s3Lib.getObject (path, function (err, data) { | |
if (callback !== undefined) { | |
if (err) { | |
callback (undefined, err); | |
} | |
else { | |
callback (data); | |
} | |
} | |
}); | |
} | |
} | |
var string = { | |
beginsWith: utils.beginsWith, | |
contains: utils.stringContains, | |
countFields: utils.stringCountFields, | |
dayOfWeekToString: utils.dayOfWeekToString, | |
delete: utils.stringDelete, | |
endsWith: utils.endsWith, | |
filledString: utils.filledString, | |
getRandomPassword: utils.getRandomPassword, | |
getRandomSnarkySlogan: utils.getRandomSnarkySlogan, | |
hashMD5: function (s) { | |
return (crypto.createHash ("md5").update (s).digest ("hex")); | |
}, | |
innerCaseName: utils.innerCaseName, | |
insert: function (source, dest, ix) { | |
ix--; //our version is 1-based | |
return (dest.substr (0, ix) + source + dest.substr (ix)); | |
}, | |
isAlpha: utils.isAlpha, | |
isNumeric: utils.isNumeric, | |
lastField: utils.stringLastField, | |
lower: utils.stringLower, | |
mid: utils.stringMid, | |
monthToString: utils.monthToString, //January, February etc. | |
multipleReplaceAll: utils.multipleReplaceAll, //1/18/17 by DW | |
nthField: utils.stringNthField, | |
padWithZeros: utils.padWithZeros, | |
popExtension: utils.stringPopExtension, //1/18/17 by DW | |
popLastField: utils.stringPopLastField, | |
popTrailing: function (s, ch) { //11/25/13 by DW | |
while (s.length > 0) { | |
if (s [s.length - 1] != ch) { | |
break; | |
} | |
s = string.delete (s, s.length, 1); | |
} | |
return (s); | |
}, | |
replaceAll: utils.replaceAll, | |
stripMarkup: utils.stripMarkup, | |
trimLeading: function (s, ch) { | |
if (ch == undefined) { | |
ch = " "; | |
} | |
return (utils.trimLeading (s, ch)); | |
}, | |
trimTrailing: function (s, ch) { | |
if (ch == undefined) { | |
ch = " "; | |
} | |
return (utils.trimTrailing (s, ch)); | |
}, | |
trimWhitespace: utils.trimWhitespace, | |
upper: utils.stringUpper | |
} | |
var dialog = { | |
alert: function (s) { | |
var package = { | |
text: s, | |
path: scriptName | |
}; | |
bullMancuso.send ("callback", "alertDialog", utils.jsonStringify (package)); | |
}, | |
ask: function (prompt, defaultValue, placeholder, callback) { | |
bullMancuso.send ("askDialog", prompt, defaultValue, placeholder, callback); | |
return (askDialog (prompt, defaultValue, placeholder, callback)); | |
} | |
viewText: function (prompt, s) { | |
showViewTextDialog (prompt, s); | |
}, | |
confirm: function (prompt, callback) { | |
confirmDialog (prompt, callback); | |
}, | |
about: function (urlOpml) { | |
aboutDialogShow (urlOpml); | |
} | |
} | |
var date = { | |
netStandardString: function (theDate) { //12/17/13 by DW | |
return (theDate.toUTCString ()); | |
}, | |
secondsSince: utils.secondsSince | |
} | |
var clock = { | |
now: function () { | |
return (new Date ()); | |
}, | |
waitSeconds: function (ctsecs) { | |
return (sleep (ctsecs * 1000)); | |
var ctloops = 0; | |
for (var whenStart = new Date (); utils.secondsSince (whenStart) < ctsecs; ctloops) { | |
debugMessage (utils.secondsSince (whenStart)); | |
ctloops++; | |
} | |
return (ctloops); | |
} | |
} | |
var speaker = { | |
beep: function () { | |
debugMessage ("runUserScript: speaker.beep ()"); | |
bullMancuso.send ("callback", "speakerBeep", utils.jsonStringify ({})); | |
} | |
} | |
var webBrowser = { | |
openUrl: function (url) { | |
electron.shell.openExternal (url); //5/10/17 by DW | |
} | |
} | |
var twitter = { | |
getMyName: function (callback) { | |
return (twitterLib.getScreenName (callback)); | |
}, | |
tweet: function (theTweet, callback) { | |
return (twitterLib.tweet (theTweet, undefined, debugMessage, callback)); | |
} | |
getUserTweets: function (userId, callback) { | |
var idLastSeen = undefined; | |
twGetUserInfo (userId, function (userinfo) { | |
twGetUserTweets (userinfo.id_str, idLastSeen, function (theTweets) { | |
if (callback !== undefined) { | |
callback (theTweets); | |
} | |
}); | |
}); | |
}, | |
post: function (status, callback) { | |
twTweet (status, 0, function (data) { | |
if (callback !== undefined) { | |
callback (data); | |
} | |
}); | |
} | |
} | |
var fargo = { //11/29/13 by DW | |
version: function () { | |
return (appConsts.version); | |
}, | |
productname: function () { | |
return (appConsts.productname); | |
}, | |
productnameForDisplay: function () { | |
return (appConsts.productnameForDisplay); | |
} | |
} | |
var cms = { | |
version: function () { | |
return (cmsVersion); | |
}, | |
renderPage: function (path) { | |
var tab = getActiveTab (); | |
var xstruct = getTabXstruct (tab); | |
return (cmsRenderPage (tab, xstruct, path)); | |
} | |
} | |
var wordPress = { | |
updatePost: function (title, msgbody, idpost, callback, wpBlogUrl, wpUsername, wpPassword) { | |
var s; | |
if (wpBlogUrl == undefined) { | |
wpBlogUrl = appPrefs.wordpressBlogUrl; | |
} | |
if (wpUsername == undefined) { | |
wpUsername = appPrefs.wordpressUsername; | |
} | |
if (wpPassword == undefined) { | |
wpPassword = appPrefs.wordpressPassword; | |
} | |
if (idpost == undefined) { | |
idpost = 0; | |
} | |
if (msgbody == undefined) { | |
msgbody = ""; | |
} | |
s = "postBody=" + encodeURIComponent (msgbody) + "&weblogUrl=" + encodeURIComponent (wpBlogUrl) + "&idPost=" + encodeURIComponent (idpost) + "&postTitle=" + encodeURIComponent (title) + "&blogUsername=" + encodeURIComponent (wpUsername) + "&blogPassword=" + encodeURIComponent (wpPassword); | |
debugMessage ("wordPress.updatePost: " + s); | |
var jxhr = $.ajax ({ | |
url: updateBlogpostUrl, | |
data: s, | |
type: "POST", | |
dataType: "jsonp", | |
timeout: 30000, | |
jsonpCallback : "getData" | |
}) | |
.success (function (data, status) { | |
if (callback != undefined) { | |
callback (data); | |
} | |
}) | |
.error (function (status) { | |
}); | |
}, | |
postCursor: function (callback) { | |
var idpost = op.attributes.getOne ("idpost"), bodytext = ""; | |
if (idpost == undefined) { | |
idpost = 0; | |
} | |
op.visitSubs ( //get bodytext | |
function (headline, levelnum) { | |
var pretext = "<li>", posttext = "</li>"; | |
if (levelnum == 0) { | |
pretext = "<p>"; | |
posttext = "</p>"; | |
} | |
bodytext += string.filledString ("\t", levelnum) + pretext + headline.getLineText () + posttext + "\r\n"; | |
}, | |
function (levelnum) { | |
bodytext += string.filledString ("\t", levelnum) + "<ul>\r\n"; | |
}, | |
function (levelnum) { | |
bodytext += string.filledString ("\t", levelnum + 1) + "</ul>\r\n"; | |
} | |
); | |
wordPress.updatePost (op.getLineText (), bodytext, idpost, function (data) { | |
if (data.error != undefined) { | |
speaker.beep (); | |
dialog.alert (data.error); | |
return; | |
} | |
if ((op.attributes.getOne ("idpost") == undefined) && (data.idpost != undefined)) { | |
op.attributes.setOne ("idpost", data.idpost); | |
} | |
if ((op.attributes.getOne ("url") == undefined) && (data.link != undefined)) { | |
op.attributes.setOne ("url", data.link); | |
} | |
if (op.attributes.getOne ("type") != "metaWeblogPost") { | |
op.attributes.setOne ("type", "metaWeblogPost"); | |
} | |
//bump ctsaves att on blogpost headline | |
var ctsaves = op.attributes.getOne ("ctSaves"); | |
if (ctsaves == undefined) { | |
ctsaves = 0; | |
} | |
op.attributes.setOne ("ctSaves", ++ctsaves); | |
if (callback != undefined) { | |
callback (data); | |
} | |
}); | |
} | |
} | |
var op = { | |
expand: function () { | |
var package = { | |
verb: "expand", | |
ctLevels: 1 | |
}; | |
bullMancuso.send ("op", utils.jsonStringify (package)); | |
return (true); | |
}, | |
expandAllLevels: function () { | |
return ($(opGetActiveOutliner ()).concord ().op.expandAllLevels ()); | |
}, | |
expandEverything: function () { | |
return ($(opGetActiveOutliner ()).concord ().op.fullExpand ()); | |
}, | |
expandTo: function (headline) { | |
expandToCursor (headline); | |
return (setCursorActive (headline.getCursor ())); | |
}, | |
collapse: function () { | |
return ($(opGetActiveOutliner ()).concord ().op.collapse ()); | |
}, | |
collapseEverything: function () { | |
return ($(opGetActiveOutliner ()).concord ().op.fullCollapse ()); | |
}, | |
go: function (dir, ct) { | |
if (dir == right) { | |
op.expand (); | |
} | |
return ($(opGetActiveOutliner ()).concord ().op.go (dir, ct)); | |
}, | |
firstSummit: function () { | |
opFirstSummit (); | |
return (true); | |
}, | |
countSubs: function () { | |
return ($(opGetActiveOutliner ()).concord().op.countSubs ()); | |
}, | |
hasSubs: function () { | |
return (op.countSubs () > 0); | |
}, | |
getLineText: function () { | |
return ($(opGetActiveOutliner ()).concord ().op.getLineText ()); | |
}, | |
setLineText: function (s) { //8/7/13 by DW | |
return ($(opGetActiveOutliner ()).concord ().op.setLineText (s)); | |
}, | |
insert: function (s, direction) { | |
return ($(opGetActiveOutliner ()).concord ().op.insert (s, direction)); | |
}, | |
reorg: function (dir, ct) { | |
if (ct == undefined) { | |
ct = 1; | |
} | |
return ($(opGetActiveOutliner ()).concord ().op.reorg (dir, ct)); | |
}, | |
promote: function () { | |
return ($(opGetActiveOutliner ()).concord ().op.promote ()); | |
}, | |
demote: function () { | |
return ($(opGetActiveOutliner ()).concord ().op.demote ()); | |
}, | |
deleteSubs: function () { | |
return ($(opGetActiveOutliner ()).concord ().op.deleteSubs ()); | |
}, | |
getCursorOpml: function () { | |
return ($(opGetActiveOutliner ()).concord ().op.cursorToXml ()); | |
}, | |
insertOpml: function (opmltext, dir) { | |
if (dir == undefined) { | |
dir = down; | |
} | |
return ($(opGetActiveOutliner ()).concord ().op.insertXml (opmltext, dir)); | |
}, | |
bold: function () { | |
return ($(opGetActiveOutliner ()).concord ().op.bold ()); | |
}, | |
italic: function () { | |
return ($(opGetActiveOutliner ()).concord ().op.italic ()); | |
}, | |
strikethrough: function () { | |
return ($(opGetActiveOutliner ()).concord ().op.strikethrough ()); | |
}, | |
link: function () { | |
return ($(opGetActiveOutliner ()).concord ().op.link ()); | |
}, | |
isComment: function () { | |
var isComment = op.attributes.getOne ("isComment") | |
if ((isComment == undefined) || (isComment == "false")) { | |
return (false); | |
} | |
else { | |
return (true); | |
} | |
return ($(opGetActiveOutliner ()).concord ().script.isComment ()); | |
}, | |
unComment: function () { | |
op.attributes.deleteOne ("isComment"); | |
return ($(opGetActiveOutliner ()).concord ().script.unComment ()); | |
}, | |
makeComment: function () { | |
op.attributes.setOne ("isComment", "true"); | |
return ($(opGetActiveOutliner ()).concord ().script.makeComment ()); | |
}, | |
toggleComment: function () { | |
if (op.isComment ()) { | |
op.unComment (); | |
} | |
else { | |
op.makeComment (); | |
} | |
}, | |
setRenderMode: function (flrendermode) { //7/28/13 by DW | |
$(opGetActiveOutliner ()).concord ().op.setRenderMode (flrendermode); | |
}, | |
getRenderMode: function () { //7/28/13 by DW | |
return ($(opGetActiveOutliner ()).concord ().op.getRenderMode ()); | |
}, | |
toggleRenderMode: function () { //7/28/13 by DW | |
op.setRenderMode (!op.getRenderMode ()); | |
}, | |
getCursor: function () { | |
return ($(opGetActiveOutliner ()).concord ().op.getCursorRef ()); | |
}, | |
getCursorUrl: function () { | |
var parent = undefined; | |
op.visitToSummit (function (headline) { | |
var type = headline.attributes.getOne ("type"); | |
if (type != undefined) { | |
parent = headline; | |
return (false); | |
} | |
return (true); | |
}); | |
return (getTrexUrl (opGetActiveOutliner (), parent, true)); | |
}, | |
runSelection: function () { | |
var value = eval (op.getLineText ()); | |
op.deleteSubs (); | |
op.insert (value, right); | |
op.go (left, 1); | |
}, | |
setModified: function () { | |
return ($(opGetActiveOutliner ()).concord ().op.markChanged ()); | |
}, | |
getModified: function () { | |
return ($(opGetActiveOutliner ()).concord ().op.changed ()); | |
}, | |
setTextMode: function (fltextmode) { | |
$(opGetActiveOutliner ()).concord ().op.setTextMode (fltextmode); | |
}, | |
visitSubs: function (lineCallback, indentCallback, outdentCallback) { | |
var levelnum = 0; | |
var visitSub = function (sub) { | |
lineCallback (sub, levelnum); | |
if (sub.countSubs () > 0) { | |
if (indentCallback != undefined) { | |
indentCallback (levelnum); | |
} | |
levelnum++; | |
sub.visitLevel (visitSub); | |
levelnum--; | |
if (outdentCallback != undefined) { | |
outdentCallback (levelnum); | |
} | |
} | |
return (true); | |
}; | |
op.getCursor ().visitLevel (visitSub); | |
}, | |
visitAll: function (callback) { | |
return ($(opGetActiveOutliner ()).concord ().op.visitAll (callback)); | |
}, | |
visitToSummit: function (callback) { | |
return ($(opGetActiveOutliner ()).concord ().op.visitToSummit (callback)); | |
}, | |
attributes: { | |
getAll: function () { | |
return ($(opGetActiveOutliner ()).concord ().op.attributes.getAll ()); | |
}, | |
getOne: function (name) { | |
return $(opGetActiveOutliner ()).concord ().op.attributes.getOne (name); | |
}, | |
setOne: function (name, value) { | |
return $(opGetActiveOutliner ()).concord ().op.attributes.setOne (name, value); | |
}, | |
addGroup: function (atts) { | |
return $(opGetActiveOutliner ()).concord ().op.attributes.setGroup (atts); | |
}, | |
deleteOne: function (name) { | |
var atts = op.attributes.getAll (); | |
if (atts [name] != undefined) { | |
delete atts [name]; | |
} | |
op.attributes.addGroup (atts); | |
}, | |
makeEmpty: function () { | |
var atts = new Object (); | |
op.attributes.addGroup (atts); | |
} | |
} | |
} | |
var script = { | |
isComment: function () { | |
var isComment = op.attributes.getOne ("isComment") | |
if ((isComment == undefined) || (isComment == "false")) { | |
return (false); | |
} | |
else { | |
return (true); | |
} | |
return ($(opGetActiveOutliner ()).concord ().script.isComment ()); | |
}, | |
unComment: function () { | |
op.attributes.deleteOne ("isComment"); | |
return ($(opGetActiveOutliner ()).concord ().script.unComment ()); | |
}, | |
makeComment: function () { | |
op.attributes.setOne ("isComment", "true"); | |
return ($(opGetActiveOutliner ()).concord ().script.makeComment ()); | |
}, | |
toggleComment: function () { | |
if (script.isComment ()) { | |
script.unComment (); | |
} | |
else { | |
script.makeComment (); | |
} | |
}, | |
} | |
stats.ctScriptRuns++; | |
stats.whenLastScriptRun = now; | |
statsChanged (); | |
with (localStorage) { | |
return (eval (s)); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment