diff --git a/js/ui/webui/clip.js b/js/ui/webui/clip.js new file mode 100644 index 0000000..062ffc2 --- /dev/null +++ b/js/ui/webui/clip.js @@ -0,0 +1,124 @@ +/**** WEB CLipBoard *****/ +var NL='\n'; + +Clip = { + share: function share(id) { + var content = '

TODO

'; + var idlabel='??'; + content = ''; + idlabel=(editorWin[id]._options && editorWin[id]._options.file)||'*'; + var buttons = [ + '', + '', + '', + ].join(NL); + + Clip.createSnippets(id,function (snippets) { + content += ('
'+snippets.join(NL)+'
'); + content = '
'+buttons+content+'
'; + var panel = openWin(1,content,{title:'WEB Clipboard '+idlabel, width:400, height:300}); + }); + }, + // helpers + copyShare: function copyShare(id,tag) { + var data = UI('SourceText'+id).getValue(); + Clip.clipboardStore(jamConfig.user||'user',tag||'no tag',id,data,function (stat) { + console.log(stat) + if(stat=='OK') Clip.reloadShare(id) + }) + }, + createSnippets: function createSnippets(id,cb) { + Clip.clipboardGet(id,function (data,err) { + var snippets=[]; + if (err) { + snippets=[err]; + } else if (data.length) { + // test + data.forEach(function (snip) { + var user=snip.user; + var code=snip.data; + var ids=(snip.tag?'#'+snip.tag+' ':'')+snip.user+'@'+snip.date; + var slabel=ids; + snippets.push( + ''+ + ''+NL+''+NL + ); + }) + } + cb(snippets); + }) + }, + pasteShare: function pasteShare(id) { + var text = document.getElementById('ClipText-'+id).value; + UI('SourceText'+id).setValue(text); + }, + reloadShare: function reloadShare(id) { + Clip.createSnippets(id, function (snippets) { + document.getElementById('Clipboard-'+id).innerHTML=snippets.join(NL); + }) + document.getElementById('ClipText-'+id).value=UI('SourceText'+id).getValue(); + }, + updateShareText: function updateShareText(from,to) { + var text = document.getElementById(from).value; + document.getElementById(to).value=text; + }, + + /******* WEBCLIP ***********/ + clipboardStore: function (from,tag,id,data,cb) { + if (!cb) cb=console.log.bind(console); + var url=jamConfig.webclipUrl; + if (url.indexOf('http')!=0) url = 'http://'+url; + + try { + var request = new XMLHttpRequest(); + request.open("POST", url, true); + request.onreadystatechange = function () { + if(request.readyState === 4) + { + if(request.status === 200 || request.status == 0) + { + var allText = request.responseText; + if (cb) cb(allText) + } else if (cb) cb('copy to '+jamConfig.webclipUrl+' failed (status)'); + } + } + request.onerror = function (err) { + if (cb) cb('copy to '+jamConfig.webclipUrl+' failed (error)') + } + request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); + console.log(JSON.stringify({user:from,group:jamConfig.group+'-'+id,data:data})) + request.send(JSON.stringify({user:from,tag:tag,group:jamConfig.group+'-'+id,data:data})); + } catch (e) { + if (cb) cb(e) + } + }, + + clipboardGet: function (id,cb) { + var url=jamConfig.webclipUrl; + if (url.indexOf('http')!=0) url = 'http://'+url; + try { + var request = new XMLHttpRequest(); + request.open("GET", url+'/?time='+jamConfig.webclipTime+'&group='+jamConfig.group+'-'+id, true); + request.onreadystatechange = function () { + if(request.readyState === 4) + { + if(request.status === 200 || request.status == 0) + { + var allText = request.responseText; + var clips = JSON.parse(allText); + cb(clips) + } else cb(null,'paste from '+jamConfig.webclipUrl+' failed (status)'); + } + } + request.onerror = function (err) { + cb(null,'paste from '+jamConfig.webclipUrl+' failed (error)') + } + request.send(null); + } catch (e) { + cb(null,e) + } + }, + +}