18 Commits

Author SHA1 Message Date
William MARTIN
9a6a6c21f5 Enhancement of the history of a wiki page.
- Add more visibility to the delete revision function
- Add a restore function

Don't send 404 when the user what to see a specific revision that is the current revision
2011-12-05 11:04:01 +01:00
William MARTIN
69d0384ec3 Fix name 2011-12-05 10:03:44 +01:00
William MARTIN
af956d01dd Add the auto generated wiki page as default page 2011-12-05 09:52:26 +01:00
William MARTIN
0002e9bd21 Merge branch 'feature.wiki-default-page' of projects.ceondo.com:indefero into feature.wiki-default-page 2011-12-04 21:59:14 +01:00
William MARTIN
6c62fbd19f Add pages in the wiki when the project is created.
- Wiki welcome page (to continue)
- Markdown help
  http://daringfireball.net/projects/markdown/
2011-12-04 21:58:02 +01:00
Thomas Keller
7abcc29e60 No punctation at the end - this is hardcoded in the template already. 2011-11-07 15:52:10 +01:00
Thomas Keller
2e1369184b Merge branch 'feature.wiki-default-page' of projects.ceondo.com:indefero into feature.wiki-default-page 2011-11-07 14:34:43 +01:00
Thomas Keller
b39fe8595c Prepare a new section for 1.3. 2011-11-07 01:16:14 +01:00
Thomas Keller
5fefc26543 Apparently the last merge commit did not contain that. 2011-11-07 01:16:09 +01:00
Thomas Keller
a37b222878 Merge branch 'release-1.2' into develop
Bump develop version to 1.3-dev
2011-11-07 00:38:19 +01:00
William MARTIN
bd94d5bf68 Add a way to setup a wiki page instead of the listing page for the default wiki view 2011-11-06 16:52:24 +01:00
Thomas Keller
f9629f3f7b Merge branch 'release-1.2' into develop 2011-11-05 14:47:05 +01:00
Thomas Keller
6c9b6b5309 Merge branch 'develop' of projects.ceondo.com:indefero into develop 2011-11-02 09:53:12 +01:00
Thomas Keller
a7f283256a Merge branch 'develop' of projects.ceondo.com:indefero into develop 2011-11-02 09:45:13 +01:00
Thomas Keller
4506e1d2b5 Pulled the French translation work from Delkia and jpfleury. 2011-11-02 09:44:05 +01:00
William MARTIN
70f67e6bc6 Enhancement sort on issue summary view 2011-11-02 09:44:00 +01:00
Thomas Keller
05816cb75a release-1.2 merged in 2011-11-01 01:16:58 +01:00
Thomas Keller
2a55024640 Clarify the usage of translated verbs a little. 2011-11-01 00:52:34 +01:00
48 changed files with 985 additions and 105 deletions

View File

@@ -1,14 +1,12 @@
# InDefero 1.2.1 - XXX XXX XX XX:XX:XX UTC 201X
# InDefero 1.3 - xxx xxx xx xx:xx:xx UTC 201X
## New Features
## Bugfixes
- The diff view now renders properly in Firefox when a minimum font size
is configured or the user zooms the web page (fixes issue 773)
## Documentation
## Language and Translations
- Multiple fixes to English source strings (fixes issues 763, 766, and 772,
thanks to JP Fleury!)
## Translations
# InDefero 1.2 - Sun Nov 6 23:04:00 UTC 2011

View File

@@ -235,7 +235,7 @@ class IDF_Commit extends Pluf_Model
</tr>
<tr class="extra">
<td colspan="2">
<div class="helptext right">'.sprintf(__('Commit %1$s, by %2$s'), '<a href="'.$url.'" class="mono">'.$this->scm_id.'</a>', $user).'</div></td></tr>';
<div class="helptext right">'.sprintf(__('Commit&nbsp;%s, by %s'), '<a href="'.$url.'" class="mono">'.$this->scm_id.'</a>', $user).'</div></td></tr>';
return Pluf_Template::markSafe($out);
}
@@ -326,7 +326,7 @@ class IDF_Commit extends Pluf_Model
foreach ($addresses as $address) {
$email = new Pluf_Mail(Pluf::f('from_email'),
$address,
sprintf(__('New Commit %1$s - %2$s (%3$s)'),
sprintf(__('New Commit %s - %s (%s)'),
$this->scm_id, $this->summary,
$this->get_project()->shortname));
$email->addTextMessage($text_email);

View File

@@ -184,12 +184,12 @@ class IDF_Diff
$added = $added[0] + $added[1];
$leftwidth = 0;
if ($added > 0)
$leftwidth = ((ceil(log10($added)) + 1) * 8) + 17;
$leftwidth = ((ceil(log10($added)) + 1) * 8) + 12;
$removed = $removed[0] + $removed[1];
$rightwidth = 0;
if ($removed > 0)
$rightwidth = ((ceil(log10($removed)) + 1) * 8) + 17;
$rightwidth = ((ceil(log10($removed)) + 1) * 8) + 12;
// we need to correct the width of a single column a little
// to take less space and to hide the empty one
@@ -411,11 +411,11 @@ class IDF_Diff
$leftwidth = 1;
if ($max_lineno_left > 0)
$leftwidth = ((ceil(log10($max_lineno_left)) + 1) * 8) + 17;
$leftwidth = ((ceil(log10($max_lineno_left)) + 1) * 8) + 12;
$rightwidth = 1;
if ($max_lineno_right > 0)
$rightwidth = ((ceil(log10($max_lineno_right)) + 1) * 8) + 17;
$rightwidth = ((ceil(log10($max_lineno_right)) + 1) * 8) + 12;
$inner_linecounts_left =
'<table class="diff-linecounts">' ."\n".

View File

@@ -31,8 +31,11 @@
*/
class IDF_Form_Admin_ProjectCreate extends Pluf_Form
{
public $user = null;
public function initFields($extra=array())
{
$this->user = $extra['user'];
$choices = array();
$options = array(
'git' => __('git'),
@@ -199,7 +202,7 @@ class IDF_Form_Admin_ProjectCreate extends Pluf_Form
$mtn_master_branch)) {
throw new Pluf_Form_Invalid(__(
'The master branch is empty or contains illegal characters, '.
'please use only letters, digits, dashes and dots as separators.'
'please use only letters, digits, dashs and dots as separators.'
));
}
@@ -336,7 +339,6 @@ class IDF_Form_Admin_ProjectCreate extends Pluf_Form
$conf->setVal($prop, $tmplconf->getVal($prop, $def));
}
}
$project->created();
if ($this->cleaned_data['template'] == '--') {
IDF_Form_MembersConf::updateMemberships($project,
@@ -347,6 +349,8 @@ class IDF_Form_Admin_ProjectCreate extends Pluf_Form
$tmpl->getMembershipData('string'));
}
$project->membershipsUpdated();
$project->created();
return $project;
}

View File

@@ -161,7 +161,7 @@ class IDF_Form_Admin_UserUpdate extends Pluf_Form
'label' => __('Staff'),
'initial' => $this->user->staff,
'widget' => 'Pluf_Form_Widget_CheckboxInput',
'help_text' => __('If you give staff rights to a user, you really need to trust him.'),
'help_text' => __('If you give staff rights to a user, you really need to trust them.'),
));
}

View File

@@ -214,7 +214,7 @@ class IDF_Form_IssueCreate extends Pluf_Form
else $count[$class] += 1;
if (in_array($class, $onemax) and $count[$class] > 1) {
if (!isset($this->errors['label'.$i])) $this->errors['label'.$i] = array();
$this->errors['label'.$i][] = sprintf(__('You cannot provide more than one label from the %s class to an issue.'), $class);
$this->errors['label'.$i][] = sprintf(__('You cannot provide more than label from the %s class to an issue.'), $class);
throw new Pluf_Form_Invalid(__('You provided an invalid label.'));
}
}

View File

@@ -130,7 +130,7 @@ duplicates, is duplicated by';
$this->fields['labels_issue_one_max'] = new Pluf_Form_Field_Varchar(
array('required' => false,
'label' => __('Each issue may have at most one label with each of these classes'),
'label' => __('Each issue may have at most one label with each of these classes.'),
'initial' => self::init_one_max,
'widget_attrs' => array('size' => 60),
));
@@ -139,7 +139,7 @@ duplicates, is duplicated by';
array('required' => true,
'label' => __('Issue relations'),
'initial' => self::init_relations,
'help_text' => __('You can define bidirectional relations like "is related to" or "blocks, is blocked by".'),
'help_text' => __('You can define bidirectional relations like "is related to" or "blocks, is blocked by". For standard relations pre-configured translations exist, new relations should however be defined in a language that is understood by all project members.'),
'widget_attrs' => array('rows' => 7,
'cols' => 75),
'widget' => 'Pluf_Form_Widget_TextareaInput',

View File

@@ -94,7 +94,7 @@ class IDF_Form_Register extends Pluf_Form
{
$this->cleaned_data['email'] = mb_strtolower(trim($this->cleaned_data['email']));
if (Pluf::factory('IDF_EmailAddress')->get_user_for_email_address($this->cleaned_data['email']) != null) {
throw new Pluf_Form_Invalid(sprintf(__('The email "%1$s" is already used. If you need to, you can <a href="%2$s">recover your password</a>.'), $this->cleaned_data['email'], Pluf_HTTP_URL_urlForView('IDF_Views::passwordRecoveryAsk')));
throw new Pluf_Form_Invalid(sprintf(__('The email "%s" is already used. If you need to, click on the help link to recover your password.'), $this->cleaned_data['email']));
}
return $this->cleaned_data['email'];
}

View File

@@ -107,7 +107,7 @@ class IDF_Form_RegisterConfirmation extends Pluf_Form
throw new Pluf_Form_Invalid($error);
}
if ($users[0]->active) {
throw new Pluf_Form_Invalid(sprintf(__('This account has already been confirmed. Maybe should you try to <a href="%s">recover your password</a>.'), Pluf_HTTP_URL_urlForView('IDF_Views::passwordRecoveryAsk')));
throw new Pluf_Form_Invalid(__('This account has already been confirmed. Maybe should you try to recover your password using the help link.'));
}
$this->_user_id = $email_id[1];
return $this->cleaned_data['key'];

View File

@@ -55,7 +55,7 @@ class IDF_Form_SourceConf extends Pluf_Form
array('required' => false,
'label' => __('Webhook URL'),
'initial' => $this->conf->getVal('webhook_url', ''),
'help_text' => sprintf(__('Learn more about the <a href="%s">post-commit webhooks</a>.'), $url),
'help_text' => sprintf(__('Learn more about the <a href="%s">post-commit web hooks</a>.'), $url),
'widget_attrs' => array('size' => 35),
));

View File

@@ -106,7 +106,7 @@ class IDF_Form_UpdateUpload extends Pluf_Form
else $count[$class] += 1;
if (in_array($class, $onemax) and $count[$class] > 1) {
if (!isset($this->errors['label'.$i])) $this->errors['label'.$i] = array();
$this->errors['label'.$i][] = sprintf(__('You cannot provide more than one label from the %s class to an issue.'), $class);
$this->errors['label'.$i][] = sprintf(__('You cannot provide more than label from the %s class to an issue.'), $class);
throw new Pluf_Form_Invalid(__('You provided an invalid label.'));
}
}

View File

@@ -116,7 +116,7 @@ class IDF_Form_Upload extends Pluf_Form
else $count[$class] += 1;
if (in_array($class, $onemax) and $count[$class] > 1) {
if (!isset($this->errors['label'.$i])) $this->errors['label'.$i] = array();
$this->errors['label'.$i][] = sprintf(__('You cannot provide more than one label from the %s class to an issue.'), $class);
$this->errors['label'.$i][] = sprintf(__('You cannot provide more than label from the %s class to an issue.'), $class);
throw new Pluf_Form_Invalid(__('You provided an invalid label.'));
}
}

View File

@@ -56,7 +56,7 @@ class IDF_Form_UserAccount extends Pluf_Form
$this->fields['email'] = new Pluf_Form_Field_Email(
array('required' => true,
'label' => __('Your email'),
'label' => __('Your mail'),
'initial' => $this->user->email,
'help_text' => __('If you change your email address, an email will be sent to the new address to confirm it.'),
));
@@ -168,9 +168,9 @@ class IDF_Form_UserAccount extends Pluf_Form
$this->fields['secondary_mail'] = new Pluf_Form_Field_Email(
array('required' => false,
'label' => __('Add a secondary email address'),
'label' => __('Add a secondary mail address'),
'initial' => '',
'help_text' => __('You will get an email to confirm that you own the address you specify.'),
'help_text' => __('You will get a mail to confirm that you own the address you specify.'),
));
}

View File

@@ -41,6 +41,7 @@ Phase:Support = Plans for user support and advocacy
Deprecated = Most users should NOT reference this';
const init_one_max = '';
const wiki_default_page = '';
public function initFields($extra=array())
{
@@ -59,8 +60,30 @@ Deprecated = Most users should NOT reference this';
'initial' => self::init_one_max,
'widget_attrs' => array('size' => 60),
));
$this->fields['wiki_default_page'] = new Pluf_Form_Field_Varchar(
array('required' => false,
'label' => __('Set a default wiki page instead of the page listing'),
'initial' => self::wiki_default_page,
'widget_attrs' => array('size' => 60),
));
}
public function clean_wiki_default_page()
{
$pageName = trim($this->cleaned_data['wiki_default_page']);
if (empty($pageName)) {
return '';
}
$sql = new Pluf_SQL('project=%s AND title=%s', array($this->data['projectId'], $pageName));
$pages = Pluf::factory('IDF_WikiPage')->getList(array('filter'=>$sql->gen()));
if ($pages->count() != 1) {
return '';
}
return $pageName;
}
}

View File

@@ -147,7 +147,7 @@ Add your content here. Format your content with:
else $count[$class] += 1;
if (in_array($class, $onemax) and $count[$class] > 1) {
if (!isset($this->errors['label'.$i])) $this->errors['label'.$i] = array();
$this->errors['label'.$i][] = sprintf(__('You cannot provide more than one label from the %s class to a page.'), $class);
$this->errors['label'.$i][] = sprintf(__('You cannot provide more than label from the %s class to a page.'), $class);
throw new Pluf_Form_Invalid(__('You provided an invalid label.'));
}
}

View File

@@ -158,7 +158,7 @@ class IDF_Form_WikiUpdate extends Pluf_Form
else $count[$class] += 1;
if (in_array($class, $onemax) and $count[$class] > 1) {
if (!isset($this->errors['label'.$i])) $this->errors['label'.$i] = array();
$this->errors['label'.$i][] = sprintf(__('You cannot provide more than one label from the %s class to a page.'), $class);
$this->errors['label'.$i][] = sprintf(__('You cannot provide more than label from the %s class to a page.'), $class);
throw new Pluf_Form_Invalid(__('You provided an invalid label.'));
}
}

View File

@@ -211,7 +211,7 @@ class IDF_Issue extends Pluf_Model
$ic = (in_array($this->status, $request->project->getTagIdsByStatus('closed'))) ? 'issue-c' : 'issue-o';
$out .= sprintf(__('<a href="%1$s" class="%2$s" title="View issue">Issue %3$d</a>, %4$s'), $url, $ic, $this->id, Pluf_esc($this->summary)).'</td>';
$out .= "\n".'<tr class="extra"><td colspan="2">
<div class="helptext right">'.sprintf(__('Creation of <a href="%1$s" class="%2$s">issue %3$d</a>, by %4$s'), $url, $ic, $this->id, $user).'</div></td></tr>';
<div class="helptext right">'.sprintf(__('Creation of <a href="%s" class="%s">issue&nbsp;%d</a>, by %s'), $url, $ic, $this->id, $user).'</div></td></tr>';
return Pluf_Template::markSafe($out);
}
@@ -221,7 +221,7 @@ class IDF_Issue extends Pluf_Model
.Pluf_HTTP_URL_urlForView('IDF_Views_Issue::view',
array($request->project->shortname,
$this->id));
$title = sprintf(__('%1$s: Issue %2$d created - %3$s'),
$title = sprintf(__('%s: Issue %d created - %s'),
$request->project->name,
$this->id, $this->summary);
$cts = $this->get_comments_list(array('order' => 'id ASC',
@@ -287,7 +287,7 @@ class IDF_Issue extends Pluf_Model
foreach ($to_email as $email_lang) {
Pluf_Translation::loadSetLocale($email_lang[1]);
$email = new Pluf_Mail(Pluf::f('from_email'), $email_lang[0],
sprintf(__('Issue %1$s - %2$s (%3$s)'),
sprintf(__('Issue %s - %s (%s)'),
$this->id, $this->summary, $prj->shortname));
$tmpl = new Pluf_Template('idf/issues/issue-created-email.txt');
$email->addTextMessage($tmpl->render($context));
@@ -333,7 +333,7 @@ class IDF_Issue extends Pluf_Model
}
Pluf_Translation::loadSetLocale($email_lang[1]);
$email = new Pluf_Mail(Pluf::f('from_email'), $email_lang[0],
sprintf(__('Updated Issue %1$s - %2$s (%3$s)'),
sprintf(__('Updated Issue %s - %s (%s)'),
$this->id, $this->summary, $prj->shortname));
$tmpl = new Pluf_Template('idf/issues/issue-updated-email.txt');
$email->addTextMessage($tmpl->render($context));
@@ -343,4 +343,4 @@ class IDF_Issue extends Pluf_Model
}
Pluf_Translation::loadSetLocale($current_locale);
}
}
}

View File

@@ -177,7 +177,7 @@ class IDF_IssueComment extends Pluf_Model
}
$out .= '</td></tr>';
$out .= "\n".'<tr class="extra"><td colspan="2">
<div class="helptext right">'.sprintf(__('Comment on <a href="%1$s" class="%2$s">issue %3$d</a>, by %4$s'), $url, $ic, $issue->id, $user).'</div></td></tr>';
<div class="helptext right">'.sprintf(__('Comment on <a href="%s" class="%s">issue&nbsp;%d</a>, by %s'), $url, $ic, $issue->id, $user).'</div></td></tr>';
return Pluf_Template::markSafe($out);
}
@@ -188,7 +188,7 @@ class IDF_IssueComment extends Pluf_Model
.Pluf_HTTP_URL_urlForView('IDF_Views_Issue::view',
array($request->project->shortname,
$issue->id));
$title = sprintf(__('%1$s: Comment on issue %2$d - %3$s'),
$title = sprintf(__('%s: Comment on issue %d - %s'),
Pluf_esc($request->project->name),
$issue->id, Pluf_esc($issue->summary));
$url .= '#ic'.$this->id;

View File

@@ -306,7 +306,7 @@ class IDF_Plugin_SyncMonotone
}
catch (Exception $e) {
$this->_diagnoseProblem(sprintf(
__('Could not parse usher configuration in "%1$s": %2$s'),
__('Could not parse usher configuration in "%s": %s'),
$usher_config, $e->getMessage()
));
}
@@ -522,7 +522,7 @@ class IDF_Plugin_SyncMonotone
}
catch (Exception $e) {
$this->_diagnoseProblem(sprintf(
__('Could not parse usher configuration in "%1$s": %2$s'),
__('Could not parse usher configuration in "%s": %s'),
$usher_config, $e->getMessage()
));
}
@@ -596,7 +596,7 @@ class IDF_Plugin_SyncMonotone
}
catch (Exception $e) {
$this->_diagnoseProblem(sprintf(
__('Could not parse read-permissions for project "%1$s": %2$s'),
__('Could not parse read-permissions for project "%s": %s'),
$shortname, $e->getMessage()
));
}
@@ -715,7 +715,7 @@ class IDF_Plugin_SyncMonotone
}
catch (Exception $e) {
$this->_diagnoseProblem(sprintf(
__('Could not parse read-permissions for project "%1$s": %2$s'),
__('Could not parse read-permissions for project "%s": %s'),
$shortname, $e->getMessage()
));
}

View File

@@ -67,7 +67,7 @@ class IDF_Project extends Pluf_Model
'blank' => false,
'size' => 50,
'verbose' => __('short name'),
'help_text' => __('Used in the URL to access the project, must be short with only letters and numbers.'),
'help_text' => __('Used in the url to access the project, must be short with only letters and numbers.'),
'unique' => true,
),
'shortdesc' =>
@@ -84,7 +84,7 @@ class IDF_Project extends Pluf_Model
'blank' => false,
'size' => 250,
'verbose' => __('description'),
'help_text' => __('The description can be extended using the Markdown syntax.'),
'help_text' => __('The description can be extended using the markdown syntax.'),
),
'private' =>
array(

View File

@@ -138,7 +138,7 @@ class IDF_Review_Comment extends Pluf_Model
$ic = (in_array($review->status, $request->project->getTagIdsByStatus('closed'))) ? 'issue-c' : 'issue-o';
$out .= sprintf(__('<a href="%1$s" class="%2$s" title="View review">Review %3$d</a>, %4$s'), $url, $ic, $review->id, Pluf_esc($review->summary)).'</td>';
$out .= "\n".'<tr class="extra"><td colspan="2">
<div class="helptext right">'.sprintf(__('Update of <a href="%1$s" class="%2$s">review %3$d</a>, by %4$s'), $url, $ic, $review->id, $user).'</div></td></tr>';
<div class="helptext right">'.sprintf(__('Update of <a href="%s" class="%s">review&nbsp;%d</a>, by %s'), $url, $ic, $review->id, $user).'</div></td></tr>';
return Pluf_Template::markSafe($out);
}
@@ -148,7 +148,7 @@ class IDF_Review_Comment extends Pluf_Model
$url = Pluf_HTTP_URL_urlForView('IDF_Views_Review::view',
array($request->project->shortname,
$review->id));
$title = sprintf(__('%1$s: Updated review %2$d - %3$s'),
$title = sprintf(__('%s: Updated review %d - %s'),
Pluf_esc($request->project->name),
$review->id, Pluf_esc($review->summary));
$url .= '#ic'.$this->id;
@@ -213,7 +213,7 @@ class IDF_Review_Comment extends Pluf_Model
foreach ($to_email as $email_lang) {
Pluf_Translation::loadSetLocale($email_lang[1]);
$email = new Pluf_Mail(Pluf::f('from_email'), $email_lang[0],
sprintf(__('Updated Code Review %1$s - %2$s (%3$s)'),
sprintf(__('Updated Code Review %s - %s (%s)'),
$review->id, $review->summary, $prj->shortname));
$email->addTextMessage($tmpl->render($context));

View File

@@ -150,7 +150,7 @@ class IDF_Review_Patch extends Pluf_Model
$ic = (in_array($review->status, $request->project->getTagIdsByStatus('closed'))) ? 'issue-c' : 'issue-o';
$out .= sprintf(__('<a href="%1$s" class="%2$s" title="View review">Review %3$d</a>, %4$s'), $url, $ic, $review->id, Pluf_esc($review->summary)).'</td>';
$out .= "\n".'<tr class="extra"><td colspan="2">
<div class="helptext right">'.sprintf(__('Creation of <a href="%1$s" class="%2$s">review %3$d</a>, by %4$s'), $url, $ic, $review->id, $user).'</div></td></tr>';
<div class="helptext right">'.sprintf(__('Creation of <a href="%s" class="%s">review&nbsp;%d</a>, by %s'), $url, $ic, $review->id, $user).'</div></td></tr>';
return Pluf_Template::markSafe($out);
}
@@ -160,7 +160,7 @@ class IDF_Review_Patch extends Pluf_Model
$url = Pluf_HTTP_URL_urlForView('IDF_Views_Review::view',
array($request->project->shortname,
$review->id));
$title = sprintf(__('%1$s: Creation of Review %2$d - %3$s'),
$title = sprintf(__('%s: Creation of Review %d - %s'),
Pluf_esc($request->project->name),
$review->id, Pluf_esc($review->summary));
$date = Pluf_Date::gmDateToGmString($this->creation_dtime);
@@ -201,7 +201,7 @@ class IDF_Review_Patch extends Pluf_Model
foreach ($addresses as $address) {
$email = new Pluf_Mail(Pluf::f('from_email'),
$address,
sprintf(__('New Code Review %1$s - %2$s (%3$s)'),
sprintf(__('New Code Review %s - %s (%s)'),
$this->get_review()->id,
$this->get_review()->summary,
$this->get_review()->get_project()->shortname));

View File

@@ -22,7 +22,7 @@
# ***** END LICENSE BLOCK ***** */
/**
* Storage of the occurrence of the words.
* Storage of the occurence of the words.
*/
class IDF_Search_Occ extends Pluf_Model
{
@@ -30,7 +30,7 @@ class IDF_Search_Occ extends Pluf_Model
function init()
{
$this->_a['verbose'] = __('occurrence');
$this->_a['verbose'] = __('occurence');
$this->_a['table'] = 'idf_search_occs';
$this->_a['model'] = 'IDF_Search_Occ';
$this->_a['cols'] = array(
@@ -72,13 +72,13 @@ class IDF_Search_Occ extends Pluf_Model
array(
'type' => 'Pluf_DB_Field_Integer',
'blank' => false,
'verbose' => __('occurrences'),
'verbose' => __('occurences'),
),
'pondocc' =>
array(
'type' => 'Pluf_DB_Field_Float',
'blank' => false,
'verbose' => __('ponderated occurrence'),
'verbose' => __('ponderated occurence'),
),
);
$this->_a['idx'] = array(

View File

@@ -201,7 +201,7 @@ class IDF_Upload extends Pluf_Model
$out .= sprintf(__('<a href="%1$s" title="View download">Download %2$d</a>, %3$s'), $url, $this->id, Pluf_esc($this->summary)).'</td>';
$out .= '</tr>';
$out .= "\n".'<tr class="extra"><td colspan="2">
<div class="helptext right">'.sprintf(__('Addition of <a href="%1$s">download %2$d</a>, by %3$s'), $url, $this->id, $user).'</div></td></tr>';
<div class="helptext right">'.sprintf(__('Addition of <a href="%s">download&nbsp;%d</a>, by %s'), $url, $this->id, $user).'</div></td></tr>';
return Pluf_Template::markSafe($out);
}
@@ -211,7 +211,7 @@ class IDF_Upload extends Pluf_Model
.Pluf_HTTP_URL_urlForView('IDF_Views_Download::view',
array($request->project->shortname,
$this->id));
$title = sprintf(__('%1$s: Download %2$d added - %3$s'),
$title = sprintf(__('%s: Download %d added - %s'),
$request->project->name,
$this->id, $this->summary);
$date = Pluf_Date::gmDateToGmString($this->creation_dtime);
@@ -253,7 +253,7 @@ class IDF_Upload extends Pluf_Model
foreach ($addresses as $address) {
$email = new Pluf_Mail(Pluf::f('from_email'),
$address,
sprintf(__('New download - %1$s (%2$s)'),
sprintf(__('New download - %s (%s)'),
$this->summary,
$this->get_project()->shortname));
$email->addTextMessage($text_email);

View File

@@ -119,6 +119,7 @@ class IDF_Views_Issue
}
$ownerStatistics[$key] = array($nb, (int)(100 * $nb / $opened), $login);
}
arsort($ownerStatistics);
// Issue class tag statistics
$grouped_tags = $prj->getTagCloud();
@@ -126,6 +127,12 @@ class IDF_Views_Issue
foreach ($tags as $tag) {
$tagStatistics[$class][$tag->name] = array($tag->nb_use, $tag->id);
}
uasort($tagStatistics[$class], function ($a, $b) {
if ($a[0] === $b[0])
return 0;
return ($a[0] > $b[0]) ? -1 : 1;
});
}
foreach($tagStatistics as $k => $v) {
$nbIssueInClass = 0;
@@ -136,10 +143,6 @@ class IDF_Views_Issue
$tagStatistics[$k][$kk] = array($vv[0], (int)(100 * $vv[0] / $nbIssueInClass), $vv[1]);
}
}
// Sort
krsort($tagStatistics);
arsort($ownerStatistics);
}
}
@@ -338,19 +341,19 @@ class IDF_Views_Issue
if (count($ctags) == 0) $ctags[] = 0;
switch ($match[3]) {
case 'submit':
$titleFormat = __('%1$s %2$s Submitted %3$s Issues');
$titleFormat = __('%s %s Submitted %s Issues');
$f_sql = new Pluf_SQL('project=%s AND submitter=%s AND status IN ('.implode(', ', $otags).')', array($prj->id, $user->id));
break;
case 'submitclosed':
$titleFormat = __('%1$s %2$s Closed Submitted %3$s Issues');
$titleFormat = __('%s %s Closed Submitted %s Issues');
$f_sql = new Pluf_SQL('project=%s AND submitter=%s AND status IN ('.implode(', ', $ctags).')', array($prj->id, $user->id));
break;
case 'ownerclosed':
$titleFormat = __('%1$s %2$s Closed Working %3$s Issues');
$titleFormat = __('%s %s Closed Working %s Issues');
$f_sql = new Pluf_SQL('project=%s AND owner=%s AND status IN ('.implode(', ', $ctags).')', array($prj->id, $user->id));
break;
default:
$titleFormat = __('%1$s %2$s Working %3$s Issues');
$titleFormat = __('%s %s Working %s Issues');
$f_sql = new Pluf_SQL('project=%s AND owner=%s AND status IN ('.implode(', ', $otags).')', array($prj->id, $user->id));
break;
}
@@ -427,7 +430,7 @@ class IDF_Views_Issue
array($prj->shortname, $issue->id));
$issue->notify($request->conf);
if ($api) return $issue;
$request->user->setMessage(sprintf(__('<a href="%1$s">Issue %2$d</a> has been created.'), $url, $issue->id));
$request->user->setMessage(sprintf(__('<a href="%s">Issue %d</a> has been created.'), $url, $issue->id));
return new Pluf_HTTP_Response_Redirect($url);
}
} else {
@@ -598,7 +601,7 @@ class IDF_Views_Issue
$url = Pluf_HTTP_URL_urlForView('IDF_Views_Issue::view',
array($prj->shortname, $issue->id));
$title = Pluf_Template::markSafe(sprintf(__('Issue <a href="%1$s">%2$d</a>: %3$s'), $url, $issue->id, $issue->summary));
$title = Pluf_Template::markSafe(sprintf(__('Issue <a href="%s">%d</a>: %s'), $url, $issue->id, $issue->summary));
$form = false; // The form is available only if logged in.
$starred = false;
$closed = in_array($issue->status, $prj->getTagIdsByStatus('closed'));
@@ -622,7 +625,7 @@ class IDF_Views_Issue
$issue->notify($request->conf, false);
$comments = $issue->get_comments_list(array('order' => 'id DESC'));
$url .= '#ic' . $comments[0]->id;
$request->user->setMessage(sprintf(__('<a href="%1$s">Issue %2$d</a> has been updated.'), $url, $issue->id));
$request->user->setMessage(sprintf(__('<a href="%s">Issue %d</a> has been updated.'), $url, $issue->id));
return new Pluf_HTTP_Response_Redirect($url);
}
} else {

View File

@@ -418,8 +418,17 @@ class IDF_Views_Project
$title = sprintf(__('%s Documentation Configuration'), (string) $prj);
$conf = new IDF_Conf();
$conf->setProject($prj);
// Get the Wiki list pages
$sql = new Pluf_SQL('project=%s', array($prj->id));
$pages = Pluf::factory('IDF_WikiPage')->getList(array('filter'=>$sql->gen()));
$auto_wiki_page_name = "";
foreach ($pages as $p) {
$auto_wiki_page_name .= '{ name: "' . $p->summary . '", to: "' . $p->title . '" }, ';
}
if ($request->method == 'POST') {
$form = new IDF_Form_WikiConf($request->POST);
$form = new IDF_Form_WikiConf(array_merge($request->POST, array('projectId' => $prj->id)));
if ($form->isValid()) {
foreach ($form->cleaned_data as $key=>$val) {
$conf->setVal($key, $val);
@@ -431,7 +440,7 @@ class IDF_Views_Project
}
} else {
$params = array();
$keys = array('labels_wiki_predefined', 'labels_wiki_one_max');
$keys = array('labels_wiki_predefined', 'labels_wiki_one_max', 'wiki_default_page');
foreach ($keys as $key) {
$_val = $conf->getVal($key, false);
if ($_val !== false) {
@@ -447,6 +456,7 @@ class IDF_Views_Project
array(
'page_title' => $title,
'form' => $form,
'auto_wiki_page_name' => $auto_wiki_page_name,
),
$request);
}

View File

@@ -91,7 +91,7 @@ class IDF_Views_Review
$review = $form->save();
$urlr = Pluf_HTTP_URL_urlForView('IDF_Views_Review::view',
array($prj->shortname, $review->id));
$request->user->setMessage(sprintf(__('The <a href="%1$s">code review %2$d</a> has been created.'), $urlr, $review->id));
$request->user->setMessage(sprintf(__('The <a href="%s">code review %d</a> has been created.'), $urlr, $review->id));
$url = Pluf_HTTP_URL_urlForView('IDF_Views_Review::index',
array($prj->shortname));
return new Pluf_HTTP_Response_Redirect($url);
@@ -137,7 +137,7 @@ class IDF_Views_Review
$prj->inOr404($review);
$url = Pluf_HTTP_URL_urlForView('IDF_Views_Review::view',
array($prj->shortname, $review->id));
$title = Pluf_Template::markSafe(sprintf(__('Review <a href="%1$s">%2$d</a>: %3$s'), $url, $review->id, $review->summary));
$title = Pluf_Template::markSafe(sprintf(__('Review <a href="%s">%d</a>: %s'), $url, $review->id, $review->summary));
$patches = $review->get_patches_list();
$patch = $patches[0];
@@ -157,7 +157,7 @@ class IDF_Views_Review
$review = $patch->get_review();
$urlr = Pluf_HTTP_URL_urlForView('IDF_Views_Review::view',
array($prj->shortname, $review->id));
$request->user->setMessage(sprintf(__('Your <a href="%1$s">code review %2$d</a> has been published.'), $urlr, $review->id));
$request->user->setMessage(sprintf(__('Your <a href="%s">code review %d</a> has been published.'), $urlr, $review->id));
$url = Pluf_HTTP_URL_urlForView('IDF_Views_Review::index',
array($prj->shortname));
$review_comment->notify($request->conf);

View File

@@ -302,7 +302,7 @@ class IDF_Views_Source
throw new Exception('could not retrieve commit object for '. $commit);
}
$title = sprintf(__('%s Commit Details'), (string) $request->project);
$page_title = sprintf(__('%1$s Commit Details - %2$s'), (string) $request->project, $commit);
$page_title = sprintf(__('%s Commit Details - %s'), (string) $request->project, $commit);
$rcommit = IDF_Commit::getOrAdd($cobject, $request->project);
$diff = new IDF_Diff($cobject->diff, $scm->getDiffPathStripLevel());
$cobject->diff = null;

View File

@@ -35,7 +35,43 @@ class IDF_Views_Wiki
* View list of issues for a given project.
*/
public $index_precond = array('IDF_Precondition::accessWiki');
public function index($request, $match, $api=false)
public function index($request, $match)
{
$project = $request->project;
// Search for the default page
$conf = new IDF_Conf();
$conf->setProject($project);
$page = $conf->getVal('wiki_default_page', null);
if ($page === null) {
$url = Pluf_HTTP_URL_urlForView('IDF_Views_Wiki::listing',
array($project->shortname));
return new Pluf_HTTP_Response_Redirect($url);
}
// Find the page
$sql = new Pluf_SQL('project=%s AND title=%s',
array($project->id, $page));
$pages = Pluf::factory('IDF_WikiPage')->getList(array('filter'=>$sql->gen()));
if ($pages->count() != 1) {
// The default page have been delete
$conf->setVal('wiki_default_page', null);
$url = Pluf_HTTP_URL_urlForView('IDF_Views_Wiki::listing',
array($project->shortname));
return new Pluf_HTTP_Response_Redirect($url);
}
$page = $pages[0];
$url = Pluf_HTTP_URL_urlForView('IDF_Views_Wiki::view',
array($project->shortname, $page->title));
return new Pluf_HTTP_Response_Redirect($url);
}
/**
* View list of issues for a given project.
*/
public $listing_precond = array('IDF_Precondition::accessWiki');
public function listing($request, $match, $api=false)
{
$prj = $request->project;
$title = sprintf(__('%s Documentation'), (string) $prj);
@@ -82,7 +118,7 @@ class IDF_Views_Wiki
{
$prj = $request->project;
if (!isset($request->REQUEST['q']) or trim($request->REQUEST['q']) == '') {
$url = Pluf_HTTP_URL_urlForView('IDF_Views_Wiki::index',
$url = Pluf_HTTP_URL_urlForView('IDF_Views_Wiki::listing',
array($prj->shortname));
return new Pluf_HTTP_Response_Redirect($url);
}
@@ -181,8 +217,8 @@ class IDF_Views_Wiki
$page = $form->save();
$urlpage = Pluf_HTTP_URL_urlForView('IDF_Views_Wiki::view',
array($prj->shortname, $page->title));
$request->user->setMessage(sprintf(__('The page <a href="%1$s">%2$s</a> has been created.'), $urlpage, Pluf_esc($page->title)));
$url = Pluf_HTTP_URL_urlForView('IDF_Views_Wiki::index',
$request->user->setMessage(sprintf(__('The page <a href="%s">%s</a> has been created.'), $urlpage, Pluf_esc($page->title)));
$url = Pluf_HTTP_URL_urlForView('IDF_Views_Wiki::listing',
array($prj->shortname));
return new Pluf_HTTP_Response_Redirect($url);
} elseif (isset($request->POST['preview'])) {
@@ -226,7 +262,13 @@ class IDF_Views_Wiki
if (isset($request->GET['rev']) and preg_match('/^[0-9]+$/', $request->GET['rev'])) {
$oldrev = Pluf_Shortcuts_GetObjectOr404('IDF_WikiRevision',
$request->GET['rev']);
if ($oldrev->wikipage != $page->id or $oldrev->is_head == true) {
if ($oldrev->is_head == true) {
$url = Pluf_HTTP_URL_urlForView('IDF_Views_Wiki::view',
array($prj->shortname, $page->title));
return new Pluf_HTTP_Response_Redirect($url);
}
if ($oldrev->wikipage != $page->id) {
return new Pluf_HTTP_Response_NotFound($request);
}
}
@@ -252,6 +294,39 @@ class IDF_Views_Wiki
$request);
}
/**
* See the revision list of a documentation page.
*/
public $history_precond = array('IDF_Precondition::accessWiki');
public function history($request, $match)
{
$prj = $request->project;
// Find the page
$sql = new Pluf_SQL('project=%s AND title=%s',
array($prj->id, $match[2]));
$pages = Pluf::factory('IDF_WikiPage')->getList(array('filter'=>$sql->gen()));
if ($pages->count() != 1) {
return new Pluf_HTTP_Response_NotFound($request);
}
$page = $pages[0];
$ptags = self::getWikiTags($prj);
$dtag = array_pop($ptags); // The last tag is the deprecated tag.
$tags = $page->get_tags_list();
$dep = Pluf_Model_InArray($dtag, $tags);
$title = sprintf(__('History of the wiki page %s'), $page->title);
$revision = $page->get_current_revision();
$revs = $page->get_revisions_list(array('order' => 'creation_dtime DESC'));
return Pluf_Shortcuts_RenderToResponse('idf/wiki/history.html',
array(
'page' => $page,
'page_title' => $title,
'rev' => $revision,
'revs' => $revs,
'tags' => $tags,
),
$request);
}
/**
* Remove a revision of a page.
*/
@@ -291,6 +366,57 @@ class IDF_Views_Wiki
$request);
}
public $restoreRev_precond = array('IDF_Precondition::accessWiki',
'IDF_Precondition::projectMemberOrOwner');
public function restoreRev($request, $match)
{
$prj = $request->project;
$oldrev = Pluf_Shortcuts_GetObjectOr404('IDF_WikiRevision', $match[2]);
$page = $oldrev->get_wikipage();
$prj->inOr404($page);
// Prevent restore the current version
if ($oldrev->is_head == true) {
$request->user->setMessage(__('This revision is already the current revision.'));
$url = Pluf_HTTP_URL_urlForView('IDF_Views_Wiki::view',
array($prj->shortname, $page->title));
return new Pluf_HTTP_Response_Redirect($url);
}
$params = array(
'project' => $prj,
'user' => $request->user,
'page' => $page,
);
$data = array(
'title' => $page->title,
'summary' => $page->summary,
'content' => $oldrev->content,
'comment' => sprintf(__('Restore old revision (%s)'), $oldrev->id),
);
$tags = $page->get_tags_list();
for ($i=1;$i<4;$i++) {
if (isset($tags[$i-1])) {
if ($tags[$i-1]->class != 'Other') {
$data['label'.$i] = (string) $tags[$i-1];
} else {
$data['label'.$i] = $tags[$i-1]->name;
}
} else {
$data['label'.$i] = '';
}
}
$form = new IDF_Form_WikiUpdate($data, $params);
$page = $form->save();
$url = Pluf_HTTP_URL_urlForView('IDF_Views_Wiki::view',
array($prj->shortname, $page->title));
return new Pluf_HTTP_Response_Redirect($url);
}
/**
* View a documentation page.
*/
@@ -319,8 +445,8 @@ class IDF_Views_Wiki
$page = $form->save();
$urlpage = Pluf_HTTP_URL_urlForView('IDF_Views_Wiki::view',
array($prj->shortname, $page->title));
$request->user->setMessage(sprintf(__('The page <a href="%1$s">%2$s</a> has been updated.'), $urlpage, Pluf_esc($page->title)));
$url = Pluf_HTTP_URL_urlForView('IDF_Views_Wiki::index',
$request->user->setMessage(sprintf(__('The page <a href="%s">%s</a> has been updated.'), $urlpage, Pluf_esc($page->title)));
$url = Pluf_HTTP_URL_urlForView('IDF_Views_Wiki::listing',
array($prj->shortname));
return new Pluf_HTTP_Response_Redirect($url);
} elseif (isset($request->POST['preview'])) {
@@ -358,7 +484,7 @@ class IDF_Views_Wiki
if ($form->isValid()) {
$form->save();
$request->user->setMessage(__('The documentation page has been deleted.'));
$url = Pluf_HTTP_URL_urlForView('IDF_Views_Wiki::index',
$url = Pluf_HTTP_URL_urlForView('IDF_Views_Wiki::listing',
array($prj->shortname));
return new Pluf_HTTP_Response_Redirect($url);
}

View File

@@ -195,7 +195,7 @@ class IDF_WikiPage extends Pluf_Model
$user = $stag->start($this->get_submitter(), $request, '', false);
$out .= sprintf(__('<a href="%1$s" title="View page">%2$s</a>, %3$s'), $url, Pluf_esc($this->title), Pluf_esc($this->summary)).'</td>';
$out .= "\n".'<tr class="extra"><td colspan="2">
<div class="helptext right">'.sprintf(__('Creation of <a href="%1$s">page %2$s</a>, by %3$s'), $url, Pluf_esc($this->title), $user).'</div></td></tr>';
<div class="helptext right">'.sprintf(__('Creation of <a href="%s">page&nbsp;%s</a>, by %s'), $url, Pluf_esc($this->title), $user).'</div></td></tr>';
return Pluf_Template::markSafe($out);
}
@@ -205,7 +205,7 @@ class IDF_WikiPage extends Pluf_Model
.Pluf_HTTP_URL_urlForView('IDF_Views_Wiki::view',
array($request->project->shortname,
$this->title));
$title = sprintf(__('%1$s: Documentation page %2$s added - %3$s'),
$title = sprintf(__('%s: Documentation page %s added - %s'),
$request->project->name,
$this->title, $this->summary);
$date = Pluf_Date::gmDateToGmString($this->creation_dtime);
@@ -221,4 +221,51 @@ class IDF_WikiPage extends Pluf_Model
$tmpl = new Pluf_Template('idf/wiki/feedfragment.xml');
return $tmpl->render($context);
}
function projectCreated($signal, &$params)
{
$project = $params['project'];
$users = $project->getMembershipData();
$user = $users['owners'][0];
$conf = $project->getConf();
// Insert default wiki page
$tmpl = new Pluf_Template('idf/wiki/wiki-default-page.mdtext');
$context = new Pluf_Template_Context(array('project' => $project));
$content = $tmpl->render($context);
$page = new IDF_WikiPage();
$page->project = $project;
$page->submitter = $user;
$page->summary = __('Default page for your project Wiki.');
$page->title = 'IndeferoSummaryDefault';
$page->create();
$rev = new IDF_WikiRevision();
$rev->wikipage = $page;
$rev->content = $content;
$rev->submitter = $user;
$rev->summary = __('Initial page creation');
$rev->create();
$rev->notify($project->getConf());
// Insert markdown help wiki page
$tmpl = new Pluf_Template('idf/wiki/wiki-markdown-help.mdtext');
$context = new Pluf_Template_Context(array('project' => $project));
$content = $tmpl->render($context);
$page = new IDF_WikiPage();
$page->project = $project;
$page->submitter = $user;
$page->summary = __('Help about Markdown syntax.');
$page->title = 'IndeferoMarkdownHelp';
$page->create();
$rev = new IDF_WikiRevision();
$rev->wikipage = $page;
$rev->content = $content;
$rev->submitter = $user;
$rev->summary = __('Initial page creation');
$rev->create();
$rev->notify($project->getConf());
$conf->setVal('wiki_default_page', 'IndeferoSummaryDefault');
$conf->setVal('labels_wiki_predefined', IDF_Form_WikiConf::init_predefined);
}
}

View File

@@ -186,7 +186,7 @@ class IDF_WikiRevision extends Pluf_Model
}
$out .= '</td></tr>';
$out .= "\n".'<tr class="extra"><td colspan="2">
<div class="helptext right">'.sprintf(__('Change of <a href="%1$s">%2$s</a>, by %3$s'), $url, Pluf_esc($page->title), $user).'</div></td></tr>';
<div class="helptext right">'.sprintf(__('Change of <a href="%s">%s</a>, by %s'), $url, Pluf_esc($page->title), $user).'</div></td></tr>';
return Pluf_Template::markSafe($out);
}
@@ -205,7 +205,7 @@ class IDF_WikiRevision extends Pluf_Model
array($request->project->shortname,
$page->title));
}
$title = sprintf(__('%1$s: Documentation page %2$s updated - %3$s'),
$title = sprintf(__('%s: Documentation page %s updated - %s'),
$request->project->name,
$page->title, $page->summary);
$date = Pluf_Date::gmDateToGmString($this->creation_dtime);
@@ -259,13 +259,13 @@ class IDF_WikiRevision extends Pluf_Model
);
if ($create) {
$template = 'idf/wiki/wiki-created-email.txt';
$title = sprintf(__('New Documentation Page %1$s - %2$s (%3$s)'),
$title = sprintf(__('New Documentation Page %s - %s (%s)'),
$this->get_wikipage()->title,
$this->get_wikipage()->summary,
$this->get_wikipage()->get_project()->shortname);
} else {
$template = 'idf/wiki/wiki-updated-email.txt';
$title = sprintf(__('Documentation Page Changed %1$s - %2$s (%3$s)'),
$title = sprintf(__('Documentation Page Changed %s - %s (%s)'),
$this->get_wikipage()->title,
$this->get_wikipage()->summary,
$this->get_wikipage()->get_project()->shortname);

View File

@@ -262,6 +262,11 @@ $ctl[] = array('regex' => '#^/p/([\-\w]+)/doc/$#',
'model' => 'IDF_Views_Wiki',
'method' => 'index');
$ctl[] = array('regex' => '#^/p/([\-\w]+)/doc/list/$#',
'base' => $base,
'model' => 'IDF_Views_Wiki',
'method' => 'listing');
$ctl[] = array('regex' => '#^/p/([\-\w]+)/doc/create/$#',
'base' => $base,
'model' => 'IDF_Views_Wiki',
@@ -287,11 +292,21 @@ $ctl[] = array('regex' => '#^/p/([\-\w]+)/doc/delrev/(\d+)/$#',
'model' => 'IDF_Views_Wiki',
'method' => 'deleteRev');
$ctl[] = array('regex' => '#^/p/([\-\w]+)/doc/resrev/(\d+)/$#',
'base' => $base,
'model' => 'IDF_Views_Wiki',
'method' => 'restoreRev');
$ctl[] = array('regex' => '#^/p/([\-\w]+)/doc/delete/(\d+)/$#',
'base' => $base,
'model' => 'IDF_Views_Wiki',
'method' => 'delete');
$ctl[] = array('regex' => '#^/p/([\-\w]+)/doc/history/(.*)/$#',
'base' => $base,
'model' => 'IDF_Views_Wiki',
'method' => 'history');
$ctl[] = array('regex' => '#^/p/([\-\w]+)/page/(.*)/$#',
'base' => $base,
'model' => 'IDF_Views_Wiki',

View File

@@ -115,4 +115,10 @@ Pluf_Signal::connect('queuecron.php::run',
Pluf_Signal::connect('IDF_Queue::processItem',
Pluf::f('idf_hook_process_item',
array('IDF_Webhook', 'process')));
#
# Wiki init
Pluf_Signal::connect('IDF_Project::created',
array('IDF_WikiPage', 'projectCreated'));
return $m;

View File

@@ -14,7 +14,7 @@
<tr>
<th>&nbsp;</th>
<th class="a-c"><strong>{trans 'Access Rights'}</strong></th>
<th class="a-c"><strong>{trans 'Notification Emails'}</strong></th>
<th class="a-c"><strong>{trans 'Notification Email'}</strong></th>
</tr>
<tr>
<th><strong>{$form.f.downloads_access_rights.labelTag}:</strong></th>

View File

@@ -16,6 +16,34 @@
</td>
</tr>
<tr>
<td colspan="2">{$form.f.wiki_default_page.labelTag}:<br />
{if $form.f.wiki_default_page.errors}{$form.f.wiki_default_page.fieldErrors}{/if}
{$form.f.wiki_default_page|unsafe}
</td>
<script type="text/javascript" src="{media '/idf/js/jquery.bgiframe.min.js'}"></script>
<script type="text/javascript" src="{media '/idf/js/jquery.autocomplete.min.js'}"></script>
<script type="text/javascript" charset="utf-8">
{literal}
$(document).ready(function(){
var auto_wiki_page_name = [{/literal}{$auto_wiki_page_name|safe}{literal}];
$("#id_wiki_default_page").autocomplete(auto_wiki_page_name, {
minChars: 0,
width: 310,
matchContains: true,
max: 50,
highlightItem: false,
formatItem: function(row, i, max, term) {
return row.to.replace(new RegExp("(" + term + ")", "gi"), "<strong>$1</strong>") + " <span style='font-size: 80%;'>" + row.name + "</span>";
},
formatResult: function(row) {
return row.to;
}
});
});
{/literal}
</script>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="{trans 'Save Changes'}" name="submit" />
</td>

View File

@@ -5,7 +5,7 @@
{block body}
{if $trackerEmpty}
{aurl 'create_url', 'IDF_Views_Issue::create', array($project.shortname)}
<p>{blocktrans}The issue tracker is empty.<br /><a href="{$create_url}">Create your first issue</a>.{/blocktrans}</p>
<p>{blocktrans}The issue tracker is empty.<br />You can create your first issue <a href="{$create_url}">here</a>.{/blocktrans}</p>
{else}
<div class='issue-summary'>
{foreach $tagStatistics as $key => $class}

View File

@@ -3,11 +3,11 @@
{block body}
<div class="issue-prev-next">
{if $previous_issue_id}
<a href="{url 'IDF_Views_Issue::view', array($project.shortname, $previous_issue_id)}" title="{if $closed}{trans 'View the previous closed issue'}{else}{trans 'View the previous open issue'}{/if}">Previous issue</a>
<a href="{url 'IDF_Views_Issue::view', array($project.shortname, $previous_issue_id)}" title="{if $closed}{trans 'Click here to view the previous closed issue'}{else}{trans 'Click here to view the previous open issue'}{/if}">Previous issue</a>
{/if}
{if $previous_issue_id and $next_issue_id} - {/if}
{if $next_issue_id}
<a href="{url 'IDF_Views_Issue::view', array($project.shortname, $next_issue_id)}" title="{if $closed}{trans 'View the next closed issue'}{else}{trans 'View the next open issue'}{/if}">Next issue</a>
<a href="{url 'IDF_Views_Issue::view', array($project.shortname, $next_issue_id)}" title="{if $closed}{trans 'Click here to view the next closed issue'}{else}{trans 'Click here to view the next open issue'}{/if}">Next issue</a>
{/if}
</div>
{assign $i = 0}

View File

@@ -30,6 +30,6 @@ document.getElementById('id_login').focus()
<div class="issue-submit-info">
<h3>{trans 'Welcome.'}</h3>
{aurl 'url', 'IDF_Views::register', array()}
<p>{blocktrans}You can <a href="{$url}">create an account</a> if you don't have one yet.{/blocktrans}</a></p>
<p>{blocktrans}If you don't have an account yet, you can create one <a href="{$url}">here</a>.{/blocktrans}</a></p>
<p>{trans 'It takes less than a minute to create your account.'}</p></div>
{/block}

View File

@@ -15,14 +15,14 @@
{foreach $downloads as $download}
<span class="label"><a href="{url 'IDF_Views_Download::view', array($project.shortname, $download.id)}" title="{$download.summary}">{$download}</a></span><br />
{/foreach}
<span class="label"> </span><span class="note"><a href="{url 'IDF_Views_Download::index', array($project.shortname)}" title="{trans 'Show more featured downloads'}">{trans 'show more...'}</a></span>
<span class="label"> </span><span class="note"><a href="{url 'IDF_Views_Download::index', array($project.shortname)}">{trans 'show more...'}</a></span>
{/if}
{if count($pages) > 0}
<p><strong>{trans 'Featured Documentation'}</strong><br />
{foreach $pages as $page}
<span class="label"><a href="{url 'IDF_Views_Wiki::view', array($project.shortname, $page.title)}" title="{$page.summary}">{$page.title}</a></span><br />
{/foreach}
<span class="label"> </span><span class="note"><a href="{url 'IDF_Views_Wiki::index', array($project.shortname)}" title="{trans 'Show more featured documentation'}">{trans 'show more...'}</a></span>
<span class="label"> </span><span class="note"><a href="{url 'IDF_Views_Wiki::index', array($project.shortname)}">{trans 'show more...'}</a></span>
{/if}
{assign $ko = 'owners'}
{assign $km = 'members'}

View File

@@ -34,7 +34,7 @@
<td>
{if $form.f.terms.errors}{$form.f.terms.fieldErrors}{/if}
{$form.f.terms|unsafe} <strong>{$form.f.terms.labelTag}</strong><br />
<span class="helptext">{blocktrans}Read the <a id="showterms" href="#theterms">terms and conditions</a> basically <em>"Please be nice, we respect you"</em>.{/blocktrans}</span>
<span class="helptext">{blocktrans}Read the <a id="showterms" href="#theterms">terms and conditions</a> &ndash; basically <em>"Please be nice, we respect you"</em>.{/blocktrans}</span>
</td>
</tr>
<tr>
@@ -49,7 +49,7 @@
<div class="issue-submit-info">
<p>{trans 'Be sure to provide a valid email address, as we are sending a validation link by email.'}</p>
{aurl 'url', 'IDF_Views::passwordRecoveryAsk'}
<p>{blocktrans}If you have just forgotten your login information, then there is no need to create a new account. You can just <a href="{$url}">recover your login name and password</a>.{/blocktrans}</p>
<p>{blocktrans}If you have just forgotten your login information, then there is no need to create a new account. Just go <a href="{$url}">here</a> to recover your login name and password.{/blocktrans}</p>
<p><strong>{trans 'Did you know?'}</strong><br />
{aurl 'url', 'IDF_Views::faq'}
{blocktrans}With your account, you will able to participate in the life of all the projects hosted here. Participating in a software project must be fun, so if you have troubles, you can <a href="{$url}">let us know about your issues at anytime</a>!{/blocktrans}</p>

View File

@@ -44,7 +44,7 @@
<tr><td><span class="scm-action patched" title="{trans 'modified'}">M</span></td><td><a href="{url 'IDF_Views_Source::tree', array($project.shortname, $commit, $filename)}">{$filename}</a>{if !empty($diff.files[$filename])}{assign $ndiff = count($diff.files[$filename]['chunks'])} (<a href="#diff-{$filename|md5}">{blocktrans $ndiff}{$ndiff} diff{plural}{$ndiff} diffs{/blocktrans}</a>){/if}</td></tr>
{/foreach}
{foreach $changes.properties as $filename => $properties}
<tr><td><span class="scm-action property-changed" title="{trans 'properties changed'}">P</span></td><td><a href="{url 'IDF_Views_Source::tree', array($project.shortname, $commit, $filename)}">{$filename}</a>
<tr><td><span class="scm-action property-changed" title="{trans 'properies changed'}">P</span></td><td><a href="{url 'IDF_Views_Source::tree', array($project.shortname, $commit, $filename)}">{$filename}</a>
<table class="properties">
{foreach $properties as $key => $value}
<tr><td>{$key}</td>

View File

@@ -2,7 +2,7 @@
{block tabwiki} class="active"{/block}
{block subtabs}
<div id="sub-tabs">
<a {if $inWiki}class="active" {/if}href="{url 'IDF_Views_Wiki::index', array($project.shortname)}">{trans 'List Pages'}</a>
<a {if $inWiki}class="active" {/if}href="{url 'IDF_Views_Wiki::listing', array($project.shortname)}">{trans 'List Pages'}</a>
{if !$user.isAnonymous()} | <a {if $inCreate}class="active" {/if}href="{url 'IDF_Views_Wiki::create', array($project.shortname)}">{trans 'New Page'}</a> {/if}
{if !$user.isAnonymous() and $inView} | <a href="{url 'IDF_Views_Wiki::update', array($project.shortname, $page.title)}">{trans 'Update This Page'}</a> {/if}
|

View File

@@ -0,0 +1,38 @@
{extends "idf/wiki/base.html"}
{block extraheader}
<meta name="ROBOTS" content="NOINDEX" />
{/block}
{block docclass}yui-t3{assign $inView=true}{/block}
{block body}
<table class="recent-issues">
<tr><th>Id</th><th>Who</th><th>When</th><th>Summary</th><th>Actions</th></tr>
{foreach $revs as $r}
{ashowuser 'submitter', $rev.get_submitter(), $request}
{aurl 'view_url', 'IDF_Views_Wiki::view', array($project.shortname, $page.title), array('rev' => $r->id)}
{aurl 'delete_url', 'IDF_Views_Wiki::deleteRev', array($project.shortname, $r->id)}
{aurl 'restore_url', 'IDF_Views_Wiki::restoreRev', array($project.shortname, $r->id)}
<tr><td><a href="{$view_url}">{$r->id}</a></td><td>{$submitter}</td><td class="a-c">{$r->creation_dtime|dateago}</td><td>{$r->summary}</td><td>{if $r->is_head == false}<a href="{$view_url}">View</a> - <a href="{$delete_url}">Delete</a> - <a href="{$restore_url}">Restore</a>{/if}</td></tr>
{/foreach}
</table>
{aurl 'add_rev', 'IDF_Views_Wiki::update', array($project.shortname, $page.title)}
<p><a href="{$add_rev}"><img style="vertical-align: text-bottom;" src="{media '/idf/img/add.png'}" alt="+" align="bottom"></a> <a href="{$add_rev}">{trans 'Update This Page'}</a></p>
{/block}
{block context}
{ashowuser 'submitter', $page.get_submitter(), $request}
<p><strong>{trans 'Created:'}</strong> <span class="nobrk">{$page.creation_dtime|dateago}</span><br /><span class="nobrk">{blocktrans}by {$submitter}{/blocktrans}</span></p>
{if $rev.creation_dtime != $page.creation_dtime}<p>{ashowuser 'submitter', $rev.get_submitter(), $request}
<strong>{trans 'Updated:'}</strong> <span class="nobrk">{$rev.creation_dtime|dateago}</span><br /><span class="nobrk">{blocktrans}by {$submitter}{/blocktrans}</span></p>{/if}
{if $tags.count()}
<p>
<strong>{trans 'Labels:'}</strong><br />
{foreach $tags as $tag}
<span class="label"><strong>{$tag.class}:</strong>{$tag.name}</span><br />
{/foreach}
</p>{/if}
<p class="helptext"><a href="{url 'IDF_Views_Wiki::view', array($project.shortname, $page.title)}">{trans 'See current revision'}</a></p>
{/block}

View File

@@ -52,9 +52,6 @@ by {$submitter}.{/blocktrans}</p>
{/foreach}
</p>{/if}
{if $revs.count() > 0}
<p><strong>{trans 'Old Revisions'}</strong></p>
<ul>{foreach $revs as $old}
<li><a href="{url 'IDF_Views_Wiki::view', array($project.shortname, $page.title), array('rev'=>$old.id)}">{$old.summary}</a></li>
{/foreach}</ul>
<p class="helptext"><a href="{url 'IDF_Views_Wiki::history', array($project.shortname, $page.title)}">{trans 'See older revision'}</a></p>
{/if}
{/block}

View File

@@ -0,0 +1,17 @@
{aurl 'syntax_url', 'IDF_Views_Wiki::view', array($project.shortname, 'IndeferoMarkdownHelp')}
{aurl 'wiki_add', 'IDF_Views_Wiki::create', array($project.shortname)}
{aurl 'wiki_update', 'IDF_Views_Wiki::update', array($project.shortname, 'IndeferoSummaryDefault')}
{aurl 'wiki_history', 'IDF_Views_Wiki::history', array($project.shortname, 'IndeferoSummaryDefault')}
{aurl 'wiki_admin', 'IDF_Views_Project::adminWiki', array($project.shortname)}
{blocktrans}
Welcome on the documentation section of the project {$project->name}.
All documentation page use the markdown syntax, you can find help about this syntax on this [page]({$syntax_url}).
- You can another Wiki page [here]({$wiki_add}).
- You can update this page [here]({$wiki_update}).
- You can select an other default wiki page [here]({$wiki_admin}). You need to be admin.
All modification on a wiki page are saved, and you can see this history for each pages.
The history of the current page can be see [here]({$wiki_history}).
{/blocktrans}

View File

@@ -0,0 +1,569 @@
Block Elements
==============
Paragraphs and Line Breaks
--------------------------
A paragraph is simply one or more consecutive lines of text, separated
by one or more blank lines. (A blank line is any line that looks like a
blank line -- a line containing nothing but spaces or tabs is considered
blank.) Normal paragraphs should not be indented with spaces or tabs.
The implication of the "one or more consecutive lines of text" rule is
that Markdown supports "hard-wrapped" text paragraphs. This differs
significantly from most other text-to-HTML formatters (including Movable
Type's "Convert Line Breaks" option) which translate every line break
character in a paragraph into a `<br />` tag.
When you *do* want to insert a `<br />` break tag using Markdown, you
end a line with two or more spaces, then type return.
Headers
-------
Markdown supports two styles of headers, [Setext] [1] and [atx] [2].
Setext-style headers are "underlined" using equal signs (for first-level
headers) and dashes (for second-level headers). For example:
This is an H1
=============
This is an H2
-------------
Any number of underlining `=`'s or `-`'s will work.
Atx-style headers use 1-6 hash characters at the start of the line,
corresponding to header levels 1-6. For example:
# This is an H1
## This is an H2
###### This is an H6
Optionally, you may "close" atx-style headers. This is purely
cosmetic -- you can use this if you think it looks better. The
closing hashes don't even need to match the number of hashes
used to open the header. (The number of opening hashes
determines the header level.) :
# This is an H1 #
## This is an H2 ##
### This is an H3 ######
Blockquotes
-----------
Markdown uses email-style `>` characters for blockquoting. If you're
familiar with quoting passages of text in an email message, then you
know how to create a blockquote in Markdown. It looks best if you hard
wrap the text and put a `>` before every line:
> This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet,
> consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus.
> Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus.
>
> Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse
> id sem consectetuer libero luctus adipiscing.
Markdown allows you to be lazy and only put the `>` before the first
line of a hard-wrapped paragraph:
> This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet,
consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus.
Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus.
> Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse
id sem consectetuer libero luctus adipiscing.
Blockquotes can be nested (i.e. a blockquote-in-a-blockquote) by
adding additional levels of `>`:
> This is the first level of quoting.
>
> > This is nested blockquote.
>
> Back to the first level.
Blockquotes can contain other Markdown elements, including headers, lists,
and code blocks:
> ## This is a header.
>
> 1. This is the first list item.
> 2. This is the second list item.
>
> Here's some example code:
>
> return shell_exec("echo $input | $markdown_script");
Any decent text editor should make email-style quoting easy. For
example, with BBEdit, you can make a selection and choose Increase
Quote Level from the Text menu.
Lists
-----
Markdown supports ordered (numbered) and unordered (bulleted) lists.
Unordered lists use asterisks, pluses, and hyphens -- interchangably
-- as list markers:
* Red
* Green
* Blue
is equivalent to:
+ Red
+ Green
+ Blue
and:
- Red
- Green
- Blue
Ordered lists use numbers followed by periods:
1. Bird
2. McHale
3. Parish
It's important to note that the actual numbers you use to mark the
list have no effect on the HTML output Markdown produces. The HTML
Markdown produces from the above list is:
<ol>
<li>Bird</li>
<li>McHale</li>
<li>Parish</li>
</ol>
If you instead wrote the list in Markdown like this:
1. Bird
1. McHale
1. Parish
or even:
3. Bird
1. McHale
8. Parish
you'd get the exact same HTML output. The point is, if you want to,
you can use ordinal numbers in your ordered Markdown lists, so that
the numbers in your source match the numbers in your published HTML.
But if you want to be lazy, you don't have to.
If you do use lazy list numbering, however, you should still start the
list with the number 1. At some point in the future, Markdown may support
starting ordered lists at an arbitrary number.
List markers typically start at the left margin, but may be indented by
up to three spaces. List markers must be followed by one or more spaces
or a tab.
To make lists look nice, you can wrap items with hanging indents:
* Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi,
viverra nec, fringilla in, laoreet vitae, risus.
* Donec sit amet nisl. Aliquam semper ipsum sit amet velit.
Suspendisse id sem consectetuer libero luctus adipiscing.
But if you want to be lazy, you don't have to:
* Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi,
viverra nec, fringilla in, laoreet vitae, risus.
* Donec sit amet nisl. Aliquam semper ipsum sit amet velit.
Suspendisse id sem consectetuer libero luctus adipiscing.
If list items are separated by blank lines, Markdown will wrap the
items in `<p>` tags in the HTML output. For example, this input:
* Bird
* Magic
will turn into:
<ul>
<li>Bird</li>
<li>Magic</li>
</ul>
But this:
* Bird
* Magic
will turn into:
<ul>
<li><p>Bird</p></li>
<li><p>Magic</p></li>
</ul>
List items may consist of multiple paragraphs. Each subsequent
paragraph in a list item must be indented by either 4 spaces
or one tab:
1. This is a list item with two paragraphs. Lorem ipsum dolor
sit amet, consectetuer adipiscing elit. Aliquam hendrerit
mi posuere lectus.
Vestibulum enim wisi, viverra nec, fringilla in, laoreet
vitae, risus. Donec sit amet nisl. Aliquam semper ipsum
sit amet velit.
2. Suspendisse id sem consectetuer libero luctus adipiscing.
It looks nice if you indent every line of the subsequent
paragraphs, but here again, Markdown will allow you to be
lazy:
* This is a list item with two paragraphs.
This is the second paragraph in the list item. You're
only required to indent the first line. Lorem ipsum dolor
sit amet, consectetuer adipiscing elit.
* Another item in the same list.
To put a blockquote within a list item, the blockquote's `>`
delimiters need to be indented:
* A list item with a blockquote:
> This is a blockquote
> inside a list item.
To put a code block within a list item, the code block needs
to be indented *twice* -- 8 spaces or two tabs:
* A list item with a code block:
<code goes here>
It's worth noting that it's possible to trigger an ordered list by
accident, by writing something like this:
1986. What a great season.
In other words, a *number-period-space* sequence at the beginning of a
line. To avoid this, you can backslash-escape the period:
1986\. What a great season.
Code Blocks
-----------
Pre-formatted code blocks are used for writing about programming or
markup source code. Rather than forming normal paragraphs, the lines
of a code block are interpreted literally. Markdown wraps a code block
in both `<pre>` and `<code>` tags.
To produce a code block in Markdown, simply indent every line of the
block by at least 4 spaces or 1 tab. For example, given this input:
This is a normal paragraph:
This is a code block.
Markdown will generate:
<p>This is a normal paragraph:</p>
<pre><code>This is a code block.
</code></pre>
One level of indentation -- 4 spaces or 1 tab -- is removed from each
line of the code block. For example, this:
Here is an example of AppleScript:
tell application "Foo"
beep
end tell
will turn into:
<p>Here is an example of AppleScript:</p>
<pre><code>tell application "Foo"
beep
end tell
</code></pre>
A code block continues until it reaches a line that is not indented
(or the end of the article).
Within a code block, ampersands (`&`) and angle brackets (`<` and `>`)
are automatically converted into HTML entities. This makes it very
easy to include example HTML source code using Markdown -- just paste
it and indent it, and Markdown will handle the hassle of encoding the
ampersands and angle brackets. For example, this:
<div class="footer">
&copy; 2004 Foo Corporation
</div>
will turn into:
<pre><code>&lt;div class="footer"&gt;
&amp;copy; 2004 Foo Corporation
&lt;/div&gt;
</code></pre>
Regular Markdown syntax is not processed within code blocks. E.g.,
asterisks are just literal asterisks within a code block. This means
it's also easy to use Markdown to write about Markdown's own syntax.
Span Elements
=============
Links
-----
Markdown supports two style of links: *inline* and *reference*.
In both styles, the link text is delimited by [square brackets].
To create an inline link, use a set of regular parentheses immediately
after the link text's closing square bracket. Inside the parentheses,
put the URL where you want the link to point, along with an *optional*
title for the link, surrounded in quotes. For example:
This is [an example](http://example.com/ "Title") inline link.
[This link](http://example.net/) has no title attribute.
Will produce:
<p>This is <a href="http://example.com/" title="Title">
an example</a> inline link.</p>
<p><a href="http://example.net/">This link</a> has no
title attribute.</p>
If you're referring to a local resource on the same server, you can
use relative paths:
See my [About](/about/) page for details.
Reference-style links use a second set of square brackets, inside
which you place a label of your choosing to identify the link:
This is [an example][id] reference-style link.
You can optionally use a space to separate the sets of brackets:
This is [an example] [id] reference-style link.
Then, anywhere in the document, you define your link label like this,
on a line by itself:
[id]: http://example.com/ "Optional Title Here"
That is:
* Square brackets containing the link identifier (optionally
indented from the left margin using up to three spaces);
* followed by a colon;
* followed by one or more spaces (or tabs);
* followed by the URL for the link;
* optionally followed by a title attribute for the link, enclosed
in double or single quotes, or enclosed in parentheses.
The following three link definitions are equivalent:
[foo]: http://example.com/ "Optional Title Here"
[foo]: http://example.com/ 'Optional Title Here'
[foo]: http://example.com/ (Optional Title Here)
**Note:** There is a known bug in Markdown.pl 1.0.1 which prevents
single quotes from being used to delimit link titles.
The link URL may, optionally, be surrounded by angle brackets:
[id]: <http://example.com/> "Optional Title Here"
You can put the title attribute on the next line and use extra spaces
or tabs for padding, which tends to look better with longer URLs:
[id]: http://example.com/longish/path/to/resource/here
"Optional Title Here"
Link definitions are only used for creating links during Markdown
processing, and are stripped from your document in the HTML output.
Link definition names may consist of letters, numbers, spaces, and
punctuation -- but they are *not* case sensitive. E.g. these two
links:
[link text][a]
[link text][A]
are equivalent.
The *implicit link name* shortcut allows you to omit the name of the
link, in which case the link text itself is used as the name.
Just use an empty set of square brackets -- e.g., to link the word
"Google" to the google.com web site, you could simply write:
[Google][]
And then define the link:
[Google]: http://google.com/
Because link names may contain spaces, this shortcut even works for
multiple words in the link text:
Visit [Daring Fireball][] for more information.
And then define the link:
[Daring Fireball]: http://daringfireball.net/
Link definitions can be placed anywhere in your Markdown document. I
tend to put them immediately after each paragraph in which they're
used, but if you want, you can put them all at the end of your
document, sort of like footnotes.
Here's an example of reference links in action:
I get 10 times more traffic from [Google] [1] than from
[Yahoo] [2] or [MSN] [3].
[1]: http://google.com/ "Google"
[2]: http://search.yahoo.com/ "Yahoo Search"
Emphasis
--------
Markdown treats asterisks (`*`) and underscores (`_`) as indicators of
emphasis. Text wrapped with one `*` or `_` will be wrapped with an
HTML `<em>` tag; double `*`'s or `_`'s will be wrapped with an HTML
`<strong>` tag. E.g., this input:
*single asterisks*
_single underscores_
**double asterisks**
__double underscores__
will produce:
<em>single asterisks</em>
<em>single underscores</em>
<strong>double asterisks</strong>
<strong>double underscores</strong>
You can use whichever style you prefer; the lone restriction is that
the same character must be used to open and close an emphasis span.
Emphasis can be used in the middle of a word:
un*frigging*believable
But if you surround an `*` or `_` with spaces, it'll be treated as a
literal asterisk or underscore.
To produce a literal asterisk or underscore at a position where it
would otherwise be used as an emphasis delimiter, you can backslash
escape it:
\*this text is surrounded by literal asterisks\*
Code
----
To indicate a span of code, wrap it with backtick quotes (`` ` ``).
Unlike a pre-formatted code block, a code span indicates code within a
normal paragraph. For example:
Use the `printf()` function.
will produce:
<p>Use the <code>printf()</code> function.</p>
To include a literal backtick character within a code span, you can use
multiple backticks as the opening and closing delimiters:
``There is a literal backtick (`) here.``
which will produce this:
<p><code>There is a literal backtick (`) here.</code></p>
The backtick delimiters surrounding a code span may include spaces --
one after the opening, one before the closing. This allows you to place
literal backtick characters at the beginning or end of a code span:
A single backtick in a code span: `` ` ``
A backtick-delimited string in a code span: `` `foo` ``
will produce:
<p>A single backtick in a code span: <code>`</code></p>
<p>A backtick-delimited string in a code span: <code>`foo`</code></p>
With a code span, ampersands and angle brackets are encoded as HTML
entities automatically, which makes it easy to include example HTML
tags. Markdown will turn this:
Please don't use any `<blink>` tags.
into:
<p>Please don't use any <code>&lt;blink&gt;</code> tags.</p>
You can write this:
`&#8212;` is the decimal-encoded equivalent of `&mdash;`.
to produce:
<p><code>&amp;#8212;</code> is the decimal-encoded
equivalent of <code>&amp;mdash;</code>.</p>

View File

@@ -1,5 +1,5 @@
<?php
return array(
'version' => '1.2.1-dev',
'version' => '1.3-dev',
'revision' => '$Format:%H$',
);

View File

@@ -652,7 +652,7 @@ table.diff-contents {
table.diff-linecounts tr,
table.diff-contents tr {
height: 22px;
height: 18px;
}
table.diff-linecounts tr {
@@ -664,9 +664,8 @@ table.diff-linecounts tr:first-child {
}
table.diff-linecounts td {
line-height: 12px;
font-size: 90%;
padding: 2px 10px;
padding: 1px 10px;
text-align: right;
border-left: 1px solid #d3d7cf;
}