mirror of https://gitlab.com/bashrc2/epicyon
				
				
				
			Initial html timeline
							parent
							
								
									2b02a1a442
								
							
						
					
					
						commit
						2b3a947265
					
				| 
						 | 
				
			
			@ -325,6 +325,15 @@ class PubServer(BaseHTTPRequestHandler):
 | 
			
		|||
            print('DEBUG: GET from '+self.server.baseDir+ \
 | 
			
		||||
                  ' path: '+self.path+' busy: '+ \
 | 
			
		||||
                  str(self.server.GETbusy))
 | 
			
		||||
        # get css
 | 
			
		||||
        # Note that this comes before the busy flag to avoid conflicts
 | 
			
		||||
        if self.path.endswith('.css'):
 | 
			
		||||
            if os.path.isfile('epicyon.css'):
 | 
			
		||||
                with open('epicyon.css', 'r') as cssfile:
 | 
			
		||||
                    css = cssfile.read()
 | 
			
		||||
                self._set_headers('text/css')
 | 
			
		||||
                self.wfile.write(css.encode('utf-8'))
 | 
			
		||||
                return
 | 
			
		||||
        if self.server.GETbusy:
 | 
			
		||||
            currTimeGET=int(time.time())
 | 
			
		||||
            if currTimeGET-self.server.lastGET<10:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,48 @@
 | 
			
		|||
body {
 | 
			
		||||
  margin: 0 auto;
 | 
			
		||||
  max-width: 800px;
 | 
			
		||||
  padding: 0 20px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.container {
 | 
			
		||||
  border: 2px solid #dedede;
 | 
			
		||||
  background-color: #f1f1f1;
 | 
			
		||||
  border-radius: 5px;
 | 
			
		||||
  padding: 10px;
 | 
			
		||||
  margin: 10px 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.darker {
 | 
			
		||||
  border-color: #ccc;
 | 
			
		||||
  background-color: #ddd;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.container::after {
 | 
			
		||||
  content: "";
 | 
			
		||||
  clear: both;
 | 
			
		||||
  display: table;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.container img {
 | 
			
		||||
  float: left;
 | 
			
		||||
  max-width: 60px;
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  margin-right: 20px;
 | 
			
		||||
  border-radius: 50%;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.container img.right {
 | 
			
		||||
  float: right;
 | 
			
		||||
  margin-left: 20px;
 | 
			
		||||
  margin-right:0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.time-right {
 | 
			
		||||
  float: right;
 | 
			
		||||
  color: #aaa;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.time-left {
 | 
			
		||||
  float: left;
 | 
			
		||||
  color: #999;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										3
									
								
								posts.py
								
								
								
								
							
							
						
						
									
										3
									
								
								posts.py
								
								
								
								
							| 
						 | 
				
			
			@ -1196,6 +1196,9 @@ def createBoxBase(baseDir: str,boxname: str, \
 | 
			
		|||
                    # get the post as json
 | 
			
		||||
                    with open(filePath, 'r') as fp:
 | 
			
		||||
                        p=commentjson.load(fp)
 | 
			
		||||
                        # remove any capability so that it's not displayed
 | 
			
		||||
                        if p.get('capability'):
 | 
			
		||||
                            del p['capability']
 | 
			
		||||
                        # Don't show likes or replies to unauthorized viewers
 | 
			
		||||
                        if not authorized:
 | 
			
		||||
                            if p.get('object'):
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -40,20 +40,42 @@ def htmlFollowers(followersJson: {}) -> str:
 | 
			
		|||
    """
 | 
			
		||||
    return htmlHeader()+"<h1>Followers collection</h1>"+htmlFooter()
 | 
			
		||||
 | 
			
		||||
def individualPostAsHtml(postJsonObject: {}) -> str:
 | 
			
		||||
    return \
 | 
			
		||||
        '<div class="container">\n' \
 | 
			
		||||
        '<img src="'+postJsonObject['actor']+'/avatar.png" alt="Avatar">\n'+ \
 | 
			
		||||
        postJsonObject['object']['content']+'\n'+ \
 | 
			
		||||
        '<span class="time-right">'+postJsonObject['object']['published']+'</span>\n' \
 | 
			
		||||
        '</div>\n'    
 | 
			
		||||
 | 
			
		||||
def htmlTimeline(timelineJson: {}) -> str:
 | 
			
		||||
    """Show the timeline as html
 | 
			
		||||
    """
 | 
			
		||||
    if not timelineJson.get('orderedItems'):
 | 
			
		||||
        return ""
 | 
			
		||||
    tlStr=htmlHeader()
 | 
			
		||||
    for item in timelineJson['orderedItems']:
 | 
			
		||||
        if item['type']=='Create':
 | 
			
		||||
            tlStr+=individualPostAsHtml(item)
 | 
			
		||||
    tlStr+=htmlFooter()
 | 
			
		||||
    return tlStr
 | 
			
		||||
 | 
			
		||||
def htmlInbox(inboxJson: {}) -> str:
 | 
			
		||||
    """Show the inbox as html
 | 
			
		||||
    """
 | 
			
		||||
    return htmlHeader()+"<h1>Inbox</h1>"+htmlFooter()
 | 
			
		||||
    return htmlTimeline(inboxJson)
 | 
			
		||||
 | 
			
		||||
def htmlOutbox(outboxJson: {}) -> str:
 | 
			
		||||
    """Show the Outbox as html
 | 
			
		||||
    """
 | 
			
		||||
    return htmlHeader()+"<h1>Outbox</h1>"+htmlFooter()
 | 
			
		||||
    return htmlTimeline(outboxJson)
 | 
			
		||||
 | 
			
		||||
def htmlIndividualPost(postJsonObject: {}) -> str:
 | 
			
		||||
    """Show an individual post as html
 | 
			
		||||
    """
 | 
			
		||||
    return htmlHeader()+"<h1>Post</h1>"+htmlFooter()
 | 
			
		||||
    return htmlHeader()+ \
 | 
			
		||||
        individualPostAsHtml(postJsonObject)+ \
 | 
			
		||||
        htmlFooter()
 | 
			
		||||
 | 
			
		||||
def htmlPostReplies(postJsonObject: {}) -> str:
 | 
			
		||||
    """Show the replies to an individual post as html
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue