Skip to content

Commit d37fa5e

Browse files
Merge pull request #115 from CodeForPhilly/develop
Release: v1.3.15
2 parents f6ed1da + b1bd8da commit d37fa5e

File tree

6 files changed

+451
-1
lines changed

6 files changed

+451
-1
lines changed

.holo/sources/laddr.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
[holosource]
22
url = "https://github.com/CodeForPhilly/laddr"
3-
ref = "refs/tags/v3.2.11"
3+
ref = "refs/tags/v3.2.12"

docs/mkdocs.studio.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,6 @@ extra:
22
studio:
33
name: codeforphilly-studio
44
web_port: 9080
5+
static_port: 9081
56
docs_port: 9088
67
mysql_port: 9086
Lines changed: 334 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,334 @@
1+
{extends designs/site.tpl}
2+
3+
{block title}{$data->Title|escape} — {_ 'Projects'} — {$dwoo.parent}{/block}
4+
5+
{block content}
6+
{$Project = $data}
7+
8+
<div class="page-header">
9+
<div class="btn-toolbar pull-right">
10+
<div class="btn-group">
11+
{if $.User->hasAccountLevel('Staff')}
12+
<a href="/projects/{$Project->Handle}/edit" class="btn btn-info">{_ "Edit Project"}</a>
13+
<div class="btn-group">
14+
<button class="btn btn-info dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button>
15+
<div class="dropdown-menu">
16+
<a class="dropdown-item" href="#add-member" data-toggle="modal">{_ "Add Member"}</a>
17+
<a class="dropdown-item" href="/project-buzz/create?ProjectID={$Project->ID}">{_ "Log Buzz"}</a>
18+
{if $.User && ($Project->hasMember($.User) || $.Session->hasAccountLevel('Staff'))}
19+
<a class="dropdown-item" href="#post-update" data-toggle="modal">{_ "Post Update"}</a>
20+
{/if}
21+
{if $.Session->hasAccountLevel('Staff')}
22+
<a class="dropdown-item" href="#manage-members" data-toggle="modal">{_ "Manage Members"}</a>
23+
{/if}
24+
</div>
25+
</div>
26+
<a class="btn btn-danger" href="{$Project->getUrl('/delete')|escape}">Delete Project</a>
27+
{/if}
28+
</div>
29+
</div>
30+
31+
<h1>{$Project->Title|escape}</h1>
32+
</div>
33+
34+
<div class="row">
35+
<div class="col-md-8">
36+
{if $Project->Stage}
37+
<h2>{_ "Stage"}</h2>
38+
{if $Project->Stage == null}
39+
<span class="badge badge-info" data-toggle="tooltip" data-placement="bottom" title="{Laddr\Project::getStageDescription($Project->Stage)}">{$Project->Stage}</span>
40+
{/if}
41+
{if $Project->Stage == Commenting}
42+
<div class="progress">
43+
<div class="progress-bar progress-bar-warning progress-bar-striped" role="progressbar" aria-valuenow="10" aria-valuemin="0" aria-valuemax="100" style="width: 10%;" data-toggle="tooltip" title="{Laddr\Project::getStageDescription(Hibernating)|escape}">
44+
<span class="show">{$Project->Stage}</span>
45+
</div>
46+
</div>
47+
{/if}
48+
{if $Project->Stage == Bootstrapping}
49+
<div class="progress">
50+
<div class="progress-bar progress-bar-warning progress-bar-striped" role="progressbar" aria-valuenow="30" aria-valuemin="0" aria-valuemax="100" style="width: 30%;" data-toggle="tooltip" title="{Laddr\Project::getStageDescription(Bootstrapping)|escape}">
51+
<span class="show">{$Project->Stage}</span>
52+
</div>
53+
</div>
54+
{/if}
55+
{if $Project->Stage == Prototyping}
56+
<div class="progress">
57+
<div class="progress-bar progress-bar-info progress-bar-striped" role="progressbar" aria-valuenow="70" aria-valuemin="0" aria-valuemax="100" style="width: 70%;" data-toggle="tooltip" title="{Laddr\Project::getStageDescription(Prototyping)|escape}">
58+
{$Project->Stage}
59+
</div>
60+
</div>
61+
{/if}
62+
{if $Project->Stage == Testing}
63+
<div class="progress">
64+
<div class="progress-bar progress-bar-info progress-bar-striped" role="progressbar" aria-valuenow="90" aria-valuemin="0" aria-valuemax="100" style="width: 90%;" data-toggle="tooltip" title="{Laddr\Project::getStageDescription(Testing)|escape}">
65+
{$Project->Stage}
66+
</div>
67+
</div>
68+
{/if}
69+
{if $Project->Stage == Maintaining}
70+
<div class="progress">
71+
<div class="progress-bar progress-bar-success progress-bar-striped" role="progressbar" aria-valuenow="100" aria-valuemin="0" aria-valuemax="100" style="width: 100%;" data-toggle="tooltip" title="{Laddr\Project::getStageDescription(Maintaining)|escape}">
72+
{$Project->Stage}
73+
</div>
74+
</div>
75+
{/if}
76+
{if $Project->Stage == Drifting}
77+
<div class="progress">
78+
<div class="progress-bar progress-bar-warning progress-bar-striped" role="progressbar" aria-valuenow="100" aria-valuemin="0" aria-valuemax="100" style="width: 100%;" data-toggle="tooltip" title="{Laddr\Project::getStageDescription(Drifting)|escape}">
79+
<span class="show">{$Project->Stage}</span>
80+
</div>
81+
</div>
82+
{/if}
83+
{if $Project->Stage == Hibernating}
84+
<div class="progress">
85+
<div class="progress-bar progress-bar-danger progress-bar-striped" role="progressbar" aria-valuenow="100" aria-valuemin="0" aria-valuemax="100" style="width: 100%;" data-toggle="tooltip" title="{Laddr\Project::getStageDescription(Hibernating)|escape}">
86+
{$Project->Stage}
87+
</div>
88+
</div>
89+
{/if}
90+
{/if}
91+
{if $Project->README}
92+
<h2>{_ "README"}</h2>
93+
<div class="content-readme content-markdown well">
94+
{$Project->README|escape|markdown}
95+
</div>
96+
{/if}
97+
98+
{*
99+
<h2>Comments:</h2>
100+
<form method="post" action="/projects/{$Project->Handle}/comment">
101+
<textarea name="Message"></textarea>
102+
<input type="submit" value="Submit">
103+
</form>
104+
{foreach item=Comment from=$Project->$Comments}
105+
<p>
106+
{$Comment->Message}
107+
</p>
108+
{/foreach}
109+
*}
110+
111+
{* if ($.User && $Project->hasMember($.User))}
112+
<form action="/projects/{$Project->Handle}/json/create-request">
113+
<button class="btn btn-success" type="submit">{_ 'Need Help?'}&hellip;</button>
114+
</form>
115+
{/if *}
116+
117+
<h2>
118+
{_ "Project Activity"}
119+
<div class="btn-group pull-right">
120+
{if $.User && $Project->hasMember($.User)}
121+
<a href="#post-update" class="btn btn-primary btn-sm" data-toggle="modal">{_ "Post Update"}</a>
122+
<a href="/project-buzz/create?ProjectID={$Project->ID}" class="btn btn-success btn-sm">{_ "Log Buzz"}</a>
123+
{/if}
124+
</div>
125+
</h2>
126+
127+
{foreach item=Article from=$Project->getActivity()}
128+
{projectActivity $Article headingLevel=h3 showProject=no}
129+
{foreachelse}
130+
<em>{_ "This project doesn't have any activity yet, post an update or log some buzz!"}</em>
131+
{/foreach}
132+
</div>
133+
134+
<!-- PROJECT INFO -->
135+
<div class="col-md-4">
136+
<h2>{_ "Project Info"}</h2>
137+
138+
<!-- PROJECT LINKS -->
139+
<div role="group" aria-label="...">
140+
{if $Project->UsersUrl}
141+
<a class="btn btn-primary btn-block" role="button" href="{$Project->UsersUrl|escape}">
142+
{icon "user"}&nbsp;{_ "Users' Site"}
143+
<div class="small">{$Project->UsersUrl|escape}</div>
144+
</a>
145+
{/if}
146+
{if $Project->DevelopersUrl}
147+
<a class="btn btn-success btn-block" role="button" href="{$Project->DevelopersUrl|escape}">
148+
{icon "cog"}&nbsp;{_ "Developers' Site"}
149+
<div class="small">{$Project->DevelopersUrl|escape}</div>
150+
</a>
151+
{/if}
152+
{if $Project->ChatChannel}
153+
{if Laddr::$chatLinker}
154+
<a class="btn btn-success btn-block" role="button" href="{call_user_func(Laddr::$chatLinker, $Project->ChatChannel)|escape}" target="_blank">
155+
{icon "comment"}&nbsp;{_ "Chat Channel"}
156+
<div class="small">#{$Project->ChatChannel|escape}</div>
157+
</a>
158+
{else}
159+
<p class="text-center">Chat Channel: <strong>#{$Project->ChatChannel|escape}</strong></p>
160+
{/if}
161+
{/if}
162+
</div>
163+
164+
<!-- MEMBERS BLOCK -->
165+
{if $Project->Memberships}
166+
<h3>{_ "Members"}</h3>
167+
168+
<ul class="list-inline people-list">
169+
{foreach item=Membership from=$Project->Memberships}
170+
{$Member = $Membership->Member}
171+
<li class="list-inline-item people-list-person {tif $Project->MaintainerID == $Member->ID ? maintainer}">
172+
<a
173+
href="/members/{$Member->Username}"
174+
class="member-thumbnail"
175+
data-toggle="tooltip"
176+
data-placement="bottom"
177+
title="{personName $Member} &mdash; {projectMemberTitle $Membership}"
178+
>
179+
{if $Project->MaintainerID == $Member->ID}
180+
{avatar $Member size=64}
181+
{else}
182+
{avatar $Member size=48}
183+
{/if}
184+
</a>
185+
</li>
186+
{foreachelse}
187+
<li class="muted list-inline-item">{_ "No registered members"}</li>
188+
{/foreach}
189+
</ul>
190+
{if $.User && $Project->hasMember($.User)}
191+
<a class="btn btn-success add-person" href="#add-member" data-toggle="modal">+ {_ "Add"}</a>
192+
{/if}
193+
{/if}
194+
<hr>
195+
196+
<!-- TAGS BLOCK -->
197+
{if $Project->TechTags}
198+
{_ "Tech"}:
199+
<ul>
200+
{foreach item=Tag from=$Project->TechTags}
201+
<li>{contextLink $Tag}</li>
202+
{/foreach}
203+
</ul>
204+
{/if}
205+
206+
{if $Project->TopicTags}
207+
{_ "Topics"}:
208+
<ul>
209+
{foreach item=Tag from=$Project->TopicTags}
210+
<li>{contextLink $Tag}</li>
211+
{/foreach}
212+
</ul>
213+
{/if}
214+
215+
{if $Project->EventTags}
216+
{_ "Events"}:
217+
<ul>
218+
{foreach item=Tag from=$Project->EventTags}
219+
<li>{contextLink $Tag}</li>
220+
{/foreach}
221+
</ul>
222+
{/if}
223+
224+
<hr>
225+
226+
<div>
227+
<a href="{RemoteSystems\Twitter::getTweetIntentURL('Check out $Project->Title!', array(url = 'http://$.server.HTTP_HOST/projects/$Project->Handle'))}"><img src="{versioned_url img/icon-twitter.svg}" alt="{_ 'Spread the word on Twitter!'}" title="{_ 'Spread the word on Twitter!'}"/></a>
228+
</div>
229+
</div>
230+
</div>
231+
232+
{/block}
233+
234+
{block js-bottom}
235+
{$dwoo.parent}
236+
237+
<form id="add-member" class="modal fade form-horizontal" tabindex="-1" role="dialog" aria-labelledby="add-member-title" action="/projects/{$Project->Handle}/add-member" method="POST">
238+
<div class="modal-dialog">
239+
<div class="modal-content">
240+
<div class="modal-header">
241+
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
242+
<h2 id="add-member-title" class="modal-title">{_ "Add project member"}</h2>
243+
</div>
244+
<div class="modal-body">
245+
<div class="form-group">
246+
<label for="inputUsername" class="col-sm-2 control-label">{_ "Username"}</label>
247+
<div class="col-sm-10">
248+
<input type="text" id="inputUsername" class="form-control" name="username" required>
249+
</div>
250+
</div>
251+
<div class="form-group">
252+
<label for="inputRole" class="col-sm-2 control-label">{_ "Role"}</label>
253+
<div class="col-sm-10">
254+
<input type="text" id="inputRole" class="form-control" name="role" placeholder="{_ 'optional'}">
255+
</div>
256+
</div>
257+
</div>
258+
<div class="modal-footer">
259+
<button class="btn btn-primary">{_ "Add member"}</button>
260+
</div>
261+
</div>
262+
</div>
263+
</form>
264+
265+
{if $.User && ($Project->hasMember($.User) || $.Session->hasAccountLevel('Staff'))}
266+
<form id="post-update" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="project-update-title" action="/projects/{$Project->Handle}/updates" method="POST">
267+
<div class="modal-dialog">
268+
<div class="modal-content">
269+
<div class="modal-header">
270+
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
271+
<h2 id="project-update-title" class="modal-title">{_ "Post project update"}</h2>
272+
</div>
273+
<div class="modal-body">
274+
<div class="form-group">
275+
<textarea class="form-control" name="Body" rows="10" required></textarea>
276+
<span class="help-block">{_ "Markdown is supported"}</span>
277+
</div>
278+
</div>
279+
<div class="modal-footer">
280+
<button class="btn btn-primary">{_ "Post Update"}</button>
281+
</div>
282+
</div>
283+
</div>
284+
</form>
285+
{/if}
286+
287+
{if $.Session->hasAccountLevel('Staff')}
288+
<div id="manage-members" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="manage-members-title">
289+
<div class="modal-dialog">
290+
<div class="modal-content">
291+
<div class="modal-header">
292+
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
293+
<h2 id="manage-members-title" class="modal-title">{_ "Manage project members"}</h2>
294+
</div>
295+
<div class="modal-body">
296+
<table class="table table-hover">
297+
<thead>
298+
<tr>
299+
<th>{_ Member}</th>
300+
<th>{_ Role}</th>
301+
<th><span class="sr-only">{_ "Make Member a Maintainer"}</span></th>
302+
<th><span class="sr-only">{_ "Remove Member"}</span></th>
303+
</tr>
304+
</thead>
305+
<tbody>
306+
{foreach item=Membership from=$Project->Memberships}
307+
<tr>
308+
<td>{personLink $Membership->Member}</td>
309+
<td>{projectMemberTitle $Membership}</td>
310+
<td>
311+
{if $Membership->MemberID != $Project->MaintainerID}
312+
<a href="/projects/{$Project->Handle}/change-maintainer?username={$Membership->Member->Username|escape:url}" class="btn btn-sm btn-primary">{_ "Make Maintainer"}</a>
313+
{/if}
314+
</td>
315+
<td>
316+
<a href="/projects/{$Project->Handle}/remove-member?username={$Membership->Member->Username|escape:url}" class="btn btn-sm btn-danger">{_ "Remove"}</a>
317+
</td>
318+
</tr>
319+
{foreachelse}
320+
<tr>
321+
<td class="muted" colspan="4">{_ "None registered"}</td>
322+
</tr>
323+
{/foreach}
324+
</tbody>
325+
</table>
326+
</div>
327+
</div>
328+
</div>
329+
</div>
330+
{/if}
331+
332+
{jsmin "lib/epiceditor.js"}
333+
{jsmin "pages/project.js"}
334+
{/block}

0 commit comments

Comments
 (0)