def wikiEdit(u: str, pn: str): """ Edit a wiki page @param u = user id @param pn = page name """ npn = mark.normaliseTagWpn(pn) # normalised page name wp = wikidb.getWikiPage(u, npn, create=True) wf = WikiForm(source=wp.source) if request.method == 'POST': wf = wf.populateFromRequest(request) wp.source = wf.source wp.save() return redirect(form("/wiki/{u}/{pn}", u=u, pn=pn)) #//if tem = jinjaEnv.get_template("wikiEdit.html") h = tem.render( userName=htmlEsc(u), pn=htmlEsc(pn), wp=wp, wf=wf, exists=bool(wp), canAlter=True, nav=wikiPageNav(u, npn), ) return h
def front(): tem = jinjaEnv.get_template("front.html") h = tem.render( adminSiteExists=config.CREATE_ADMIN_SITE, adminSitePrefix=config.ADMIN_SITE_PREFIX, ) return h
def foo(id): if id == 'NEW': doc = Foo() else: doc = Foo.getDoc(id) msg = "" if request.method == 'POST': doc = doc.populateFromRequest(request) if request.form.get('delete', "0") == "1": # delete the foo doc.delete() return redirect("/foos", code=302) else: if doc.isValid(): doc.save() msg = "Saved document" #//if #//if tem = jinjaEnv.get_template("foo.html") h = tem.render( doc=doc, id=id, msg=ht.goodMessageBox(msg), ) return h
def messList(): """ recent messages in message list view """ lf = MessListFormatter() tem = jinjaEnv.get_template("messList.html") h = tem.render(lf=lf, ) return h
def http403(msg=""): """ @param msg::str = contains text as an optional error message. return a response containing an HTTP 403 (forbidden) message """ tem = jinjaEnv.get_template("403.html") h = tem.render(msg=ht.errorBox(msg), ) return (h, 403)
def region(id): r = Region.getDoc(id) tem = jinjaEnv.get_template("region.html") h = tem.render( id=id, r=r, ) return h
def popularTags(): count = models.Tag.count() pag = paginate.Paginator(count) tem = jinjaEnv.get_template("popularTags.html") h = tem.render( table = popularTagsTable(pag), pag = pag, ) return h
def controlPanel(): if request.method == 'POST': models.Answer.delete_many({}) # delete all answers #//if numAns = models.Answer.count() tem = jinjaEnv.get_template("controlPanel.html") h = tem.render(numAns=numAns, ) return h
def tag(t): lf = TagFormatter(t) tem = jinjaEnv.get_template("tag.html") h = tem.render( t = t, lf = lf, qh = htmlEsc(repr(lf.q)), ) return h
def thread(id): m = models.Message.getDoc(id) tem = jinjaEnv.get_template("thread.html") h = tem.render( m=m, id=id, msh=threadFromH(m), ) return h
def mess(id): m = models.Message.getDoc(id) tem = jinjaEnv.get_template("mess.html") h = tem.render( m=m, id=id, ms=m.viewH(), ) return h
def foos(): count = Foo.count() pag = paginate.Paginator(count) tem = jinjaEnv.get_template("foos.html") h = tem.render( count=count, pag=pag, table=foosTable(pag), ) return h
def followerMess(id): user = User.getDoc(id) lf = FollowerFormatter(id) tem = jinjaEnv.get_template("followerMess.html") h = tem.render( id=id, user=user, lf=lf, ) return h
def userList(): """ list all users """ count = User.count() pag = paginate.Paginator(count) tem = jinjaEnv.get_template("userList.html") h = tem.render( count=count, pag=pag, table=userListTableH(pag), ) return h
def askq(): dpr("in askq()") if request.method == 'POST': pass #//if tem = jinjaEnv.get_template("askq.html") h = tem.render( qs=questlib.questionListH() # get html-formatted list of questions ) return h
def polls(): tem = jinjaEnv.get_template("polls.html") chartData, partyStrengths = pollChartData() partyLegend = getPartyLegend(partyStrengths) h = tem.render( table = pollTable(), chartData = json.dumps(chartData, sort_keys=True, indent=4), chartOptions = json.dumps(pollChartOptions(), sort_keys=True, indent=4), partyLegend = partyLegend, ) return h
def messSource(id): m = models.Message.getDoc(id) starredByH = ", ".join(u for u in m.starredBy_ids) tem = jinjaEnv.get_template("messSource.html") h = tem.render( m=m, id=id, ms=m.viewH(), messSource=htmlEsc(m.source), starredBy=starredByH, ) return h
def alerts_replies() -> str: """ alerts for replies to the current user's posts """ cun = permission.currentUserName() q = {'user_id': cun, 'alertType': 'reply', 'live': True} if request.method == 'POST': models.Alert.col().update_many(q, {'$set': {'live': False}}) #//for count = models.Alert.count(q) tem = jinjaEnv.get_template("alerts_replies.html") h = tem.render(tabLine=alertTabLine("replies"), count=count, messages=getMessages(q)) return h
def context(id): m = models.Message.getDoc(id) ms = m.context() msh = ("<p style='margin: 0px 0px 0px 20px;color:#666;'>" "<i class='fa fa-arrow-down fa-lg'></i></p>\n").join(m.viewH() for m in ms) tem = jinjaEnv.get_template("context.html") h = tem.render( m=m, id=id, msh=msh, ) return h
def alerts_historic() -> str: """ the current user's current alerts """ cun = permission.currentUserName() q = {'user_id': cun, 'live': False} count = models.Alert.count(q) pag = paginate.Paginator(count) tem = jinjaEnv.get_template("alerts_historic.html") h = tem.render( tabLine=alertTabLine("historic"), count=count, pag=pag, table=alertsTable(q, pag), ) return h
def article(art): mimeType = getMimeType(art) if mimeType: pan = getPan(art) data = open(pan).read() return Response(data, mimetype=mimeType) title, contents = getArticleBody(art) tem = jinjaEnv.get_template("article.html") h = tem.render( art=art, title=title, wikiText=contents, ) return h
def listFollowers(id): """ list of people who follow (id) """ user = User.getDoc(id) count = models.AccountInfo.count({'following_ids': id}) pag = paginate.Paginator(count) tem = jinjaEnv.get_template("listFollowers.html") h = tem.render( id=id, user=user, count=count, pag=pag, table=followersTableH(id, pag), ) return h
def alerts_stars() -> str: """ alerts for stars to the current user's posts """ cun = permission.currentUserName() q = {'user_id': cun, 'alertType': 'star', 'live': True} if request.method == 'POST': models.Alert.col().update_many(q, {'$set': {'live': False}}) #//for numStars = models.Alert.count(q) tem = jinjaEnv.get_template("alerts_stars.html") h = tem.render( tabLine=alertTabLine("stars"), numStars=numStars, messages=getStarredMessages(q), ) return h
def wikiIndex(u: str): """ display a list of all the pages in a wiki @param u = user id """ wps = wikidb.getWikiPages(u) wikiIndexH = "" for wp in wps: wikiIndexH += form("<br>{a}\n", a=wp.a()) #//for tem = jinjaEnv.get_template("wikiIndex.html") h = tem.render( userName=htmlEsc(u), nav=wikiNav(u), wikiIndexH=wikiIndexH, ) return h
def demographics(): ud = models.getUserDemographics(currentUserName()) msg = "" if request.method=='POST': ud = ud.populateFromRequest(request) if ud.isValid(): ud.save() msg = "Saved user demographics" #//if tem = jinjaEnv.get_template("demographics.html") h = tem.render( ud = ud, msg = ht.goodMessageBox(msg), ) return h
def listFollowing(id): """ list of people who follow (id) """ user = User.getDoc(id) ai = models.getAccountInfo(id) count = len(ai.following_ids) pag = paginate.Paginator(count) tem = jinjaEnv.get_template("listFollowing.html") h = tem.render( id=id, user=user, ai=ai, count=count, pag=pag, table=followingTableH(ai, pag), ) return h
def wiki(u: str, pn: str): """ Display a wiki page @param u = user id @param pn = page name """ npn = mark.normaliseTagWpn(pn) # normalised page name wp = wikidb.getWikiPage(u, npn) tem = jinjaEnv.get_template("wikiPage.html") h = tem.render( userName=htmlEsc(u), pn=htmlEsc(pn), wp=wp, exists=bool(wp), canAlter=True, nav=wikiPageNav(u, npn), ) return h
def blog(id): user = User.getDoc(id) ai = models.getAccountInfo(id) lf = BlogFormatter(id) numPosts = models.Message.count({'author_id': id}) numHeadPosts = models.Message.count({ 'author_id': id, 'replyTo_id': { '$in': [None, ''] }, }) numFollowing = len(ai.following_ids) numFollowers = models.AccountInfo.count({'following_ids': id}) cun = currentUserName() if not cun: # not logged in, so no follow button followButton = "" else: if models.follows(cun, id): # follows, so unfollow button followButton = "unfollow" else: # doesn't currently follow, so follow button followButton = "follow" dpr("followButton=%r", followButton) tem = jinjaEnv.get_template("blog.html") h = tem.render( id=id, idJson=json.dumps(id), user=user, ai=ai, blogTitle=ai.asReadableH('title'), name=ai.asReadableH('realName'), bio=ai.bioHtml, numPosts=numPosts, numHeadPosts=numHeadPosts, numFollowing=numFollowing, numFollowers=numFollowers, followButton=followButton, lf=lf, ) return h
def wikiPage(u: str, folder: str, filename: str): """ return a wiki page. If it doesn't exist, return a placeholder. @param u = user name @param folder = the path to the page (not inculding filename) @param filename = the filename """ wp = wikidb.getWikiPage(u, folder, filename) tem = jinjaEnv.get_template("wikiPage.html") canAlter = wikidb.canAlter(currentUserName(), u, folder, filename) h = tem.render( nav=wikiNavigation(u, folder, filename), userName=u, folder=folder, filename=filename, wp=wp, exists=bool(wp), canAlter=canAlter, ) return h
def answered(groupId): group = questionManager.getGroup(groupId) if not group: return permission.http403("Group does not exist") cun = currentUserName() ansQs = answeredQs(cun, group.questions) numQs = len(group.questions) numAns = len(ansQs) ansH = calcAnsH(cun, ansQs) tem = jinjaEnv.get_template("answered.html") h = tem.render( group=group, groupId=htmlEsc(group.id), groupTitle=htmlEsc(group.title), numQs=numQs, numAns=numAns, ansH=calcAnsH(cun, ansQs), ) return h