mirror of https://gitlab.com/bashrc2/epicyon
				
				
				
			More generic profile page
							parent
							
								
									0f448553ab
								
							
						
					
					
						commit
						d0693db8ba
					
				
							
								
								
									
										51
									
								
								daemon.py
								
								
								
								
							
							
						
						
									
										51
									
								
								daemon.py
								
								
								
								
							| 
						 | 
				
			
			@ -46,8 +46,6 @@ from skills import outboxSkills
 | 
			
		|||
from availability import outboxAvailability
 | 
			
		||||
from webinterface import htmlIndividualPost
 | 
			
		||||
from webinterface import htmlProfile
 | 
			
		||||
from webinterface import htmlFollowing
 | 
			
		||||
from webinterface import htmlFollowers
 | 
			
		||||
from webinterface import htmlInbox
 | 
			
		||||
from webinterface import htmlOutbox
 | 
			
		||||
from webinterface import htmlPostReplies
 | 
			
		||||
| 
						 | 
				
			
			@ -638,27 +636,60 @@ class PubServer(BaseHTTPRequestHandler):
 | 
			
		|||
            self.server.GETbusy=False
 | 
			
		||||
            return
 | 
			
		||||
        authorized=self._isAuthorized()
 | 
			
		||||
        
 | 
			
		||||
        following=getFollowingFeed(self.server.baseDir,self.server.domain, \
 | 
			
		||||
                                   self.server.port,self.path, \
 | 
			
		||||
                                   self.server.httpPrefix,
 | 
			
		||||
                                   self.server.httpPrefix, \
 | 
			
		||||
                                   authorized,followsPerPage)
 | 
			
		||||
        if following:
 | 
			
		||||
            if 'text/html' in self.headers['Accept']:
 | 
			
		||||
                self._set_headers('text/html')
 | 
			
		||||
                self.wfile.write(htmlFollowing(following).encode('utf-8'))
 | 
			
		||||
                if 'page=' not in self.path:
 | 
			
		||||
                    # get a page of following, not the summary
 | 
			
		||||
                    following=getFollowingFeed(self.server.baseDir,self.server.domain, \
 | 
			
		||||
                                               self.server.port,self.path+'?page=1', \
 | 
			
		||||
                                               self.server.httpPrefix, \
 | 
			
		||||
                                               authorized,followsPerPage)
 | 
			
		||||
                getPerson = personLookup(self.server.domain,self.path.replace('/following',''), \
 | 
			
		||||
                                         self.server.baseDir)
 | 
			
		||||
                if getPerson:
 | 
			
		||||
                    self._set_headers('text/html')
 | 
			
		||||
                    self.wfile.write(htmlProfile(self.server.baseDir, \
 | 
			
		||||
                                                 self.server.httpPrefix, \
 | 
			
		||||
                                                 authorized, \
 | 
			
		||||
                                                 self.server.ocapAlways, \
 | 
			
		||||
                                                 getPerson,'following', \
 | 
			
		||||
                                                 following).encode('utf-8'))                
 | 
			
		||||
                    self.server.GETbusy=False
 | 
			
		||||
                    return
 | 
			
		||||
            else:
 | 
			
		||||
                self._set_headers('application/json')
 | 
			
		||||
                self.wfile.write(json.dumps(following).encode('utf-8'))
 | 
			
		||||
            self.server.GETbusy=False
 | 
			
		||||
            return            
 | 
			
		||||
                self.server.GETbusy=False
 | 
			
		||||
                return      
 | 
			
		||||
        followers=getFollowingFeed(self.server.baseDir,self.server.domain, \
 | 
			
		||||
                                   self.server.port,self.path, \
 | 
			
		||||
                                   self.server.httpPrefix, \
 | 
			
		||||
                                   authorized,followsPerPage,'followers')
 | 
			
		||||
        if followers:
 | 
			
		||||
            if 'text/html' in self.headers['Accept']:
 | 
			
		||||
                self._set_headers('text/html')
 | 
			
		||||
                self.wfile.write(htmlFollowers(followers).encode('utf-8'))
 | 
			
		||||
                if 'page=' not in self.path:
 | 
			
		||||
                    # get a page of followers, not the summary
 | 
			
		||||
                    followers=getFollowingFeed(self.server.baseDir,self.server.domain, \
 | 
			
		||||
                                               self.server.port,self.path+'?page=1', \
 | 
			
		||||
                                               self.server.httpPrefix, \
 | 
			
		||||
                                               authorized,followsPerPage,'followers')
 | 
			
		||||
                getPerson = personLookup(self.server.domain,self.path.replace('/followers',''), \
 | 
			
		||||
                                         self.server.baseDir)
 | 
			
		||||
                if getPerson:
 | 
			
		||||
                    self._set_headers('text/html')
 | 
			
		||||
                    self.wfile.write(htmlProfile(self.server.baseDir, \
 | 
			
		||||
                                                 self.server.httpPrefix, \
 | 
			
		||||
                                                 authorized, \
 | 
			
		||||
                                                 self.server.ocapAlways, \
 | 
			
		||||
                                                 getPerson,'followers', \
 | 
			
		||||
                                                 followers).encode('utf-8'))                
 | 
			
		||||
                    self.server.GETbusy=False
 | 
			
		||||
                    return
 | 
			
		||||
            else:
 | 
			
		||||
                self._set_headers('application/json')
 | 
			
		||||
                self.wfile.write(json.dumps(followers).encode('utf-8'))
 | 
			
		||||
| 
						 | 
				
			
			@ -674,7 +705,7 @@ class PubServer(BaseHTTPRequestHandler):
 | 
			
		|||
                                             self.server.httpPrefix, \
 | 
			
		||||
                                             authorized, \
 | 
			
		||||
                                             self.server.ocapAlways, \
 | 
			
		||||
                                             getPerson).encode('utf-8'))
 | 
			
		||||
                                             getPerson,'posts').encode('utf-8'))
 | 
			
		||||
            else:
 | 
			
		||||
                self._set_headers('application/json')
 | 
			
		||||
                self.wfile.write(json.dumps(getPerson).encode('utf-8'))
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										110
									
								
								webinterface.py
								
								
								
								
							
							
						
						
									
										110
									
								
								webinterface.py
								
								
								
								
							| 
						 | 
				
			
			@ -36,7 +36,22 @@ def htmlFooter() -> str:
 | 
			
		|||
        '</html>\n'
 | 
			
		||||
    return htmlStr
 | 
			
		||||
 | 
			
		||||
def htmlProfile(baseDir: str,httpPrefix: str,authorized: bool,ocapAlways: bool,profileJson: {}) -> str:
 | 
			
		||||
def htmlProfilePosts(baseDir: str,httpPrefix: str,authorized: bool,ocapAlways: bool,nickname: str,domain: str,port: int) -> str:
 | 
			
		||||
    """Shows posts on the profile screen
 | 
			
		||||
    """
 | 
			
		||||
    profileStr=''
 | 
			
		||||
    outboxFeed=personBoxJson(baseDir,domain, \
 | 
			
		||||
                             port,'/users/'+nickname+'/outbox?page=1', \
 | 
			
		||||
                             httpPrefix, \
 | 
			
		||||
                             4, 'outbox', \
 | 
			
		||||
                             authorized, \
 | 
			
		||||
                             ocapAlways)
 | 
			
		||||
    for item in outboxFeed['orderedItems']:
 | 
			
		||||
        if item['type']=='Create':
 | 
			
		||||
            profileStr+=individualPostAsHtml(item)
 | 
			
		||||
    return profileStr
 | 
			
		||||
 | 
			
		||||
def htmlProfile(baseDir: str,httpPrefix: str,authorized: bool,ocapAlways: bool,profileJson: {},selected: str,extraJson=None) -> str:
 | 
			
		||||
    """Show the profile page as html
 | 
			
		||||
    """
 | 
			
		||||
    nickname=profileJson['name']
 | 
			
		||||
| 
						 | 
				
			
			@ -51,6 +66,24 @@ def htmlProfile(baseDir: str,httpPrefix: str,authorized: bool,ocapAlways: bool,p
 | 
			
		|||
        domainFull=domain+':'+str(port)
 | 
			
		||||
    profileDescription=profileJson['publicKey']['summary']
 | 
			
		||||
    profileDescription='A test description'
 | 
			
		||||
    postsButton='button'
 | 
			
		||||
    followingButton='button'
 | 
			
		||||
    followersButton='button'
 | 
			
		||||
    rolesButton='button'
 | 
			
		||||
    skillsButton='button'
 | 
			
		||||
    sharesButton='button'
 | 
			
		||||
    if selected=='posts':
 | 
			
		||||
        postsButton='buttonselected'
 | 
			
		||||
    elif selected=='following':
 | 
			
		||||
        followingButton='buttonselected'
 | 
			
		||||
    elif selected=='followers':
 | 
			
		||||
        followersButton='buttonselected'
 | 
			
		||||
    elif selected=='roles':
 | 
			
		||||
        rolesButton='buttonselected'
 | 
			
		||||
    elif selected=='skills':
 | 
			
		||||
        skillsButton='buttonselected'
 | 
			
		||||
    elif selected=='shares':
 | 
			
		||||
        sharesButton='buttonselected'
 | 
			
		||||
    profileStr= \
 | 
			
		||||
        ' <div class="hero-image">' \
 | 
			
		||||
        '  <div class="hero-text">' \
 | 
			
		||||
| 
						 | 
				
			
			@ -62,12 +95,12 @@ def htmlProfile(baseDir: str,httpPrefix: str,authorized: bool,ocapAlways: bool,p
 | 
			
		|||
        '</div>' \
 | 
			
		||||
        '<div class="container">\n' \
 | 
			
		||||
        '  <center>' \
 | 
			
		||||
        '    <a href="'+profileJson['id']+'/outbox?page=true"><button class="button"><span>Posts </span></button></a>' \
 | 
			
		||||
        '    <a href="'+profileJson['id']+'/following?page=true"><button class="button"><span>Following </span></button></a>' \
 | 
			
		||||
        '    <a href="'+profileJson['id']+'/followers?page=true"><button class="button"><span>Followers </span></button></a>' \
 | 
			
		||||
        '    <a href="'+profileJson['id']+'/roles?page=true"><button class="button"><span>Roles </span></button></a>' \
 | 
			
		||||
        '    <a href="'+profileJson['id']+'/skills?page=true"><button class="button"><span>Skills </span></button></a>' \
 | 
			
		||||
        '    <a href="'+profileJson['id']+'/shares?page=true"><button class="button"><span>Shares </span></button></a>' \
 | 
			
		||||
        '    <a href="'+profileJson['id']+'/outbox?page=true"><button class="'+postsButton+'"><span>Posts </span></button></a>' \
 | 
			
		||||
        '    <a href="'+profileJson['id']+'/following?page=true"><button class="'+followingButton+'"><span>Following </span></button></a>' \
 | 
			
		||||
        '    <a href="'+profileJson['id']+'/followers?page=true"><button class="'+followersButton+'"><span>Followers </span></button></a>' \
 | 
			
		||||
        '    <a href="'+profileJson['id']+'/roles?page=true"><button class="'+rolesButton+'"><span>Roles </span></button></a>' \
 | 
			
		||||
        '    <a href="'+profileJson['id']+'/skills?page=true"><button class="'+skillsButton+'"><span>Skills </span></button></a>' \
 | 
			
		||||
        '    <a href="'+profileJson['id']+'/shares?page=true"><button class="'+sharesButton+'"><span>Shares </span></button></a>' \
 | 
			
		||||
        '  </center>' \
 | 
			
		||||
        '</div>'
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -157,6 +190,46 @@ def htmlProfile(baseDir: str,httpPrefix: str,authorized: bool,ocapAlways: bool,p
 | 
			
		|||
        '  opacity: 1;' \
 | 
			
		||||
        '  right: 0;' \
 | 
			
		||||
        '}' \
 | 
			
		||||
        '.buttonselected {' \
 | 
			
		||||
        '  border-radius: 4px;' \
 | 
			
		||||
        '  background-color: #666;' \
 | 
			
		||||
        '  border: none;' \
 | 
			
		||||
        '  color: #FFFFFF;' \
 | 
			
		||||
        '  text-align: center;' \
 | 
			
		||||
        '  font-size: 18px;' \
 | 
			
		||||
        '  padding: 10px;' \
 | 
			
		||||
        '  width: 20%;' \
 | 
			
		||||
        '  max-width: 200px;' \
 | 
			
		||||
        '  min-width: 100px;' \
 | 
			
		||||
        '  transition: all 0.5s;' \
 | 
			
		||||
        '  cursor: pointer;' \
 | 
			
		||||
        '  margin: 5px;' \
 | 
			
		||||
        '}' \
 | 
			
		||||
        '' \
 | 
			
		||||
        '.buttonselected span {' \
 | 
			
		||||
        '  cursor: pointer;' \
 | 
			
		||||
        '  display: inline-block;' \
 | 
			
		||||
        '  position: relative;' \
 | 
			
		||||
        '  transition: 0.5s;' \
 | 
			
		||||
        '}' \
 | 
			
		||||
        '' \
 | 
			
		||||
        '.buttonselected span:after {' \
 | 
			
		||||
        "  content: '\\00bb';" \
 | 
			
		||||
        '  position: absolute;' \
 | 
			
		||||
        '  opacity: 0;' \
 | 
			
		||||
        '  top: 0;' \
 | 
			
		||||
        '  right: -20px;' \
 | 
			
		||||
        '  transition: 0.5s;' \
 | 
			
		||||
        '}' \
 | 
			
		||||
        '' \
 | 
			
		||||
        '.buttonselected:hover span {' \
 | 
			
		||||
        '  padding-right: 25px;' \
 | 
			
		||||
        '}' \
 | 
			
		||||
        '' \
 | 
			
		||||
        '.buttonselected:hover span:after {' \
 | 
			
		||||
        '  opacity: 1;' \
 | 
			
		||||
        '  right: 0;' \
 | 
			
		||||
        '}' \
 | 
			
		||||
        '.container {' \
 | 
			
		||||
        '    border: 2px solid #dedede;' \
 | 
			
		||||
        '    background-color: #f1f1f1;' \
 | 
			
		||||
| 
						 | 
				
			
			@ -219,30 +292,11 @@ def htmlProfile(baseDir: str,httpPrefix: str,authorized: bool,ocapAlways: bool,p
 | 
			
		|||
        '    color: #999;' \
 | 
			
		||||
        '}'
 | 
			
		||||
 | 
			
		||||
    # show some posts
 | 
			
		||||
    outboxFeed=personBoxJson(baseDir,domain, \
 | 
			
		||||
                             port,'/users/'+nickname+'/outbox?page=1', \
 | 
			
		||||
                             httpPrefix, \
 | 
			
		||||
                             4, 'outbox', \
 | 
			
		||||
                             authorized, \
 | 
			
		||||
                             ocapAlways)
 | 
			
		||||
    for item in outboxFeed['orderedItems']:
 | 
			
		||||
        if item['type']=='Create':
 | 
			
		||||
            profileStr+=individualPostAsHtml(item)
 | 
			
		||||
 | 
			
		||||
    if selected=='posts':
 | 
			
		||||
        profileStr+=htmlProfilePosts(baseDir,httpPrefix,authorized,ocapAlways,nickname,domain,port)
 | 
			
		||||
    profileStr=htmlHeader(profileStyle)+profileStr+htmlFooter()
 | 
			
		||||
    return profileStr
 | 
			
		||||
 | 
			
		||||
def htmlFollowing(followingJson: {}) -> str:
 | 
			
		||||
    """Show the following collection as html
 | 
			
		||||
    """
 | 
			
		||||
    return htmlHeader()+"<h1>Following collection</h1>"+htmlFooter()
 | 
			
		||||
 | 
			
		||||
def htmlFollowers(followersJson: {}) -> str:
 | 
			
		||||
    """Show the followers collection as html
 | 
			
		||||
    """
 | 
			
		||||
    return htmlHeader()+"<h1>Followers collection</h1>"+htmlFooter()
 | 
			
		||||
 | 
			
		||||
def individualPostAsHtml(postJsonObject: {}) -> str:
 | 
			
		||||
    avatarPosition=''
 | 
			
		||||
    containerClass='container'
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue