├── .gitignore
├── LICENSE
├── README.md
├── _config.yml
├── build.sh
├── cfg
├── apiConfig.json
└── smtpConfig.json
├── genkeys.sh
├── install.sh
├── js
├── holomap.core.js
├── holomap.httpserver.js
├── holomap.membrane.js
└── holomap.nodestore.js
├── package.json
├── pub
├── css
│ ├── bootstrap-combined.no-icons.min.css
│ ├── bootstrap-datepicker.css
│ ├── croppie.css
│ ├── jquery.timepicker.css
│ ├── page.css
│ ├── quill.snow.css
│ ├── skin.css
│ └── sweetalert.css
├── embed.dev.html
├── embed.html
├── holomap.js
├── ico
│ └── favicon.ico
├── img
│ ├── button_background.png
│ ├── cancel.png
│ ├── close.png
│ ├── create.png
│ ├── decrease.png
│ ├── default.png
│ ├── default_avatar.png
│ ├── delete.png
│ ├── edit.png
│ ├── increase.png
│ ├── loading.gif
│ ├── logo.png
│ ├── mask.jpg
│ ├── navHome.png
│ ├── navPrep.png
│ ├── navProfile.png
│ ├── navSearch.png
│ ├── settings.png
│ └── sprites
│ │ ├── default.png
│ │ ├── orb.png
│ │ ├── ring.png
│ │ └── shell.png
├── index.dev.html
├── index.html
├── js
│ ├── holomap.browser.js
│ ├── holomap.corelink.js
│ ├── holomap.infopanel.commentsResizer.js
│ ├── holomap.infopanel.js
│ ├── holomap.infopanel.resizer.js
│ ├── holomap.template.js
│ ├── holomap.viewer.js
│ └── holomap.viewer.ring.js
├── lib
│ ├── ColorPropsPlugin.min.js
│ ├── OrbitControls.js
│ ├── TweenMax.min.js
│ ├── active-line.js
│ ├── aes.js
│ ├── bootstrap-datepicker.js
│ ├── bootstrap-typeahead.js
│ ├── closebrackets.js
│ ├── codemirror.js
│ ├── croppie.js
│ ├── datepair.js
│ ├── empty.js
│ ├── javascript.js
│ ├── jquery.datepair.js
│ ├── jquery.form.js
│ ├── jquery.min.js
│ ├── jquery.timepicker.js
│ ├── jquery.timepicker.min.js
│ ├── jquery.tinymce.min.js
│ ├── langs
│ │ └── readme.md
│ ├── matchbrackets.js
│ ├── pixi.js
│ ├── plugins
│ │ ├── advlist
│ │ │ └── plugin.min.js
│ │ ├── anchor
│ │ │ └── plugin.min.js
│ │ ├── autolink
│ │ │ └── plugin.min.js
│ │ ├── autoresize
│ │ │ └── plugin.min.js
│ │ ├── autosave
│ │ │ └── plugin.min.js
│ │ ├── bbcode
│ │ │ └── plugin.min.js
│ │ ├── charmap
│ │ │ └── plugin.min.js
│ │ ├── code
│ │ │ └── plugin.min.js
│ │ ├── codesample
│ │ │ ├── css
│ │ │ │ └── prism.css
│ │ │ └── plugin.min.js
│ │ ├── colorpicker
│ │ │ └── plugin.min.js
│ │ ├── contextmenu
│ │ │ └── plugin.min.js
│ │ ├── directionality
│ │ │ └── plugin.min.js
│ │ ├── emoticons
│ │ │ ├── img
│ │ │ │ ├── smiley-cool.gif
│ │ │ │ ├── smiley-cry.gif
│ │ │ │ ├── smiley-embarassed.gif
│ │ │ │ ├── smiley-foot-in-mouth.gif
│ │ │ │ ├── smiley-frown.gif
│ │ │ │ ├── smiley-innocent.gif
│ │ │ │ ├── smiley-kiss.gif
│ │ │ │ ├── smiley-laughing.gif
│ │ │ │ ├── smiley-money-mouth.gif
│ │ │ │ ├── smiley-sealed.gif
│ │ │ │ ├── smiley-smile.gif
│ │ │ │ ├── smiley-surprised.gif
│ │ │ │ ├── smiley-tongue-out.gif
│ │ │ │ ├── smiley-undecided.gif
│ │ │ │ ├── smiley-wink.gif
│ │ │ │ └── smiley-yell.gif
│ │ │ └── plugin.min.js
│ │ ├── fullpage
│ │ │ └── plugin.min.js
│ │ ├── fullscreen
│ │ │ └── plugin.min.js
│ │ ├── help
│ │ │ ├── img
│ │ │ │ └── logo.png
│ │ │ └── plugin.min.js
│ │ ├── hr
│ │ │ └── plugin.min.js
│ │ ├── image
│ │ │ └── plugin.min.js
│ │ ├── imagetools
│ │ │ └── plugin.min.js
│ │ ├── importcss
│ │ │ └── plugin.min.js
│ │ ├── insertdatetime
│ │ │ └── plugin.min.js
│ │ ├── legacyoutput
│ │ │ └── plugin.min.js
│ │ ├── link
│ │ │ └── plugin.min.js
│ │ ├── lists
│ │ │ └── plugin.min.js
│ │ ├── media
│ │ │ └── plugin.min.js
│ │ ├── nonbreaking
│ │ │ └── plugin.min.js
│ │ ├── noneditable
│ │ │ └── plugin.min.js
│ │ ├── pagebreak
│ │ │ └── plugin.min.js
│ │ ├── paste
│ │ │ └── plugin.min.js
│ │ ├── preview
│ │ │ └── plugin.min.js
│ │ ├── print
│ │ │ └── plugin.min.js
│ │ ├── save
│ │ │ └── plugin.min.js
│ │ ├── searchreplace
│ │ │ └── plugin.min.js
│ │ ├── spellchecker
│ │ │ └── plugin.min.js
│ │ ├── tabfocus
│ │ │ └── plugin.min.js
│ │ ├── table
│ │ │ └── plugin.min.js
│ │ ├── template
│ │ │ └── plugin.min.js
│ │ ├── textcolor
│ │ │ └── plugin.min.js
│ │ ├── textpattern
│ │ │ └── plugin.min.js
│ │ ├── toc
│ │ │ └── plugin.min.js
│ │ ├── visualblocks
│ │ │ ├── css
│ │ │ │ └── visualblocks.css
│ │ │ └── plugin.min.js
│ │ ├── visualchars
│ │ │ └── plugin.min.js
│ │ └── wordcount
│ │ │ └── plugin.min.js
│ ├── quill.htmlEditButton.min.js
│ ├── quill.js
│ ├── require.js
│ ├── sha3.js
│ ├── sha512.js
│ ├── site.js
│ ├── skins
│ │ └── lightgray
│ │ │ ├── content.inline.min.css
│ │ │ ├── content.min.css
│ │ │ ├── fonts
│ │ │ ├── tinymce-small.eot
│ │ │ ├── tinymce-small.svg
│ │ │ ├── tinymce-small.ttf
│ │ │ ├── tinymce-small.woff
│ │ │ ├── tinymce.eot
│ │ │ ├── tinymce.svg
│ │ │ ├── tinymce.ttf
│ │ │ └── tinymce.woff
│ │ │ ├── img
│ │ │ ├── anchor.gif
│ │ │ ├── loader.gif
│ │ │ ├── object.gif
│ │ │ └── trans.gif
│ │ │ └── skin.min.css
│ ├── sweetalert.min.js
│ ├── themes
│ │ ├── inlite
│ │ │ └── theme.min.js
│ │ └── modern
│ │ │ └── theme.min.js
│ ├── three.min.js
│ ├── tinymce.min.js
│ └── twin-bcrypt.min.js
├── mp3
│ └── beep.mp3
├── portal.html
└── ttf
│ ├── Archivo-Bold.ttf
│ ├── Archivo-BoldItalic.ttf
│ ├── Archivo-Italic.ttf
│ ├── Archivo-Medium.ttf
│ ├── Archivo-MediumItalic.ttf
│ ├── Archivo-Regular.ttf
│ ├── Archivo-SemiBold.ttf
│ └── Archivo-SemiBoldItalic.ttf
├── server.js
├── setup.txt
├── start_dev
└── start_production
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | /.env
3 | /node_modules/
4 | /npm-debug.log
5 | /pub/holomap.build.js
6 | /tmp/
7 | /pub/img/user/
8 | /pub/img/user/thumb/
9 | db
10 | subscriptions
11 | package-lock.json
12 | sslcert
13 | /pub/privacy.html
14 | /pub/terms.html
15 | /cfg/apiConfig.json
16 | /cfg/smtpConfig.json
17 | /pub/css/skin.css
18 | /log/
19 | /log/*
20 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Holomap Proton
2 |
3 | Holomap is a real-time collaborative holonic mapping platform. For more information please visit holomap.org.
4 |
5 | ## Installation
6 |
7 | 1. Install imagemagick (`sudo apt install imagemagick` on most systems)
8 |
9 | 2. `./install.sh`
10 |
11 | ## Dev Server
12 | `./start_dev`
13 |
14 | You should see it running at
]*>/gi,"[quote]"),c(/<\/blockquote>/gi,"[/quote]"),c(/
/gi,"\n"),c(/
/gi,"\n"),c(/
/gi,"\n"),c(//gi,""),c(/<\/p>/gi,"\n"),c(/ |\u00a0/gi," "),c(/"/gi,'"'),c(/</gi,"<"),c(/>/gi,">"),c(/&/gi,"&"),a},_punbb_bbcode2html:function(a){function c(b,c){a=a.replace(b,c)}return a=b.trim(a),c(/\n/gi,"
"),c(/\[b\]/gi,""),c(/\[\/b\]/gi,""),c(/\[i\]/gi,""),c(/\[\/i\]/gi,""),c(/\[u\]/gi,""),c(/\[\/u\]/gi,""),c(/\[url=([^\]]+)\](.*?)\[\/url\]/gi,'$2'),c(/\[url\](.*?)\[\/url\]/gi,'$1'),c(/\[img\](.*?)\[\/img\]/gi,''),c(/\[color=(.*?)\](.*?)\[\/color\]/gi,'$2'),c(/\[code\](.*?)\[\/code\]/gi,'$1 '),c(/\[quote.*?\](.*?)\[\/quote\]/gi,'$1 '),a}}}),function(){}}),d("0")()}(); -------------------------------------------------------------------------------- /pub/lib/plugins/code/plugin.min.js: -------------------------------------------------------------------------------- 1 | !function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i
code[class*="language-"], 58 | pre[class*="language-"] { 59 | background: #f5f2f0; 60 | } 61 | 62 | /* Inline code */ 63 | :not(pre) > code[class*="language-"] { 64 | padding: .1em; 65 | border-radius: .3em; 66 | } 67 | 68 | .token.comment, 69 | .token.prolog, 70 | .token.doctype, 71 | .token.cdata { 72 | color: slategray; 73 | } 74 | 75 | .token.punctuation { 76 | color: #999; 77 | } 78 | 79 | .namespace { 80 | opacity: .7; 81 | } 82 | 83 | .token.property, 84 | .token.tag, 85 | .token.boolean, 86 | .token.number, 87 | .token.constant, 88 | .token.symbol, 89 | .token.deleted { 90 | color: #905; 91 | } 92 | 93 | .token.selector, 94 | .token.attr-name, 95 | .token.string, 96 | .token.char, 97 | .token.builtin, 98 | .token.inserted { 99 | color: #690; 100 | } 101 | 102 | .token.operator, 103 | .token.entity, 104 | .token.url, 105 | .language-css .token.string, 106 | .style .token.string { 107 | color: #a67f59; 108 | background: hsla(0, 0%, 100%, .5); 109 | } 110 | 111 | .token.atrule, 112 | .token.attr-value, 113 | .token.keyword { 114 | color: #07a; 115 | } 116 | 117 | .token.function { 118 | color: #DD4A68; 119 | } 120 | 121 | .token.regex, 122 | .token.important, 123 | .token.variable { 124 | color: #e90; 125 | } 126 | 127 | .token.important, 128 | .token.bold { 129 | font-weight: bold; 130 | } 131 | .token.italic { 132 | font-style: italic; 133 | } 134 | 135 | .token.entity { 136 | cursor: help; 137 | } 138 | 139 | -------------------------------------------------------------------------------- /pub/lib/plugins/colorpicker/plugin.min.js: -------------------------------------------------------------------------------- 1 | !function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i ",b.each(d,function(b){var d=c+"/img/smiley-"+b+".gif";a+=' '}),a+=""}),a+=""}var e=[["cool","cry","embarassed","foot-in-mouth"],["frown","innocent","kiss","laughing"],["money-mouth","sealed","smile","surprised"],["tongue-out","undecided","wink","yell"]];a.addButton("emoticons",{type:"panelbutton",panel:{role:"application",autohide:!0,html:d,onclick:function(b){var c=a.dom.getParent(b.target,"a");c&&(a.insertContent(' '),this.hide())}},tooltip:"Emoticons"})}),function(){}}),d("0")()}(); -------------------------------------------------------------------------------- /pub/lib/plugins/fullpage/plugin.min.js: -------------------------------------------------------------------------------- 1 | !function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i
"})}),c},c=function(a){return a.replace(//g,function(a,b){return unescape(b)})};return{protectHtml:b,unprotectHtml:c}}),g("0",["1","2","3","4","5","6"],function(a,b,c,d,e,f){return d.add("fullpage",function(d){function g(){var a=h();d.windowManager.open({title:"Document properties",data:a,defaults:{type:"textbox",size:40},body:[{name:"title",label:"Title"},{name:"keywords",label:"Keywords"},{name:"description",label:"Description"},{name:"robots",label:"Robots"},{name:"author",label:"Author"},{name:"docencoding",label:"Encoding"}],onSubmit:function(b){i(e.extend(a,b.data))}})}function h(){function a(a,b){var c=a.attr(b);return c||""}var b,c,f=j(),g={};return g.fontface=d.getParam("fullpage_default_fontface",""),g.fontsize=d.getParam("fullpage_default_fontsize",""),b=f.firstChild,7==b.type&&(g.xml_pi=!0,c=/encoding="([^"]+)"/.exec(b.value),c&&(g.docencoding=c[1])),b=f.getAll("#doctype")[0],b&&(g.doctype=""),b=f.getAll("title")[0],b&&b.firstChild&&(g.title=b.firstChild.value),p(f.getAll("meta"),function(a){var b,c=a.attr("name"),d=a.attr("http-equiv");c?g[c.toLowerCase()]=a.attr("content"):"Content-Type"==d&&(b=/charset\s*=\s*(.*)\s*/gi.exec(a.attr("content")),b&&(g.docencoding=b[1]))}),b=f.getAll("html")[0],b&&(g.langcode=a(b,"lang")||a(b,"xml:lang")),g.stylesheets=[],e.each(f.getAll("link"),function(a){"stylesheet"==a.attr("rel")&&g.stylesheets.push(a.attr("href"))}),b=f.getAll("body")[0],b&&(g.langdir=a(b,"dir"),g.style=a(b,"style"),g.visited_color=a(b,"vlink"),g.link_color=a(b,"link"),g.active_color=a(b,"alink")),g}function i(a){function f(a,b,c){a.attr(b,c?c:void 0)}function g(a){i.firstChild?i.insert(a,i.firstChild):i.append(a)}var h,i,k,l,m,o=d.dom;h=j(),i=h.getAll("head")[0],i||(l=h.getAll("html")[0],i=new b("head",1),l.firstChild?l.insert(i,l.firstChild,!0):l.append(i)),l=h.firstChild,a.xml_pi?(m='version="1.0"',a.docencoding&&(m+=' encoding="'+a.docencoding+'"'),7!=l.type&&(l=new b("xml",7),h.insert(l,h.firstChild,!0)),l.value=m):l&&7==l.type&&l.remove(),l=h.getAll("#doctype")[0],a.doctype?(l||(l=new b("#doctype",10),a.xml_pi?h.insert(l,h.firstChild):g(l)),l.value=a.doctype.substring(9,a.doctype.length-1)):l&&l.remove(),l=null,p(h.getAll("meta"),function(a){"Content-Type"==a.attr("http-equiv")&&(l=a)}),a.docencoding?(l||(l=new b("meta",1),l.attr("http-equiv","Content-Type"),l.shortEnded=!0,g(l)),l.attr("content","text/html; charset="+a.docencoding)):l&&l.remove(),l=h.getAll("title")[0],a.title?(l?l.empty():(l=new b("title",1),g(l)),l.append(new b("#text",3)).value=a.title):l&&l.remove(),p("keywords,description,author,copyright,robots".split(","),function(c){var d,e,f=h.getAll("meta"),i=a[c];for(d=0;d "))}function j(){return new a({validate:!1,root_name:"#document"}).parse(n)}function k(a){function b(a){return a.replace(/<\/?[A-Z]+/g,function(a){return a.toLowerCase()})}var c,g,h,i,k,m="",q=d.dom;if(!(a.selection||(h=f.protectHtml(d.settings.protect,a.content),"raw"==a.format&&n||a.source_view&&d.getParam("fullpage_hide_in_source_view")))){0!==h.length||a.source_view||(h=e.trim(n)+"\n"+e.trim(h)+"\n"+e.trim(o)),h=h.replace(/<(\/?)BODY/gi,"<$1body"),c=h.indexOf("",c),n=b(h.substring(0,c+1)),g=h.indexOf("\n