From 079822dfecfba659a491034c447c679dab2424c7 Mon Sep 17 00:00:00 2001 From: Jason Croft Date: Mon, 9 May 2016 16:27:35 -0400 Subject: Start extending to support GitLab authentication. Add necessary dependency. Add baseURL parameter for self-hosted GitLab Add necessary require. Add block for GitLab auth. Fix typo Update font-awesome dependency for GitLab icon. Use a color closer to GitLab orange. More direct TODO --- public/views/modal.ejs | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'public') diff --git a/public/views/modal.ejs b/public/views/modal.ejs index 260ff423..4eb33bf3 100644 --- a/public/views/modal.ejs +++ b/public/views/modal.ejs @@ -28,6 +28,11 @@ Sign in via Dropbox <% } %> + <% if(gitlab) { %> + + Sign in via GitLab + + <% } %> -- cgit v1.2.3 From 277bf60a2ea539645428360734f9f8d2e33e3631 Mon Sep 17 00:00:00 2001 From: Jason Croft Date: Mon, 9 May 2016 17:06:44 -0400 Subject: Add GitLab options. --- public/views/header.ejs | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'public') diff --git a/public/views/header.ejs b/public/views/header.ejs index 40dee0b0..18369ba9 100644 --- a/public/views/header.ejs +++ b/public/views/header.ejs @@ -42,6 +42,10 @@
  • Gist
  • <% } %> + <% if(typeof gitlab !== 'undefined' && gitlab) { %> +
  • Snippet +
  • + <% } %>
  • Dropbox @@ -50,6 +54,8 @@
  • Gist
  • +
  • Snippet +
  • Clipboard
  • @@ -127,6 +133,10 @@
  • Gist
  • <% } %> + <% if(typeof gitlab !== 'undefined' && gitlab) { %> +
  • Snippet +
  • + <% } %>
  • Dropbox @@ -135,6 +145,8 @@
  • Gist
  • +
  • Snippet +
  • Clipboard
  • -- cgit v1.2.3 From 476cabd10952f026f331754baf9846b1aad917cd Mon Sep 17 00:00:00 2001 From: Jason Croft Date: Mon, 9 May 2016 17:07:02 -0400 Subject: Attach to snippet classes. --- public/js/index.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'public') diff --git a/public/js/index.js b/public/js/index.js index 3f0ed593..0b10c9e0 100644 --- a/public/js/index.js +++ b/public/js/index.js @@ -496,12 +496,14 @@ var ui = { export: { dropbox: $(".ui-save-dropbox"), googleDrive: $(".ui-save-google-drive"), - gist: $(".ui-save-gist") + gist: $(".ui-save-gist"), + snippet: $(".ui-save-snippet") }, import: { dropbox: $(".ui-import-dropbox"), googleDrive: $(".ui-import-google-drive"), gist: $(".ui-import-gist"), + snippet: $(".ui-import-snippet"), clipboard: $(".ui-import-clipboard") }, beta: { -- cgit v1.2.3 From 17d2249ec31bce28f79e8def4be1515ac465d29b Mon Sep 17 00:00:00 2001 From: Jason Croft Date: Mon, 9 May 2016 22:37:51 -0400 Subject: Define snippet import modal --- public/views/body.ejs | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'public') diff --git a/public/views/body.ejs b/public/views/body.ejs index 771da880..23a3acef 100644 --- a/public/views/body.ejs +++ b/public/views/body.ejs @@ -151,4 +151,24 @@ + + <%- include modal %> \ No newline at end of file -- cgit v1.2.3 From 70f6e5bc2cbdb15ff48bdf49b09d7c4bb78ea4ba Mon Sep 17 00:00:00 2001 From: Jason Croft Date: Mon, 9 May 2016 22:38:13 -0400 Subject: Define events for snippet actions --- public/js/index.js | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) (limited to 'public') diff --git a/public/js/index.js b/public/js/index.js index 0b10c9e0..17516169 100644 --- a/public/js/index.js +++ b/public/js/index.js @@ -1136,6 +1136,8 @@ ui.toolbar.export.googleDrive.click(function (e) { }); //export to gist ui.toolbar.export.gist.attr("href", noteurl + "/gist"); +//export to snippet +ui.toolbar.export.snippet.attr("href", noteurl + "/snippet"); //import from dropbox ui.toolbar.import.dropbox.click(function () { var options = { @@ -1188,6 +1190,10 @@ function buildImportFromGoogleDrive() { ui.toolbar.import.gist.click(function () { //na }); +//import from snippet +ui.toolbar.import.snippet.click(function () { + //na +}); //import from clipboard ui.toolbar.import.clipboard.click(function () { //na @@ -1355,6 +1361,45 @@ $("#gistImportModalConfirm").click(function () { } }); +// snippet import modal +$("#snippetImportModalClear").click(function () { + $("#snippetImportModalContent").val(''); +}); +$("#snippetImportModalConfirm").click(function () { + var snippeturl = $("#snippetImportModalContent").val(); + if (!snippeturl) return; + $('#snippetImportModal').modal('hide'); + $("#snippetImportModalContent").val(''); + if (!isValidURL(snippeturl)) { + showMessageModal(' Import from Snippet', 'Not a valid URL :(', '', '', false); + return; + } else { + // TODO: Validate against config.gitlab.baseURL + ui.spinner.show(); + $.get(snippeturl) + .success(function (data) { + if (data.files) { + var contents = ""; + Object.keys(data.files).forEach(function (key) { + contents += key; + contents += '\n---\n'; + contents += data.files[key].content; + contents += '\n\n'; + }); + replaceAll(contents); + } else { + showMessageModal(' Import from Snippet', 'Unable to fetch snippet files :(', '', '', false); + } + }) + .error(function (data) { + showMessageModal(' Import from Snippet', 'Not a valid Snippet URL :(', '', JSON.stringify(data), false); + }) + .complete(function () { + ui.spinner.hide(); + }); + } +}); + function parseToEditor(data) { var parsed = toMarkdown(data); if (parsed) -- cgit v1.2.3 From 3dd3e6bc3596c0bba50dca3d1789f55883e0f681 Mon Sep 17 00:00:00 2001 From: Jason Croft Date: Wed, 11 May 2016 17:05:25 -0400 Subject: Allow importing from GitLab snippet --- public/js/index.js | 69 +++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 48 insertions(+), 21 deletions(-) (limited to 'public') diff --git a/public/js/index.js b/public/js/index.js index 17516169..7b22f7fa 100644 --- a/public/js/index.js +++ b/public/js/index.js @@ -243,6 +243,15 @@ var lastInfo = { }; var personalInfo = {}; var onlineUsers = []; +var fileTypes = { + "pl": "perl", + "cgi": "perl", + "js": "javascript", + "php": "php", + "sh": "bash", + "rb": "ruby", + "html": "html" +} //editor settings var textit = document.getElementById("textit"); @@ -1192,7 +1201,22 @@ ui.toolbar.import.gist.click(function () { }); //import from snippet ui.toolbar.import.snippet.click(function () { - //na + $.get(serverurl + '/gitlab') + .success(function (data) { + $("#snippetImportModalAccessToken").val(data.accesstoken); + $("#snippetImportModalBaseURL").val(data.baseURL); + $("#snippetImportModalContent").prop('disabled', false); + $("#snippetImportModalConfirm").prop('disabled', false); + $("#snippetImportModalLoading").hide(); + $("#snippetImportModal").modal('toggle'); + }) + .error(function (data) { + showMessageModal(' Import from Snippet', 'Unable to fetch gitlab parameters :(', '', '', false); + }) + .complete(function () { + //na + }); + return false; }); //import from clipboard ui.toolbar.import.clipboard.click(function () { @@ -1370,32 +1394,35 @@ $("#snippetImportModalConfirm").click(function () { if (!snippeturl) return; $('#snippetImportModal').modal('hide'); $("#snippetImportModalContent").val(''); - if (!isValidURL(snippeturl)) { - showMessageModal(' Import from Snippet', 'Not a valid URL :(', '', '', false); - return; + if (!/^.+\/snippets\/.+$/.test(snippeturl)) { + showMessageModal(' Import from Snippet', 'Not a valid Snippet URL :(', '', '', false); } else { - // TODO: Validate against config.gitlab.baseURL ui.spinner.show(); - $.get(snippeturl) - .success(function (data) { - if (data.files) { - var contents = ""; - Object.keys(data.files).forEach(function (key) { - contents += key; - contents += '\n---\n'; - contents += data.files[key].content; - contents += '\n\n'; + var accessToken = '?access_token=' + $("#snippetImportModalAccessToken").val(); + var fullURL = $("#snippetImportModalBaseURL").val() + '/api/v3' + snippeturl; + $.get(fullURL + accessToken) + .success(function(data) { + var content = '# ' + (data.title || "Snippet Import"); + var fileInfo = data.file_name.split('.'); + $.get(fullURL + '/raw' + accessToken) + .success(function (raw) { + if (raw) { + content += "\n\n```"; + content += fileTypes[fileInfo[1]] + "=\n"; + content += raw; + content += "\n```"; + replaceAll(content); + } + }) + .error(function (data) { + showMessageModal(' Import from Snippet', 'Not a valid Snippet URL :(', '', JSON.stringify(data), false); + }) + .complete(function () { + ui.spinner.hide(); }); - replaceAll(contents); - } else { - showMessageModal(' Import from Snippet', 'Unable to fetch snippet files :(', '', '', false); - } }) .error(function (data) { showMessageModal(' Import from Snippet', 'Not a valid Snippet URL :(', '', JSON.stringify(data), false); - }) - .complete(function () { - ui.spinner.hide(); }); } }); -- cgit v1.2.3 From 9f401b3fa88aa60c435c548f807fbb0742aaa2e0 Mon Sep 17 00:00:00 2001 From: Jason Croft Date: Wed, 11 May 2016 17:05:53 -0400 Subject: Fully-fleshed snippetImportModal --- public/views/body.ejs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'public') diff --git a/public/views/body.ejs b/public/views/body.ejs index 23a3acef..039690ef 100644 --- a/public/views/body.ejs +++ b/public/views/body.ejs @@ -158,15 +158,17 @@ -- cgit v1.2.3 From de998c4a0fcbadc4c0353c8e65d5769c271cfcd9 Mon Sep 17 00:00:00 2001 From: Jason Croft Date: Wed, 11 May 2016 21:12:48 -0400 Subject: Check to make sure GitLab is configured before showing import option. --- public/views/header.ejs | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'public') diff --git a/public/views/header.ejs b/public/views/header.ejs index 18369ba9..051817dc 100644 --- a/public/views/header.ejs +++ b/public/views/header.ejs @@ -54,8 +54,10 @@
  • Gist
  • + <% if(typeof gitlab !== 'undefined' && gitlab) { %>
  • Snippet
  • + <% } %>
  • Clipboard
  • @@ -145,8 +147,10 @@
  • Gist
  • + <% if(typeof gitlab !== 'undefined' && gitlab) { %>
  • Snippet
  • + <% } %>
  • Clipboard
  • -- cgit v1.2.3 From c16345ab128288b92023e789f09cabb5197d1181 Mon Sep 17 00:00:00 2001 From: Jason Croft Date: Thu, 12 May 2016 11:19:14 -0400 Subject: Can now select from available projects and snippets to build import URL. --- public/css/index.css | 5 +++++ public/js/index.js | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ public/views/body.ejs | 20 ++++++++++++++++++-- 3 files changed, 74 insertions(+), 2 deletions(-) (limited to 'public') diff --git a/public/css/index.css b/public/css/index.css index fdfae0ac..aaf84a04 100644 --- a/public/css/index.css +++ b/public/css/index.css @@ -328,6 +328,11 @@ div[contenteditable]:empty:not(:focus):before{ border-bottom: 1px solid #ccc; } +.snippet-import-or { + text-align: center; + width: 100%; +} + .status-bar { background: #1c1c1e; border-top: 1px solid #343434; diff --git a/public/js/index.js b/public/js/index.js index 7b22f7fa..199c678e 100644 --- a/public/js/index.js +++ b/public/js/index.js @@ -552,6 +552,10 @@ var ui = { codemirrorSizer: $(".ui-edit-area .CodeMirror .CodeMirror-sizer"), codemirrorSizerInner: $(".ui-edit-area .CodeMirror .CodeMirror-sizer > div"), markdown: $(".ui-view-area .markdown-body") + }, + modal: { + snippetProjects: $("#snippetImportModalProjects"), + snippetSnippets: $("#snippetImportModalSnippets") } }; @@ -1209,6 +1213,17 @@ ui.toolbar.import.snippet.click(function () { $("#snippetImportModalConfirm").prop('disabled', false); $("#snippetImportModalLoading").hide(); $("#snippetImportModal").modal('toggle'); + $("#snippetImportModalProjects").find('option').remove().end().append(''); + if (data.projects) { + data.projects.sort(function(a,b) { + return (a.path_with_namespace < b.path_with_namespace) ? -1 : ((a.path_with_namespace > b.path_with_namespace) ? 1 : 0); + }); + data.projects.forEach(function(project) { + $(''); + data.forEach(function(snippet) { + $('