Added new backend template files (smartified core tpls and 2k11 admin tpls as well as related assets).

This commit is contained in:
Matthias Mees 2012-12-03 00:59:42 +01:00
parent ca61181daa
commit 8397b08b88
83 changed files with 5385 additions and 0 deletions

View File

@ -0,0 +1,161 @@
{* HTML5: Yes *}
{* jQuery: No *}
{if $post_save}
{if $new}
<span class="msg_success">{$CONST.CATEGORY_SAVED}</span>
{/if}
{if $edit}
{if isset($editPermission) && $editPermission == false}
<span class="msg_error">{$CONST.PERM_DENIED}</span>
{else}
{if $subcat}{$subcat}{else}
<span class="msg_success">{$CONST.CATEGORY_SAVED}</span>
{/if}
{/if}
{/if}
{/if}
{if $doDelete}
{if $deleteSuccess}
<span class="msg_success">{if $remainingCat}{$CONST.CATEGORY_DELETED_ARTICLES_MOVED|sprintf:$remainingCat:$cid}{else}{$cid|string_format:"{$CONST.CATEGORY_DELETED}"}{/if}</span>
{else}
<span class="msg_error">{$CONST.INVALID_CATEGORY}</span>
{/if}
{/if}
{if $delete}
{if $deletePermission == true}
<h2>{$categoryName|escape:"html"}</h2>
<form method="POST" name="serendipityCategory" action="?serendipity[adminModule]=category&amp;serendipity[adminAction]=doDelete&amp;serendipity[cid]={$cid}">
{$formToken}
<div class="form_select">
<label for="remaining_cat">{$CONST.CATEGORY_REMAINING}:</label>
<select id="remaining_cat" name="serendipity[cat][remaining_catid]">
<option value="0">{$CONST.NO_CATEGORY}</option>
{foreach $cats as $cat_data}
<option value="{$cat_data.categoryid}">{$cat_data.category_name|escape:"html"}</option>
{/foreach}
</select>
</div>
<input name="REMOVE" type="submit" value="{$CONST.GO}">
</form>
{/if}
{/if}
{if (! $post_save) && ($edit || $new)}
{if $edit}
<h2>{$category_name|escape:"html"|string_format:"{$CONST.EDIT_THIS_CAT}"}</h2>
{/if}
<form id="serendipity_category" method="POST" name="serendipityCategory">
{$formToken}
<div class="form_field">
<label for="category_name">{$CONST.NAME}</label>
<input id="category_name" name="serendipity[cat][name]" type="text" value="{$this_cat.category_name|default:""|escape:"html"}">
</div>
<div class="form_field">
<label for="category_description">{$CONST.DESCRIPTION}</label>
<input id="category_description" name="serendipity[cat][description]" type="text" value="{$this_cat.category_description|default:""|escape:"html"}">
</div>
<div class="form_field">
<label for="category_icon">{$CONST.IMAGE}</label>
{* TODO: this should probably become/fallback to input[type=file] *}
<input id="category_icon" name="serendipity[cat][icon]" type="text" value="{$this_cat.category_icon|default:""|escape:"html"}" onchange="document.getElementById('imagepreview').src = this.value; document.getElementById('imagepreview').style.display = '';">
<script>
var category_icon = document.getElementById('category_icon');
var imgBtn = document.createElement('div');
imgBtn.id = "insert_image";
imgBtn.innerHTML = '<input type="button" name="insImage" value="{$CONST.IMAGE}" onclick="window.open(\'serendipity_admin_image_selector.php?serendipity[htmltarget]=category_icon&amp;serendipity[filename_only]=true\', \'ImageSel\', \'width=800,height=600,toolbar=no,scrollbars=1,scrollbars,resize=1,resizable=1\');">';
category_icon.parentNode.insertBefore(imgBtn, category_icon.nextSibling);
</script>
<!-- noscript>FIXXME: Emit a warning if JS is disabled</noscript -->
</div>
<figure id="preview">
<figcaption>{$CONST.PREVIEW}</figcaption>
<img id="imagepreview" src="{$this_cat.category_icon|default:""|escape:"html"}" alt="">
</figure>
<div class="form_multiselect">
<label for="read_authors">{$CONST.PERM_READ}</label>
<select id="read_authors" size="6" multiple="multiple" name="serendipity[cat][read_authors][]">
<option value="0"{if $selectAllReadAuthors} selected="selected"{/if}>{$CONST.ALL_AUTHORS}</option>
{foreach $groups as $group}
<option value="{$group.confkey}"{if isset($read_groups.{$group.confkey})} selected="selected"{/if} >{$group.confvalue|escape:"html"}</option>
{/foreach}
</select>
</div>
<div class="form_multiselect">
<label for="write_authors">{$CONST.PERM_WRITE}</label>
<select id="write_authors"size="6" multiple="multiple" name="serendipity[cat][write_authors][]">
<option value="0"{if $selectAllReadAuthors} selected="selected"{/if}>{$CONST.ALL_AUTHORS}</option>
{foreach $groups as $group}
<option value="{$group.confkey}"{if isset($read_groups.{$group.confkey})} selected="selected"{/if}>{$group.confvalue|escape:"html"}</option>
{/foreach}
</select>
</div>
<div class="form_select">
<label for="parent_cat">{$CONST.PARENT_CATEGORY}</label>
<select id="parent_cat" name="serendipity[cat][parent_cat]">
<option value="0"{if $cid == 0} selected="selected"{/if}>{$CONST.NO_CATEGORY}</option>
{foreach $categories as $cat}
{if $cat.categoryid == $cid}{continue}{/if}
<option value="{$cat.categoryid}"{if $this_cat.parentid == $cat.categoryid} selected="selected"{/if}>{for $i=1 to $cat.depth}&nbsp{/for} {$cat.category_name}</option>
{/foreach}
</select>
</div>
<fieldset>
<legend><span>{$CONST.CATEGORY_HIDE_SUB}</span></legend>
<p>{$CONST.CATEGORY_HIDE_SUB_DESC}</p>
<div class="clearfix">
<div class="form_radio">
<input id="hide_sub_yes" name="serendipity[cat][hide_sub]" type="radio" value="1"{if $this_cat.hide_sub== 1} checked="checked"{/if}>
<label for="hide_sub_yes">{$CONST.YES}</label>
</div>
<div class="form_radio">
<input id="hide_sub_no" name="serendipity[cat][hide_sub]" type="radio" value="0"{if $this_cat.hide_sub == 0} checked="checked"{/if}>
<label for="hide_sub_no">{$CONST.NO}</label>
</div>
</div>
</fieldset>
<input name="SAVE" type="submit" value="{$save}">
</form>
<script src="serendipity_editor.js"></script>
{/if}
{if $view}
<h2>{$CONST.CATEGORY_INDEX}:</h2>
{if is_array($viewCats)}
<ul id="categories" class="plainList">
{foreach $viewCategories as $category}
{* TODO: Ideally, this should use true nesting, i.e. nested lists instead of a level class. *}
<li class="clearfix level_{$category.depth}">
<details class="category_data">
<summary class="category_name{if $category.category_icon} category_hasicon{/if}">{$category.category_name|escape:"html"}</summary>
<div class="category_info">
{if $category.category_description != ''}
<p class="category_desc">{$category.category_description|escape:"html"}</p>
{/if}
<span class="category_author block_level standalone">{if $category.authorid == 0}{$CONST.ALL_AUTHORS}{else}{$category.realname|escape:"html"}{/if}</span>
</div>
</details>
<ul class="plainList edit_actions">
<li><a class="link_edit" href="?serendipity[adminModule]=category&amp;serendipity[adminAction]=edit&amp;serendipity[cid]={$category.categoryid}">{$CONST.EDIT}</a></li>
<li><a class="link_delete" href="?serendipity[adminModule]=category&amp;serendipity[adminAction]=delete&amp;serendipity[cid]={$category.categoryid}">{$CONST.DELETE}</a></li>
</ul>
</li>
{/foreach}
</ul>
{else}
<span class="msg_notice">{$CONST.NO_CATEGORIES}</span>
{/if}
<a class="link_create" href="?serendipity[adminModule]=category&serendipity[adminAction]=new">{$CONST.CREATE_NEW_CAT}</a>
{/if}

View File

@ -0,0 +1,218 @@
{* HTML5: Yes *}
{* jQuery: No *}
{if !empty($errormsg)}
<span class="msg_error">{$errormsg}</span>
{/if}
{* Smarty 3 has a new auto literal option which is enabled by default.
When the { is followed by a space it's not interpreted as smarty delimiter but literal. *}
<script>
function FT_toggle(id) {
if ( document.getElementById(id + '_full').style.display == '' ) {
document.getElementById(id + '_full').style.display='none';
document.getElementById(id + '_summary').style.display='';
document.getElementById(id + '_text').innerHTML = '{$CONST.VIEW_FULL}';
} else {
document.getElementById(id + '_full').style.display='';
document.getElementById(id + '_summary').style.display='none';
document.getElementById(id + '_text').innerHTML = '{$CONST.HIDE}';
}
return false;
}
function invertSelection() {
var f = document.formMultiDelete;
for (var i = 0; i < f.elements.length; i++) {
if( f.elements[i].type == 'checkbox' ) {
f.elements[i].checked = !(f.elements[i].checked);
f.elements[i].onclick();
}
}
}
var origborder = '';
var origwidth = '';
function highlightComment(id, checkvalue) {
var comment = document.getElementById(id);
if (origborder == '') {
origborder = comment.style.borderColor;
if (origborder == '') {
origborder = '#FFFFFF';
}
}
if (origwidth == '') {
origwidth = comment.style.borderWidth;
if (origwidth == '' || origwidth == 0) {
origwidth = 1;
}
}
if (checkvalue) {
comment.style.borderColor = '#FF0000';
comment.style.borderWidth = origwidth;
} else {
comment.style.borderColor = '';
comment.style.borderWidth = origwidth;
}
}
</script>
<h2>{$CONST.COMMENTS}</h2>
<form action="" method="GET">
{$formtoken}
<input name="serendipity[adminModule]" type="hidden" value="comments">
<input name="serendipity[page]" type="hidden" value="{$page}">
<fieldset id="filter_comments">
<legend><span>{$CONST.FILTERS} ({$CONST.FIND_COMMENTS})</span></legend>
<div class="clearfix">
<div class="form_field">
<label for="filter_author">{$CONST.AUTHOR}:</label>
<input id="filter_author" name="serendipity[filter][author]" type="text" value="{$get.filter.author|escape}">
</div>
<div class="form_field">
<label for="filter_email">{$CONST.EMAIL}:</label>
<input id="filter_email" name="serendipity[filter][email]" type="text" value="{$get.filter.email|escape}">
</div>
<div class="form_field">
<label for="filter_url">{$CONST.URL}:</label>
<input id="filter_url" name="serendipity[filter][url]" type="text" value="{$get.filter.url|escape}">
</div>
<div class="form_field">
<label for="filter_ip">IP:</label>
<input id="filter_ip" name="serendipity[filter][ip]" type="text" value="{$get.filter.ip|escape}">
</div>
<div class="form_field">
<label for="filter_body">{$CONST.CONTENT}:</label>
<input id="filter_body" name="serendipity[filter][body]" type="text" value="{$get.filter.body|escape}">
</div>
<div class="form_field">
<label for="filter_referer">{$CONST.REFERER}:</label>
<input id="filter_referer" name="serendipity[filter][referer]" type="text" value="{$get.filter.referer|escape}">
</div>
<div class="form_select">
<label for="filter_perpage">{$CONST.COMMENTS}:</label>
<select id="filter_perpage" name="serendipity[filter][perpage]">
{foreach $filter_vals AS $filter}
<option value="{$filter}" {($commentsPerPage == $filter) ? ' selected="selected"' : ''}>{$filter}</option>
{/foreach}
</select>
</div>
<div class="form_select">
<label for="filter_show">{$CONST.COMMENTS_FILTER_SHOW}:</label>
<select id="filter_show" name="serendipity[filter][show]">
<option value="all"{if $get.filter.show == 'all'} selected="selected"{/if}>{$CONST.COMMENTS_FILTER_ALL}</option>
<option value="approved"{if $get.filter.show == 'approved'} selected="selected"{/if}>{$CONST.COMMENTS_FILTER_APPROVED_ONLY}</option>
<option value="pending"{if $get.filter.show == 'pending'} selected="selected"{/if}>{$CONST.COMMENTS_FILTER_NEED_APPROVAL}</option>
<option value="confirm"{if $get.filter.show == 'confirm'} selected="selected"{/if}>{$CONST.COMMENTS_FILTER_NEED_CONFIRM}</option>
</select>
</div>
<div class="form_select">
<label for="filter_type">{$CONST.TYPE}</label>
<select id="filter_type" name="serendipity[filter][type]">
<option value="">{$CONST.COMMENTS_FILTER_ALL}</option>
<option value="NORMAL"{if $c_type == 'NORMAL'} selected="selected"{/if}>{$CONST.COMMENTS}</option>
<option value="TRACKBACK"{if $c_type == 'TRACKBACK'} selected="selected"{/if}>{$CONST.TRACKBACKS}</option>
<option value="PINGBACK"{if $c_type == 'PINGBACK'} selected="selected"{/if}>{$CONST.PINGBACKS}</option>
</select>
</div>
</div>
</fieldset>
<input name="submit" type="submit" value="{$CONST.GO}">
{serendipity_hookPlugin hookAll=true hook="backend_comments_top" addData=$sql}
</form>
{if !is_array($sql)}
<span class="msg_notice">{$CONST.NO_COMMENTS}</span>
{* TODO: l18n *}
<a class="block_level" href="serendipity_admin.php?serendipity[adminModule]=comments">Return to default comment list</a>
{else}
<form id="formMultiDelete" action="" method="POST" name="formMultiDelete">
{$formtoken}
<input name="serendipity[formAction]" type="hidden" value="multiDelete">
<nav class="pagination">
<h2>{$CONST.PAGE_BROWSE_COMMENTS|sprintf:$page:$pages:$totalComments}</h2>
{if ($page != 1 && $page <= $pages)||$page != $pages}
<ul class="clearfix">
{if ($page != 1 && $page <= $pages)}
<li><a class="link_prev" href="{$linkPrevious}">{$CONST.PREVIOUS}</a></li>
{/if}
{if $page != $pages}
<li><a class="link_next" href="{$linkNext}">{$CONST.NEXT}</a></li>
{/if}
</ul>
{/if}
</nav>
{if is_array($comments)}
<ul class="plainList">
{foreach $comments AS $comment}
<li><h3 id="c{$comment.id}">{($comment.type == 'NORMAL') ? $CONST.COMMENT : (($comment.type == 'TRACKBACK') ? $CONST.TRACKBACK : $CONST.PINGBACK )} #{$comment.id}, {$CONST.IN_REPLY_TO} <a href="{$comment.entry_url}">{$comment.title|escape}</a> {$CONST.ON} {$comment.timestamp|@formatTime:'%b %e %Y, %H:%M'}</h3>
<input class="action_highlight_comment" type="checkbox" name="serendipity[delete][{$comment.id}]" value="{$comment.entry_id}" onclick="highlightComment('comment_{$comment.id}', this.checked)" tabindex="{$i}">
<div id="comment_{$comment.id}">
<dl class="comment_data clearfix">
<dt>{$CONST.AUTHOR}:</dt>
<dd>{$comment.author|escape|truncate:30:"&hellip;"} {$comment.action_author}</dd>
<dt>{$CONST.EMAIL}:</dt>
<dd>{if empty($comment.email)}N/A{else}<a href="mailto:{$comment.email|escape}" title="{$comment.email|escape}">{$comment.email|escape|truncate:30:"&hellip;"}</a>{if $comment.subscribed == 'true'} <span class="serendipity_subscription_on">({$CONST.ACTIVE_COMMENT_SUBSCRIPTION})</span>{/if}{/if}</dd>
{* TODO: This should not emit an img *}
<dd class="action_email">{$comment.action_email}</dd>
<dt>IP:</dt>
<dd>{if empty($comment.ip)}N/A{else}{$comment.ip|escape}{/if}</dd>
{* TODO: This should not emit an img *}
<dd class="action_ip">{$comment.action_ip}</dd>
<dt>{$CONST.URL}:</dt>
<dd>{if empty($comment.url)}N/A{else}<a class="link_url" href="{$comment.url|escape}" title="{$comment.url|escape}">{$comment.url|escape|truncate:30:"&hellip;"}</a> {/if}</dd>
<dd class="action_url">{$comment.action_url}</dd>
<dt>{$CONST.REFERER}:</dt>
<dd>{if empty($comment.referer)}N/A{else}<a class="link_url" href="{$comment.referer|escape}" title="{$comment.referer|escape}">{$comment.referer|escape|truncate:30:"&hellip;"}</a>{/if}</dd>
<dd class="action_referer">{$comment.action_referer}</dd>
</dl>
<div id="{$comment.id}_summary" class="comment_summary">{$comment.summary}</div>
<div id="{$comment.id}_full" class="comment_full" style="display:none;">{$comment.fullBody}</div>
<ul class="actions clearfix">
{if ($comment.status == 'pending') || ($comment.status == 'confirm')}
<li><a class="link_approve" href="?serendipity[action]=admin&amp;serendipity[adminModule]=comments&amp;serendipity[adminAction]=approve&amp;serendipity[id]={$comment.id}&amp;{$urltoken}">{$CONST.APPROVE}</a></li>
{/if}
{if ($comment.status == 'approved')}
<li><a class="link_moderate" href="?serendipity[action]=admin&amp;serendipity[adminModule]=comments&amp;serendipity[adminAction]=pending&amp;serendipity[id]={$comment.id}&amp;{$urltoken}">{$CONST.SET_TO_MODERATED}</a></li>
{/if}
{if $comment.excerpt}
<li><a class="link_toggle" href="#c{$comment.id}" onclick="FT_toggle({$comment.id}); return false;"><span id="{$comment.id}_text">{$CONST.TOGGLE_ALL}</span></a></li>
{/if}
<li><a class="link_view" href="{$entrylink}">{$CONST.VIEW}</a></li>
<li><a class="link_edit" href="?serendipity[action]=admin&amp;serendipity[adminModule]=comments&amp;serendipity[adminAction]=edit&amp;serendipity[id]={$comment.id}&amp;serendipity[entry_id]={$comment.entry_id}&amp;{$urltoken}">{$CONST.EDIT}</a></li>
<li><a class="link_delete" href="?serendipity[action]=admin&amp;serendipity[adminModule]=comments&amp;serendipity[adminAction]=delete&amp;serendipity[id]={$comment.id}&amp;serendipity[entry_id]={$comment.entry_id}&amp;{$urltoken}" onclick='return confirm("{($CONST.COMMENT_DELETE_CONFIRM|sprintf:$comment.id:$comment.author)|escape}")'>{$CONST.DELETE}</a></li>
<li><a class="link_comment" onclick="cf = window.open(this.href, 'CommentForm', 'width=800,height=600,toolbar=no,scrollbars=1,scrollbars,resize=1,resizable=1'); cf.focus(); return false;" href="?serendipity[action]=admin&amp;serendipity[adminModule]=comments&amp;serendipity[adminAction]=reply&amp;serendipity[id]={$comment.id}&amp;serendipity[entry_id]={$comment.entry_id}&amp;serendipity[noBanner]=true&amp;serendipity[noSidebar]=true&amp;{$urltoken}">{$CONST.REPLY}</a></li>
</ul>
{$comment.action_more}
</div>
</li>
{/foreach}
</ul>
{/if}
<div class="multidelete_actions">
<input name="toggle" type="button" value="{$CONST.INVERT_SELECTIONS}" onclick="invertSelection()">
<input name="toggle" type="submit" value="{$CONST.DELETE_SELECTED_COMMENTS}" onclick="return confirm('{$CONST.COMMENTS_DELETE_CONFIRM}')" tabindex="{($i+1)}">
<input name="serendipity[togglemoderate]" type="submit" value="{$CONST.MODERATE_SELECTED_COMMENTS}">
</div>
{* TODO: Clone pagination using JS *}
</form>
{/if}

View File

@ -0,0 +1,25 @@
{* HTML5: Yes *}
{* jQuery: NN *}
{if $installAction == 'check'}
{if $diagnosticError}
<h2>{$CONST.DIAGNOSTIC_ERROR}</h2>
{foreach $res as $r}
<span class="msg_error">{$r}</span>
{/foreach}
{else}
{if $htaccessRewrite}
<h2>{$CONST.ATTEMPT_WRITE_FILE|sprintf:"{$serendipityPath}htaccess"}</h2>
{if is_array($res)}
{foreach $res as $r}
<span class="msg_notice">{$r}</span>
{/foreach}
{else}
<span class="msg_success">{$CONST.DONE}</span>
{/if}
{/if}
<span class="msg_success">{$CONST.WRITTEN_N_SAVED}</span>
{/if}
{else}
{$config}
{/if}

View File

@ -0,0 +1,205 @@
{* HTML5: Yes *}
{* jQuery: No *}
{if $drawList}
<form action="?" method="get">
<input name="serendipity[action]" type="hidden" value="admin">
<input name="serendipity[adminModule]" type="hidden" value="entries">
<input name="serendipity[adminAction]" type="hidden" value="editSelect">
<fieldset id="filter_entries">
<legend><span>{$CONST.FILTERS} ({$CONST.FIND_ENTRIES})</span></legend>
<div class="clearfix">
<div class="form_select">
<label for="filter_author">{$CONST.AUTHOR}</label>
<select id="filter_author" name="serendipity[filter][author]">
<option value="">-</option>
{if is_array($users)}
{foreach $users AS $user}
{if isset($user.artcount) && $user.artcount < 1}{continue}{/if}
<option value="{$user.authorid}" {(isset($get.filter.author) && ($get.filter.author == $user.authorid)) ? 'selected="selected"' : ''}>{$user.realname|escape}</option>
{/foreach}
{/if}
</select>
<label for="filter_draft" class="visuallyhidden">TODO_LANG</label>
<select id="filter_draft" name="serendipity[filter][isdraft]">
<option value="all">{$CONST.COMMENTS_FILTER_ALL}</option>
<option value="draft" {(isset($get.filter.isdraft) && ($get.filter.isdraft == 'draft') ? 'selected="selected"' : '')}>{$CONST.DRAFT}</option>
<option value="publish" {(isset($get.filter.isdraft) && ($get.filter.isdraft == 'publish') ? 'selected="selected"' : '')}>{$CONST.PUBLISH}</option>
</select>
</div>
<div class="form_select">
<label for="filter_category">{$CONST.CATEGORY}</label>
<select id="filter_category" name="serendipity[filter][category]">
<option value="">-</option>
{foreach $categories as $cat}
<option value="{$cat.categoryid}"{($get.filter.category == $cat.categoryid) ? ' selected="selected"' : ''}>{'&nbsp;'|str_repeat:$cat.depth} {$cat.category_name|escape}</option>
{/foreach}
</select>
</div>
<div class="form_field">
<label for="filter_content">{$CONST.CONTENT}</label>
<input id="filter_content" name="serendipity[filter][body]" type="text" value="{(isset($get.filter.body)) ? "{$get.filter.body|escape}" : ''}">
</div>
</div>
</fieldset>
<fieldset id="sort_entries">
<legend><span>{$CONST.SORT_ORDER}</span></legend>
<div class="clearfix">
<div class="form_select">
<label for="sort_order">{$CONST.SORT_BY}</label>
<select id="sort_order" name="serendipity[sort][order]">
{foreach $sort_order as $so_key => $so_val}
<option value="{$so_key}" {(isset($get.sort.order) && ($get.sort.order == $so_key) ? 'selected="selected"': '')}>{$so_val}</option>
{/foreach}
</select>
</div>
<div class="form_select">
<label for="sort_ordermode">{$CONST.SORT_ORDER}</label>
<select id="sort_ordermode" name="serendipity[sort][ordermode]">
<option value="DESC" {(isset($get.sort.ordermode) && ($get.sort.ordermode == 'DESC') ? 'selected="selected"' : '')}>{$CONST.SORT_ORDER_DESC}</option>
<option value="ASC" {(isset($get.sort.ordermode) && ($get.sort.ordermode == 'ASC') ? 'selected="selected"' : '')}>{$CONST.SORT_ORDER_ASC}</option>
</select>
</div>
<div class="form_select">
<label for="sort_perpage">{$CONST.ENTRIES_PER_PAGE}</label>
<select id="sort_perpage" name="serendipity[sort][perPage]">
{foreach $per_page AS $per_page_nr}
<option value="{$per_page_nr}" {((isset($get.sort.perPage) && ($get.sort.perPage == $per_page_nr)) ? 'selected="selected"' : '')}> {$per_page_nr}</option>
{/foreach}
</select>
</div>
</div>
</fieldset>
<input name="go" type="submit" value="{$CONST.GO}">
</form>
{if $is_entries}
{if $offSet > 0}||$count > $perPage}
<nav class="pagination">
<ul class="clearfix">
{if $offSet > 0}
<li><a class="link_prev" href="{$linkPrevious}">{$CONST.PREVIOUS}</a></li>
{/if}
{if $count > $perPage}
<li><a class="link_next" href="{$linkNext}">{$CONST.NEXT}</a></li>
{/if}
</ul>
</nav>
{/if}
<script src="{serendipity_getFile file='admin/admin_scripts.js'}"></script>
<form id="formMultiDelete" action="?" method="post" name="formMultiDelete">
{$formtoken}
<input name="serendipity[action]" type="hidden" value="admin">
<input name="serendipity[adminModule]" type="hidden" value="entries">
<input name="serendipity[adminAction]" type="hidden" value="multidelete">
<ul class="plainList">
{foreach $entries as $entry}
{if ($entry@index > $perPage)}{continue}{/if}
<li><h3><a href="?serendipity[action]=admin&amp;serendipity[adminModule]=entries&amp;serendipity[adminAction]=edit&amp;serendipity[id]={$entry.id}" title="#{$entry.id}">{$entry.title|escape|truncate:50:"&hellip;"}</a></h3>
<input id="multidelete_entry{$entry.id}" name="serendipity[multiDelete][]" type="checkbox" value="{$entry.id}"><label for="multidelete_entry{$entry.id}" class="visuallyhidden">TODO_LANG #{$entry_id}</label>
<div class="entry_status">
{if (!$showFutureEntries) && ($entry.timestamp >= $serverOffsetHour)}
<span class="status_future">{$CONST.ENTRY_PUBLISHED_FUTURE}</span>
{/if}
{if $entry.ep_is_sticky}
<span class="status_sticky">{$CONST.STICKY_POSTINGS}</span>
{/if}
{if $entry.isdraft}
<span class="status_draft">{$CONST.DRAFT}</span>
{/if}
<span class="status_timestamp">
{$entry.timestamp|@formatTime:"{$CONST.DATE_FORMAT_SHORT}"}{if $entry.timestamp <= ($entry.last_modified - (60*30))} <a href="#" title="{$CONST.LAST_UPDATED}: {$entry.last_modified|@formatTime:"{$CONST.DATE_FORMAT_SHORT}"}" onclick="alert(this.title)">TODO_LANG</a>{/if}
</span>
</div>
<span class="entry_meta">{$CONST.POSTED_BY} {$entry.author|escape}
{if count($entry.cats)} {$CONST.IN}
{foreach $entry.cats AS $cat}
{$cat}{if (count($entry.cats) > 1) && !$cat@last}, {/if}
{/foreach}
{/if}
</span>
<ul class="actions">
{if $entry.preview || (!$showFutureEntries && ($entry.timestamp >= $serverOffsetHour))}
<li><a class="link_view" href="{$entry.preview_link}" title="{$CONST.PREVIEW} #{$entry.id}">{$CONST.PREVIEW}</a></li>
{else}
<li><a class="link_view" href="{$entry.archive_link}" title="{$CONST.VIEW} #{$entry.id}">{$CONST.VIEW}</a></li>
{/if}
<li><a class="link_edit" href="?serendipity[action]=admin&amp;serendipity[adminModule]=entries&amp;serendipity[adminAction]=edit&amp;serendipity[id]={$entry.id}" title="{$CONST.EDIT} #{$entry.id}">{$CONST.EDIT}</a></li>
<li><a class="link_delete" href="?{$urltoken}&amp;serendipity[action]=admin&amp;serendipity[adminModule]=entries&amp;serendipity[adminAction]=delete&amp;serendipity[id]={$entry.id}" title="{$CONST.DELETE} #{$entry.id}">{$CONST.DELETE}</a></li>
</ul>
</li>
{/foreach}
</ul>
{/if}
{* TODO: Clone pagination using JS *}
<div id="multidelete_tools">
<input name="toggle" type="button" value="{$CONST.INVERT_SELECTIONS}" onclick="invertSelection()">
<input name="toggle" type="submit" value="{$CONST.DELETE_SELECTED_ENTRIES}">
</div>
</form>
<form action="?" method="get">
<input name="serendipity[action]" type="hidden" value="admin">
<input name="serendipity[adminModule]" type="hidden" value="entries">
<input name="serendipity[adminAction]" type="hidden" value="editSelect">
<fieldset id="entry_skip" class="clearfix">
<legend><span>{$CONST.EDIT_ENTRY} #</span></legend>
<div class="form_field">
<input id="skipto_entry" name="serendipity[id]" type="text" size="3">
<label for="skipto_entry" class="visuallyhidden">TODO_LANG</label>
</div>
</fieldset>
<input name="serendipity[editSubmit]" type="submit" value="{$CONST.GO}">
</form>
{/if}
{* BUG: This seems to be triggered if only one entry is present and said entry should be deleted? Ian: Is it gone now? *}
{if ( ( (!$switched_output && empty($entries)) || (!$drawList && empty($entries)) ) && ( $get.adminAction != 'new' && $get.adminAction != 'edit' ) && !$is_iframepreview )}
<span class="msg_notice">{$CONST.NO_ENTRIES_TO_PRINT}</span>
{/if}
{if $switched_output}
{if ($get.adminAction && $dateval)}
<span class="msg_error">{$CONST.DATE_INVALID}</span>
{/if}
{if ($get.adminAction && $use_legacy)}
{if $is_draft}
<span class="msg_success">{$CONST.IFRAME_SAVE_DRAFT}</span>
{/if}
{if $is_iframe}
<span class="msg_success">{$CONST.IFRAME_SAVE}</span>
{/if}
{if $is_iframepreview}
<span class="msg_success">{$CONST.IFRAME_PREVIEW}</span>
{/if}
{/if}
{if ($is_doDelete || $is_doMultiDelete )}
{foreach $del_entry AS $delent}
<span class="msg_dialog_delentry">{$delent}</span>
{/foreach}
{/if}
{if ( $is_delete || $is_multidelete )}
{foreach $rip_entry AS $ripent}
<span class="msg_dialog_ripentry">{$ripent}</span>
{/foreach}
<ul class="dialog_delrip plainList clearfix">
<li><a class="link_abort" href="{$smarty.server.HTTP_REFERER|escape}">{$CONST.NOT_REALLY}</a></li>
<li><a class="link_confirm" href="{$newLoc}">{$CONST.DUMP_IT}</a></li>
</ul>
{/if}
{/if}

View File

@ -0,0 +1,4 @@
{* HTML5: Yes *}
{* jQuery: NN *}
<p><strong>{$CONST.WELCOME_BACK} {$smarty.session.serendipityUser|escape}</strong></p>

View File

@ -0,0 +1,4 @@
{* HTML5: Yes *}
{* jQuery: NN *}
<a id="export_rss" class="block_level standalone" href="{$serendipityBaseURL}rss.php?version=2.0&all=1">{$CONST.EXPORT_FEED}</a>

View File

@ -0,0 +1,127 @@
{* HTML5: Yes *}
{* jQuery: NN *}
{if $delete_yes}
<span class="msg_success">{$CONST.DELETED_GROUP|sprintf:"{$group_id|escape:"html"}":"{$group.name|escape:"html"}"}</span>
{/if}
{if $save_new}
<span class="msg_success">{$CONST.CREATED_GROUP|sprintf:"{$group_id|escape:"html"}":"{$group.name|escape:"html"}"}</span>
{/if}
{if $save_edit}
<span class="msg_success">{$CONST.MODIFIED_GROUP|sprintf:"{$name|escape:"html"}"}</span>
{/if}
{if !$delete}
<h2>{$CONST.GROUP}</h2>
<ul id="serendipity_groups" class="plainList">
{foreach $groups as $group}
<li class="clearfix">
<span class="group_name">{$group.name|escape:"html"}</span>
<ul class="plainList edit_actions">
<li><a class="link_edit" href="?serendipity[adminModule]=groups&amp;serendipity[adminAction]=edit&amp;serendipity[group]={$group.id}" title="{$CONST.EDIT} {$group.name|escape:"html"}">{$CONST.EDIT}</a></li>
{* BUG: Doesn't skip to the deletion process - What does that mean??? *}
<li><a class="link_delete" href="?{$deleteFormToken}&amp;serendipity[adminModule]=groups&amp;serendipity[adminAction]=delete&amp;serendipity[group]={$group.id}" title="{$CONST.DELETE} {$group.name|escape:"html"}">{$CONST.DELETE}</a></li>
</ul>
</li>
{/foreach}
</ul>
{if $start}
<form action="?serendipity[adminModule]=groups" method="post">
<input name="NEW" type="submit" value="{$CONST.CREATE_NEW_GROUP}">
</form>
{/if}
{/if}
{if $edit || $new}
<form action="?serendipity[adminModule]=groups" method="post">
{$formToken}
{if $edit}
<h3>{$CONST.EDIT}</h3>
<input name="serendipity[group]" type="hidden" value="{$from.id}">
{else}
<h3>{$CONST.CREATE}</h3>
{/if}
<div class="form_field">
<label for="group_name">{$CONST.NAME}</label>
{* BUG: Doesn't correctly pull the group name *}
<input id="group_name" name="serendipity[name]" type="text" value="{$from.name|escape:"html"}">
</div>
<div class="form_select">
<label for="group_members">{$CONST.USERCONF_GROUPS}</label>
<select id="group_members" name="serendipity[members][]" multiple="multiple" size="5">
{foreach $allusers as $user}
<option value="{$user.authorid}" {if isset($selected.{$user.authorid})} selected="selected"{/if} >{$user.realname|escape:"html"}</option>
{/foreach}
</select>
</div>
{foreach $perms as $perm}
{* TODO: major rewrite *}
{if {{$perm@key}|truncate:"2":""} == 'f_'}{continue}{/if}
{if !isset($section)}
{$section=$perm@key}
{/if}
{if $section != {$perm@key} && {{$perm@key}|truncate:"{$section|count_characters}":""} == $section}
{$indent="&nbsp;&nbsp;"}
{else}
{if $section != {$perm@key}}
{$indent="<br>"}
{$section="{$perm@key}"}
{/if}
{/if}
{if !$perm.permission}
<div>
<span class="perm_name">{$indent} {$perm.permission_name|escape:"html"}</span>
<span class="perm_status">{(isset($from.{$perm@key}) && $from.{$perm@key} == "true") ? $CONST.YES : $CONST.NO}</span>
</div>
{else}
<div class="form_check">
{$indent} <label for="{{$perm@key}|escape:"html"}">{$perm.permission_name|escape:"html"}</label>
<input id="{{$perm@key}|escape:"html"}" name="serendipity[{{$perm@key}|escape:"html"}]" type="checkbox" value="true"{if isset({$from.{$perm@key}}) && {$from.{$perm@key}} == "true"} checked="checked"{/if}>
</div>
{/if}
{/foreach}
{if $enablePluginACL}
<div class="form_select">
<label for="forbidden_plugins">{$CONST.PERMISSION_FORBIDDEN_PLUGINS}</label>
<select id="forbidden_plugins" name="serendipity[forbidden_plugins][]" multiple="multiple" size="5">
{foreach $allplugins as $plugin}
<option value="{{$plugin@key}|escape:"url"}{if $plugin.has_permission == false} selected="selected"{/if}">{$plugin.b->properties.name|escape:"html"}</option>
{/foreach}
</select>
</div>
<div class="form_select">
<label for="forbidden_hooks">{$CONST.PERMISSION_FORBIDDEN_HOOKS}</label>
<select name="serendipity[forbidden_hooks][]" multiple="multiple" size="5">
{foreach $allhooks as $hook}
<option value="{{$hook@key}|escape:"url"}"{$hook.has_permission == false} 'selected="selected"'}>{{$hook@key}|escape:"html"}</option>
{/foreach}
</select>
</div>
{else}
<span class="msg_notice">{$CONST.PERMISSION_FORBIDDEN_ENABLE_DESC}</span>
{/if}
{if $edit}
<input name="SAVE_EDIT" type="submit" value="{$CONST.SAVE}"> {$CONST.WORD_OR} <input name="SAVE_NEW" type="submit" value="{$CONST.CREATE_NEW_GROUP}">
{else}
<input name="SAVE_NEW" type="submit" value="{$CONST.CREATE_NEW_GROUP}">
{/if}
</form>
{else}
{if $delete}
<form action="?serendipity[adminModule]=groups" method="post">
{$formToken}
<input name="serendipity[group]" type="hidden" value="{$group_id|escape:"html"}">
<h2>{$CONST.DELETE_GROUP|sprintf:"{$group_id}":"{$group.name|escape:"html"}"}</h2>
<div id="groups_delete_action">
<input name="DELETE_YES" type="submit" value="{$CONST.DUMP_IT}">
<input name="NO" type="submit" value="{$CONST.NOT_REALLY}">
</div>
</form>
{/if}
{/if}

View File

@ -0,0 +1,300 @@
{* HTML5: Yes *}
{* jQuery: No *}
{if $case_imgedit}
<span class="msg_notice">{$CONST.PREFERENCE_USE_JS_WARNING}</span>
{/if}
{if $case_sync}
{if !$perm_adminImagesSync}
<span class="msg_error">{$CONST.PERM_DENIED}</span>
{else}
<span class="msg_notice">{$CONST.WARNING_THIS_BLAHBLAH|replace:'\\n':'<br>'}</span>
<form method="POST" action="serendipity_admin.php?serendipity[adminModule]=media&amp;serendipity[adminAction]=doSync">
<fieldset>
<legend><span>{$CONST.SYNC_OPTION_LEGEND}</span></legend>
<div class="clearfix">
<div class="form_radio">
<input id="keepthumbs" name="serendipity[deleteThumbs]" type="radio" value="no" checked="checked">
<label for="keepthumbs">{$CONST.SYNC_OPTION_KEEPTHUMBS}</label>
</div>
<div class="form_radio">
<input id="sizecheckthumbs" name="serendipity[deleteThumbs]" type="radio" value="check">
<label for="sizecheckthumbs">{$CONST.SYNC_OPTION_SIZECHECKTHUMBS}</label>
</div>
<div class="form_radio">
<input id="deletethumbs" name="serendipity[deleteThumbs]" type="radio" value="yes">
<label for="deletethumbs">{$CONST.SYNC_OPTION_DELETETHUMBS}</label>
</div>
</div>
</fieldset>
<div class="form_buttons">
<input name="doSync" type="submit" value="{$CONST.CREATE_THUMBS}">
<a href="serendipity_admin.php">{$CONST.ABORT_NOW}</a>
</div>
</form>
{/if}
{/if}
{if $case_doSync}
{if !$perm_adminImagesSync}
<span class="msg_error">{$CONST.PERM_DENIED}</span>
{else}
<h2>{$CONST.SYNCING}</h2>
<span class="msg_success">{$print_SYNC_DONE}</span>
<h2>{$CONST.RESIZING}</h2>
<span class="msg_success">{$print_RESIZE_DONE}</span>
{/if}
{/if}
{if $case_delete}
<span class="msg_notice">{$CONST.ABOUT_TO_DELETE_FILE|sprintf:"$file"}</span>
<form id="delete_image" method="get">
<div class="form_buttons">
<a href="{$newLoc}">{$CONST.DUMP_IT}</a>
<a href="{$abortLoc}">{$CONST.ABORT_NOW}</a>
</div>
</form>
{/if}
{if $switched_output}
<form id="delete_image" method="get">
{if ( $is_delete || $is_multidelete )}
<span class="msg_notice">{$CONST.ABOUT_TO_DELETE_FILES}</span>
{foreach $rip_image AS $ripimg}
<span class="msg_dialog_ripentry">{$ripimg}</span>
{/foreach}
<ul class="dialog_delrip">
<li><a class="link_abort" href="{$smarty.server.HTTP_REFERER|escape}">{$CONST.NOT_REALLY}</a></li>
<li><a class="link_confirm" href="{$newLoc}">{$CONST.DUMP_IT}</a></li>
</ul>
{/if}
</form>
{/if}
{if $case_rename}
{if $go_back}
<input type="button" value="{$CONST.BACK}" onclick="history.go(-1);">
{else}
<script>location.href="?serendipity[adminModule]=images&serendipity[adminAction]=default";</script>
<noscript><a href="?serendipity[adminModule]=images&amp;serendipity[adminAction]=default">{$CONST.DONE}</a></noscript>
{/if}
{/if}
{* TODO: obsolete? *}
{if $case_properties}
{** serendipity_showPropertyForm($new_media) **}
{/if}
{* END TODO *}
{if $case_add}
{if $smarty.post.adminSubAction == 'properties'}
<script>location.href="?serendipity[adminModule]=images&serendipity[adminAction]=default";</script>
<noscript><a href="?serendipity[adminModule]=images&amp;serendipity[adminAction]=default">{$CONST.DONE}</a></noscript>
{else}
{$showML_add}
{/if}
{/if}
{if $case_directoryDoDelete}
{if $print_DIRECTORY_WRITE_ERROR}{$print_DIRECTORY_WRITE_ERROR}{/if}
{if $ob_serendipity_killPath}{$ob_serendipity_killPath}{/if}
{if $print_ERROR_NO_DIRECTORY}{$print_ERROR_NO_DIRECTORY}{/if}
{/if}
{if $case_directoryEdit}
{if !empty($smarty.post.save)}
{if $ob_serendipity_moveMediaDirectory}{$ob_serendipity_moveMediaDirectory}{/if}
<span class="msg_notice">{$print_CONST.SETTINGS_SAVED_AT}</span>
{/if}
<h2>{$CONST.MANAGE_DIRECTORIES}</h2>
<form id="image_directory_edit_form" method="POST" action="?serendipity[adminModule]=images&amp;serendipity[adminAction]=directoryEdit&amp;serendipity[dir]={$dir|escape:'html'}">
{$formtoken}
<input name="serendipity[oldDir]" type="hidden" value="{$use_dir}">
<div class="form_field">
<label for="diredit_new">{$CONST.NAME}</label>
<input id="diredit_new" name="serendipity[newDir]" type="text" value="{$use_dir}">
</div>
<div class="form_select">
<label for="read_authors">{$CONST.PERM_READ}</label>
<select id="read_authors" name="serendipity[read_authors][]" multiple="multiple" size="6">
<option value="0"{if $rgroups} selected="selected"{/if}>{$CONST.ALL_AUTHORS}</option>
{foreach $groups AS $group}
<option value="{$group.confkey}"{if isset($read_groups.{$group.confkey})} selected="selected"{/if}>{$group.confvalue|escape:'html'}</option>
{/foreach}
</select>
</div>
<div class="form_select">
<label for="write_authors">{$CONST.PERM_WRITE}</label>
<select id="write_authors" name="serendipity[write_authors][]" multiple="multiple" size="6">
<option value="0"{if $wgroups} selected="selected"{/if}>{$CONST.ALL_AUTHORS}</option>
{foreach $groups AS $group}
<option value="{$group.confkey}"{if isset($write_groups.{$group.confkey})} selected="selected"{/if}>{$group.confvalue|escape:'html'}</option>
{/foreach}
</select>
</div>
<div class="form_check">
<input id="setchild" name="serendipity[update_children]" type="checkbox" value="true"{if !empty($smarty.post.update_children) == 'on'} checked="checked"{/if}><label for="setchild">{$CONST.PERM_SET_CHILD}</label>
</div>
<input name="serendipity[save]" type="submit" value="{$CONST.SAVE}">
</form>
{/if}
{if $case_directoryDelete}
<h2>{$CONST.DELETE_DIRECTORY}</h2>
<p>{$CONST.DELETE_DIRECTORY_DESC}</p>
<form id="image_directory_delete_form" method="POST" action="?serendipity[adminModule]=images&amp;serendipity[adminAction]=directoryDoDelete&amp;serendipity[dir]={$dir|escape:'html'}">
{$formtoken}
<div class="form_check">
<input id="diredit_delete" name="serendipity[nuke]" type="checkbox" value="true">
<label for="diredit_delete"><b>{$basename_dir}</b> - {$CONST.FORCE_DELETE}</label>
</div>
{* I think this is redudant: <p>{$CONST.CONFIRM_DELETE_DIRECTORY|sprintf:$dir|escape:'html'}</p> *}
<input name="SAVE" type="submit" value="{$CONST.DELETE_DIRECTORY}">
</form>
{/if}
{if $case_directoryDoCreate}
{if $print_DIRECTORY_CREATED}{$print_DIRECTORY_CREATED}{/if}
{if $print_DIRECTORY_WRITE_ERROR}{$print_DIRECTORY_WRITE_ERROR}{/if}
{/if}
{if $case_directoryCreate}
<h2>{$CONST.CREATE_DIRECTORY}</h2>
<p>{$CONST.CREATE_DIRECTORY_DESC}</p>
<form id="image_directory_create_form" method="POST" action="?serendipity[step]=directoryDoCreate&amp;serendipity[adminModule]=images&amp;serendipity[adminAction]=directoryDoCreate">
{$formtoken}
<div class="form_field">
<label for="dircreate_name">{$CONST.NAME}</label>
<input id="dircreate_name" name="serendipity[name]" type="text" value="">
</div>
<div class="form_select">
<label for="dircreate_parent">{$CONST.PARENT_DIRECTORY}</label>
<select id="dircreate_parent" name="serendipity[parent]">
<option value="">{$CONST.BASE_DIRECTORY}</option>
{foreach $folders as $folder}
<option{if $folder.relpath == $get.only_path} selected="selected"{/if} value="{$folder.relpath}">{'&nbsp;'|str_repeat:"($folder.depth*2)"} {$folder.name}</option>
{/foreach}
</select>
</div>
{serendipity_hookPlugin hookAll=true hook="backend_directory_createoptions" addData=$folders}
<input name="SAVE" type="submit" value="{$CONST.CREATE_DIRECTORY}">
</form>
{/if}
{if $case_directorySelect}
<h2>{$CONST.MANAGE_DIRECTORIES}</h2>
<p>{$CONST.DIRECTORIES_AVAILABLE}</p>
<h3>{$CONST.BASE_DIRECTORY}</h3>
<ul class="plainList">
{foreach $folders as $folder}
<li class="level_{$folder.depth} clearfix">
<span class="folder_name">{$folder.name}</span>
<a class="link_edit" href="?serendipity[adminModule]=images&amp;serendipity[adminAction]=directoryEdit&amp;serendipity[dir]={$folder.relpath|escape:'html'}">{$CONST.EDIT}</a>
<a class="link_delete" href="?serendipity[adminModule]=images&amp;serendipity[adminAction]=directoryDelete&amp;serendipity[dir]={$folder.relpath|escape:'html'}">{$CONST.DELETE}</a>
</li>
{/foreach}
</ul>
<a class="link_create block_level" href="?serendipity[adminModule]=images&amp;serendipity[adminAction]=directoryCreate">{$CONST.CREATE_NEW_DIRECTORY}</a>
{/if}
{* TODO: obsolete? *}
{if $case_addSelect}
{** smarty display 'admin/media_upload.tpl' **}
{/if}
{* END TODO *}
{if $case_rotateCW}
{if $rotate_img_done}
<script>location.href="{$adminFile_redirect}";</script>
<noscript><a href="{$adminFile_redirect}">{$CONST.DONE}</a></noscript>
{/if}
{/if}
{if $case_rotateCCW}
{if $rotate_img_done}
<script>location.href="{$adminFile_redirect}";</script>
<noscript><a href="{$adminFile_redirect}">{$CONST.DONE}</a></noscript>
{/if}
{/if}
{if $case_scale}
{if $print_SCALING_IMAGE}<span class="msg_notice">{$print_SCALING_IMAGE}</span>{/if}
{if $print_serendipity_scaleImg}<span class="msg_notice">{$print_serendipity_scaleImg}</span>{/if}
<span class="msg_notice">{$CONST.DONE}</span>
<script>location.href="?serendipity[adminModule]=images&serendipity[adminAction]=default";</script>
<noscript><a href="?serendipity[adminModule]=images&amp;serendipity[adminAction]=default">{$CONST.DONE}</a></noscript>
{/if}
{if $case_scaleSelect}
<script>
<!--
function rescale(dim, newval) {ldelim}
var originalWidth = {$img_width};
var originalHeight = {$img_height};
var ratio = originalHeight/originalWidth;
var trans = new Array();
trans['width'] = new Array('serendipity[height]', ratio);
trans['height'] = new Array('serendipity[width]', 1/ratio);
if (document.serendipityScaleForm.elements['auto'].checked == true) {ldelim}
document.serendipityScaleForm.elements[trans[dim][0]].value=Math.round(trans[dim][1]*newval);
{rdelim}
document.getElementsByName('serendipityScaleImg')[0].style.width =
document.serendipityScaleForm.elements['serendipity[width]'].value+'px';
document.getElementsByName('serendipityScaleImg')[0].style.height =
document.serendipityScaleForm.elements['serendipity[height]'].value+'px';
{rdelim}
//-->
</script>
{if $print_RESIZE_BLAHBLAH}<span class="msg_notice">{$print_RESIZE_BLAHBLAH}</span>{/if}
{if $print_ORIGINAL_SIZE}<span class="msg_notice">{$print_ORIGINAL_SIZE}</span>{/if}
<h2>{$CONST.HERE_YOU_CAN_ENTER_BLAHBLAH}</h2>
<form name="serendipityScaleForm" action="?" method="GET">
{$formtoken}
<input name="serendipity[adminModule]" type="hidden" value="images">
<input name="serendipity[adminAction]" type="hidden" value="scale">
<input name="serendipity[fid]" type="hidden" value="{$get.fid}">
<fieldset>
<legend><span>{$CONST.NEWSIZE}</span></legend>
<div class="form_field">
<label for="resize_width">Width</label> {* i18n *}
<input id="resize_width" name="serendipity[width]" type="text" onchange="rescale('width' , value);" value="{$img_width}">
</div>
<div class="form_field">
<label for="resize_height">Height</label> {* i18n *}
<input id="resize_height" name="serendipity[height]" type="text" onchange="rescale('height', value);" value="{$img_height}">
</div>
</fieldset>
<div class="form_check">
<input id="resize_keepprops" name="auto" type="checkbox" checked="checked">
<label for="resize_keepprops">{$CONST.KEEP_PROPORTIONS}</label>
</div>
<input name="scale" type="button" value="{$CONST.IMAGE_RESIZE}" onclick="if (confirm('{$CONST.REALLY_SCALE_IMAGE}')) document.serendipityScaleForm.submit();">
</form>
<img src="{$file}" name="serendipityScaleImg" style="width: {$img_width}px; height: {$img_height}px;" alt="">
{/if}
{if $case_default}
{if $showML_def}{$showML_def}{/if}
{/if}

View File

@ -0,0 +1,55 @@
{* HTML5: Yes *}
{* jQuery: NN *}
{if $importForm}
{if $die}
<span class="msg_error">FAILURE: Unable to require import module, possible syntax error?</span>
{else}
{if $validateData}
<span class="msg_notice">{$CONST.IMPORT_STARTING}</span>
{if $result != true}
<span class="msg_error">{$CONST.IMPORT_FAILED}: {$result}</span>
{else}
<span class="msg_success">{$CONST.IMPORT_DONE}</span>
{/if}
{else}
<h2>{$CONST.IMPORT_PLEASE_ENTER}</h2>
<form action="" method="POST" enctype="multipart/form-data">
{$formToken}
<dl>
{foreach $fields as $field}
<dt>{$field.text}</dt>
<dd>{$field.guessedInput}</dd>
{/foreach}
</dl>
{if $notes}
<span class="msg_notice">{$CONST.IMPORT_NOTES}: {$notes}</span>
{/if}
<input type="submit" value="{$CONST.IMPORT_NOW}">
</form>
{/if}
{/if}
{else}
<h2>{$CONST.IMPORT_WELCOME}</h2>
<p>{$CONST.IMPORT_WHAT_CAN}</p>
<h3>{$CONST.IMPORT_SELECT}:</h3>
<form action="" method="GET">
<input name="serendipity[adminModule]" type="hidden" value="import">
{$formToken}
<div class="form_select">
<label for="import_from">{$CONST.IMPORT_WEBLOG_APP}:</label>
<select id="import_from" name="serendipity[importFrom]">
{foreach $list as $v => $k}
<option value="{$v}">{$k}</option>
{/foreach}
</select>
</div>
<input type="submit" value="{$CONST.GO}">
</form>
{/if}

View File

@ -0,0 +1,264 @@
{* HTML5: Yes *}
{* jQuery: NN *}
{if $is_errors && is_array($errors)}
{foreach $errors AS $error}
<span class="msg_error">{$error}</span>
{/foreach}
{/if}
{if $getstepint0}
<h2>{$CONST.WELCOME_TO_INSTALLATION}</h2>
<h3>{$CONST.FIRST_WE_TAKE_A_LOOK}</h3>
<p>{$print_ERRORS_ARE_DISPLAYED_IN}</p>
<h3>{$CONST.PRE_INSTALLATION_REPORT|sprintf:$s9yversion}</h3>
<div id="diagnose">
<h4>{$CONST.INTEGRITY}</h4>
<ul class="plainList">
{foreach $installerResultDiagnose_CHECKSUMS AS $cksum}
<li>{$cksum}</li>
{/foreach}
</ul>
<table>
<caption>{$CONST.PHP_INSTALLATION}</caption>
<thead>
<tr>
{* NOTE: These are probably poorly labelled, needs to be checked *}
<th>Key</th> {* i18n *}
<th>Value</th> {* i18n *}
</tr>
</thead>
<tbody>
<tr>
<td>{$CONST.OPERATING_SYSTEM}</td>
<td>{$php_uname}</td>
</tr>
<tr>
<td>{$CONST.WEBSERVER_SAPI}</td>
<td>{$php_sapi_name}</td>
</tr>
<tr>
<td>PHP version >= 5.2.6</td>
<td>{$installerResultDiagnose_VERSION}</td>
</tr>
<tr>
<td>Database extensions</td>
<td>{$installerResultDiagnose_DBTYPE}</td>
</tr>
<tr>
<td>Session extension</td>
<td>{$installerResultDiagnose_SESSION}</td>
</tr>
<tr>
<td>PCRE extension</td>
<td>{$installerResultDiagnose_PCRE}</td>
</tr>
<tr>
<td>GDlib extension</td>
<td>{$installerResultDiagnose_GD}</td>
</tr>
<tr>
<td>OpenSSL extension</td>
<td>{$installerResultDiagnose_OPENSSL}</td>
</tr>
<tr>
<td>mbstring extension</td>
<td>{$installerResultDiagnose_MBSTR}</td>
</tr>
<tr>
<td>iconv extension</td>
<td>{$installerResultDiagnose_ICONV}</td>
</tr>
<tr>
<td>zlib extension</td>
<td>{$installerResultDiagnose_ZLIB}</td>
</tr>
<tr>
<td>Imagemagick binary </td>
<td>{$installerResultDiagnose_IM}</td>
</tr>
</tbody>
</table>
<table>
<caption>{$CONST.PHPINI_CONFIGURATION}</caption>
<thead>
<tr>
<th>&nbsp;</th>
<th>{$CONST.RECOMMENDED}</th>
<th>{$CONST.ACTUAL}</th>
</tr>
</thead>
<tbody>
<tr>
<td>safe_mode</td>
<td><strong>OFF</strong></td>
<td>{$installerResultDiagnose_SSM}</td>
</tr>
<tr>
<td>register_globals</td>
<td><strong>OFF</strong></td>
<td>{$installerResultDiagnose_SRG}</td>
</tr>
<tr>
<td>magic_quotes_gpc</td>
<td><strong>OFF</strong></td>
<td>{$installerResultDiagnose_SMQG}</td>
</tr>
<tr>
<td>magic_quotes_runtime</td>
<td><strong>OFF</strong></td>
<td>{$installerResultDiagnose_SMQR}</td>
</tr>
<tr>
<td>session.use_trans_sid</td>
<td><strong>OFF</strong></td>
<td>{$installerResultDiagnose_SSUTS}</td>
</tr>
<tr>
<td>allow_url_fopen</td>
<td><strong>ON</strong></td>
<td>{$installerResultDiagnose_SAUF}</td>
</tr>
<tr>
<td>file_uploads</td>
<td><strong>ON</strong></td>
<td>{$installerResultDiagnose_SFU}</td>
</tr>
<tr>
<td>post_max_size</td>
<td><strong>10M</strong></td>
<td>{$installerResultDiagnose_SPMS}</td>
</tr>
<tr>
<td>upload_max_filesize</td>
<td><strong>10M</strong></td>
<td>{$installerResultDiagnose_SUMF}</td>
</tr>
<tr>
<td>memory_limit</td>
<td><strong>{($CONST.PHP_INT_SIZE == 4) ? '8M' : '16M'}</strong></td>
<td>{$installerResultDiagnose_SML}</td>
</tr>
</tbody>
</table>
<h4>{$CONST.PERMISSIONS}</h4>
<h5>{$basedir}</h5>
<ul class="plainList">
{foreach $installerResultDiagnose_WRITABLE AS $fwrite}
<li>{$fwrite}</li>
{/foreach}
</ul>
<h5>{$basedir} {$CONST.PATH_SMARTY_COMPILE}</h5>
<ul class="plainList">
{foreach $installerResultDiagnose_COMPILE AS $compile}
<li>{$compile}</li>
{/foreach}
</ul>
<h5>{$basedir}archives/</h5>
<ul class="plainList">
{foreach $installerResultDiagnose_ARCHIVES AS $archives}
<li>{$archives}</li>
{/foreach}
</ul>
<h5>{$basedir}plugins/</h5>
<ul class="plainList">
{foreach $installerResultDiagnose_PLUGINS AS $plugins}
<li>{$plugins}</li>
{/foreach}
</ul>
{if $is_dir_uploads}
<h5>{$basedir}uploads/</h5>
<ul class="plainList">
{foreach $installerResultDiagnose_UPLOADS AS $uploads}
<li>{$uploads}</li>
{/foreach}
</ul>
{/if}
{if $is_imb_executable}
<h5>Execute Imagemagick binary</h5>
<ul class="plainList">
{foreach $installerResultDiagnose_IMB AS $im_binary}
<li>{$im_binary}</li>
{/foreach}
</ul>
{/if}
{if $showWritableNote}
<span class="msg_notice">{$CONST.PROBLEM_PERMISSIONS_HOWTO|sprintf:'chmod 1777'}</span>
{/if}
{if $errorCount > 0}
<span class="msg_error">{$CONST.PROBLEM_DIAGNOSTIC}</span>
<a class="block_level" href="serendipity_admin.php">{$CONST.RECHECK_INSTALLATION}</a>
{else}
<span class="msg_notice">{$CONST.SELECT_INSTALLATION_TYPE}:</span>
<div><a href="?serendipity[step]=2a">{$CONST.SIMPLE_INSTALLATION}</a> - <a href="?serendipity[step]=2b">{$CONST.EXPERT_INSTALLATION}</a></div>
{/if}
</div>
{elseif $s9yGETstep == '2a'}
<form action="?" method="post">
<input name="serendipity[step]" type="hidden" value="{$s9yGETstep}">
<input name="serendipity[getstep]" type="hidden" value="3">
{if $ob_serendipity_printConfigTemplate}{$ob_serendipity_printConfigTemplate}{/if}
<input name="submit" type="submit" value="{$CONST.COMPLETE_INSTALLATION}">
</form>
{elseif $s9yGETstep == '2b'}
<form action="?" method="post">
<input name="serendipity[step]" type="hidden" value="{$s9yGETstep}">
<input name="serendipity[getstep]" type="hidden" value="3">
{if $ob_serendipity_printConfigTemplate}{$ob_serendipity_printConfigTemplate}{/if}
<input name="submit" type="submit" value="{$CONST.COMPLETE_INSTALLATION}">
</form>
{elseif $getstepint3}
<h3>{$CONST.CHECK_DATABASE_EXISTS}</h3>
{if is_array($authors_query)}
<span class="msg_success"><strong>{$CONST.THEY_DO}</strong>, {$CONST.WONT_INSTALL_DB_AGAIN}</span>
{else}
<span class="msg_error"><strong>{$CONST.THEY_DONT}</strong></span>
<ol>
<li>{$CONST.CREATE_DATABASE}{if $install_DB} <strong>{$CONST.DONE}</strong>{/if}</li>
<li>{$CONST.CREATING_PRIMARY_AUTHOR|sprintf:"{$smarty.post.user|escape}"}{if $add_authors} <strong>{$CONST.DONE}</strong>{/if}</li>
<li>{$CONST.SETTING_DEFAULT_TEMPLATE}{if $set_template_vars} <strong>{$CONST.DONE}</strong>{/if}</li>
<li>{$CONST.INSTALLING_DEFAULT_PLUGINS}{if $register_default_plugins} <strong>{$CONST.DONE}</strong>{/if}</li>
</ol>
{/if}
<h3>{$CONST.ATTEMPT_WRITE_FILE|sprintf:'.htaccess'}</h3>
{if $errors_sif === true}
<span class="msg_success">{$CONST.DONE}</span>
{else}
<h4>{$CONST.FAILED}</h4>
<ul class="plainList">
{foreach $errors_sif AS $error_f}
<li><span class="msg_error">{$error_f}</span></li>
{/foreach}
</ul>
{/if}
{if $s9y_installed}
<span class="msg_success">{$CONST.SERENDIPITY_INSTALLED}</span>
<p><strong>{$CONST.THANK_YOU_FOR_CHOOSING}</strong></p>
<a class="block_level" href="{$smarty.post.serendipityHTTPPath}">{$CONST.VISIT_BLOG_HERE}</a>
{else}
<span class="msg_error">{$CONST.ERROR_DETECTED_IN_INSTALL}</span>
{/if}
{/if}

View File

@ -0,0 +1,180 @@
{* HTML5: Yes *}
{* jQuery: No *}
{* serendipity_plugins_admin.inc.php::serendipity_plugin_config() - the OUT_STACK loop *}
{if $ctype == 'seperator'}
{* This could just as well be replaced by a CSS-only solution … *}
<hr>
{* … then again, hr has new meaning in HTML5. *}
{/if}
{if $ctype == 'select'}
<div class="clearfix form_select">
<label for="serendipity_{$config_item}">{$cname}
{if $cdesc != ''}<span>{$cdesc}</span>{/if}
</label>
{* Make sure id creation actually produces unique identifiers *}
<select id="serendipity_{$config_item}" class="direction_{$lang_direction}" name="serendipity[{$postKey}][{$config_item}]{($is_multi_select) ? '[]' : ''}" {($is_multi_select) ? 'multiple="multiple"' : ''} {($is_multi_select && ($select_size > 0)) ? "size='{$select_size}'" : ''}>
{foreach $select AS $select_value => $select_desc}
{assign var="id" value="{$config_item|escape}_{$select_value|escape}"}
<!-- case select assign id={$id} -->
<option value="{$select_value}" {(in_array($select_value, $selected_options) || in_array($select_value, $pre_selected)) ? 'selected="selected"' : ''} title="{$select_desc|escape}">{$select_desc|escape}</option>
{/foreach}
</select>
</div>
{/if}
{if $ctype == 'radio'}
<div class="clearfix">
<fieldset>
<legend><span>{$cname}</span></legend>
{if $cdesc != ''}<p>{$cdesc}</p>{/if}
<div class="clearfix">
{foreach $radio_button AS $r}
<div class="form_radio">
<input id="serendipity_plugin_{$r['id']}" class="direction_{$lang_direction}" name="serendipity[{$postKey}][{$config_item}]" type="radio" value="{$r['value']}" {(!empty($r['checked'])) ? 'checked="checked"' : ''} title="{$r['index']|escape}">
<label for="serendipity_plugin_{$r['id']}">{$r['index']}{* escapement is already done *}</label>
{assign var="r" value="counter[0]"}
</div>
{/foreach}
</div>
</fieldset>
</div>
{/if}
{if $ctype == 'string'}
<div class="clearfix form_field">
<label for="serendipity_{$config_item}">{$cname}
{if $cdesc != ''}<span>{$cdesc}</span>{/if}
</label>
{* TODO: Make sure id creation actually produces unique identifiers *}
<input id="serendipity_{$config_item}" class="direction_{$lang_direction}" name="serendipity[{$postKey}][{$config_item}]" type="{$input_type}" value="{$hvalue}">
</div>
{/if}
{if (($ctype == 'html') || ($ctype == 'text'))}
<div class="clearfix form_area">
<label for="nuggets{$elcount}">{$cname}
{if $cdesc != ''}<span>{$cdesc}</span>{/if}
</label>
<textarea id="nuggets{$elcount}" class="direction_{$lang_direction}" name="serendipity[{$postKey}][{$config_item}]" rows="{$text_rows}">{$hvalue}</textarea>
</div>
{/if}
{if $ctype == 'content'}
<div class="clearfix">
{$cbag_default}
</div>
{/if}
{if $ctype == 'custom'}
<div class="clearfix">
<input id="config_{$postKey}_{$config_item}" name="serendipity[{$postKey}][{$config_item}]" type="hidden" value="{$hvalue}">
{$cbag_custom}
</div>
{/if}
{if $ctype == 'hidden'}
<div class="clearfix">
<input name="serendipity[{$postKey}][{$config_item}]" type="hidden" value="{$cbag_value}">
</div>
{/if}
{if $ctype == 'media'}
<div class="clearfix">
{if !$mediajs_output}
<script src="serendipity_editor.js"></script>
<script src="{serendipity_getFile file='admin/image_selector.js'}"></script>
{/if}
<label for="serendipity[{$postKey}][{$config_item}]">{$cname}
{if $cdesc != ''}<span>{$cdesc}</span>{/if}
</label>
<div id="{$config_item}_preview" style="background-image: url({$value}); width: {$preview_width}; height: {$preview_height}; background-repeat: no-repeat;">&nbsp;</div>
{* This should be input[type=file] … *}
<input id="serendipity[{$postKey}][{$config_item}]" name="serendipity[{$postKey}][{$config_item}]" type="text" value="{$value}" onchange="change_preview('{$config_item}')">
<a href="#" onclick="choose_media('serendipity[{$postKey}][{$config_item}]')">{$CONST.MEDIA_LIBRARY}</a>
{* … not touching it in order to not break it for now. *}
</div>
{/if}
{if $ctype == 'sequence'}
<div class="clearfix">
{if !$sequencejs_output}
<script src="{serendipity_getFile file='dragdrop.js'}"></script>
{/if}
<fieldset>
<legend><span>{$cname}</span></legend>
{if $cdesc != ''}
<p>{$cdesc}</p>
{/if}
<input id="{$config_item}_value" name="serendipity[{$postKey}][{$config_item}]" type="hidden" value="{$value}">
<noscript>
<!-- Replace standard submit button when using up/down submits -->
<input name="SAVECONF" type="hidden" value="Save">
</noscript>
<ol id="{$config_item}" class="sequence_container pluginmanager_container">
{foreach $order_id as $orid}
<li id="{$orid['id']}" class="sequence_item pluginmanager_item_even">
<div id="g{$orid['id']}" class="pluginmanager_grablet sequence_grablet"><a href="#"></a></div>
{if $checkable}
<input id="activate_{$orid['id']}" name="serendipity[{$postKey}][activate][{$config_item}][{$orid['id']}]" {(in_array($orid['id'], $store_order)) ? ' checked="checked" ' : ''} type="checkbox" onclick="sort_{$config_item}_Sequence();" value="true">
{/if}
<span>{$items[{$orid['id']}]['display']}</span>
{if isset($items[{$orid['id']}]['img'])}
<img src="{$items[{$orid['id']}]['img']}">
{/if}
<noscript>
<div>
{if ($orid['sort_idx'] == 0)}
&nbsp;
{else}
{* Button label should be localized *}
<button id="{$postKey}_{$config_item}_{$orid['sort_idx']}_up" name="serendipity[{$postKey}][override][{$config_item}]" type="submit" value="{$orid['oneup']}">Move Up</button>
{/if}
{if ($orid['sort_idx'] == $last)}
&nbsp;
{else}
{* Button label should be localized *}
<button id="{$postKey}_{$config_item}_{$orid['sort_idx']}_down" name="serendipity[{$postKey}][override][{$config_item}]" type="submit" value="{$orid['onedown']}">Move Down</button>
{/if}
</div>
</noscript>
</li>
{/foreach}
</ol>
{if (!is_array($items) || empty($order_id))}
{$none}
{/if}
</fieldset>
{* Smarty 3 has a new auto literal option which is enabled by default.
When the { is followed by a space it's not interpreted as smarty delimiter but literal. *}
<script>
function sort_{$config_item}_Sequence() {
//var seq = DragDrop.serData('{$config_item}_group', null);
var seq = DragDrop.serData(null, '{$config_item}');
var start = seq.indexOf("(");
var end = seq.indexOf(")");
seq = seq.slice((start + 1), end);
checkable_seq = seq.split(",");
out_seq = '';
for (i in checkable_seq) {
if (document.getElementById('activate_' + checkable_seq[i]) && !document.getElementById('activate_' + checkable_seq[i]).checked) {
continue;
} else {
if (out_seq != '') {
out_seq += ',';
}
out_seq += checkable_seq[i];
}
}
var order = document.getElementById("{$config_item}_value");
order.value = out_seq;
}
function init_{$config_item}_Sequence() {
var lst = document.getElementById("{$config_item}");
DragDrop.makeListContainer(lst, '{$config_item}_group');
lst.onDragOut = function() {
sort_{$config_item}_Sequence();
};
}
addLoadEvent(init_{$config_item}_Sequence);
</script>
</div>
{/if}

View File

@ -0,0 +1,16 @@
{* HTML5: Yes *}
{* jQuery: NN*}
<h2>{$output.welcome}</h2>
{$output.more}
{if $output.show_links}
<aside class="{$output.links_css}">
<h3>{$output.links_title}</h3>
<ul class="plainList">
{foreach $output.links AS $link}
<li>{$link}</li>
{/foreach}
</ul>
</aside>
{/if}

View File

@ -0,0 +1,19 @@
{* HTML5: Yes *}
{* jQuery: NN *}
{if $adminAction == 'save'}
{if $not_authorized}
<span class="msg_error">{$CONST.CREATE_NOT_AUTHORIZED_USERLEVEL}</span>
{elseif $empty_username}
<span class="msg_error">{$CONST.USERCONF_CHECK_USERNAME_ERROR}</span>
{elseif $password_check_fail}
<span class="msg_error">{$CONST.USERCONF_CHECK_PASSWORD_ERROR}</span>
{else}
<span class="msg_success">{$CONST.MODIFIED_USER|sprintf:"{$realname|escape:"html"}"} ?></span>
{/if}
{/if}
<form action="?serendipity[adminModule]=personal&amp;serendipity[adminAction]=save" method="post">
{$formToken}
{$config}
<input name="SAVE" type="submit" value="{$CONST.SAVE}">
</form>

View File

@ -0,0 +1,149 @@
{* HTML5: Yes *}
{* jQuery: NN *}
{if $plugin_to_conf}
{if is_array($save_errors)}
<div class="msg_error">
<h2>{$CONST.ERROR}:</h2>
<ul class="plainList">
{foreach $save_errors as $save_error}
<li>$save_error</li>
{/foreach}
</ul>
</div>
{elseif $saveconf}
<span class="msg_success">{$CONST.DONE}: {$CONST.SETTINGS_SAVED_AT|sprintf:"$timestamp"}</span>
{/if}
<form method="post" name="serendipityPluginConfigure">
{$formToken}
<div class="plugin_info">
<h2>{$name} (<span class="plugin_class">{$class}</span>)</h2>
<p><strong>{$CONST.DESCRIPTION}:</strong> {$desc}</p>
{if !empty($license)}
<p><strong>{$CONST.MEDIA_PROPERTY_COPYRIGHT}:</strong> {$license}</p>
{/if}
{if ! empty($documentation) || $changelog || $documentation_local}
<ul class="plainList">
{if !empty($documentation)}
<li><a href="{$documentation|escape:"html"}">{$CONST.PLUGIN_DOCUMENTATION}</a></li>
{/if}
{if $changelog}
<li><a href="plugins/{$plugin->act_pluginPath}/ChangeLog">{$CONST.PLUGIN_DOCUMENTATION_CHANGELOG}</a></li>
{/if}
{if $documentation_local}
<li><a href="plugins/{$plugin->act_pluginPath}{$documentation}">{$CONST.PLUGIN_DOCUMENTATION_LOCAL}</a></li>
{/if}
</ul>
{/if}
</div>
{$config}
</form>
{elseif $adminAction == 'addnew'}
<h3>{if $type == 'event'}{$CONST.EVENT_PLUGINS}{else}{$CONST.SIDEBAR_PLUGINS}{/if} <span class="plugins_available">{$CONST.PLUGIN_AVAILABLE_COUNT|sprintf:"count({$pluginstack})"}</span></h3>
{foreach $errorstack as $e_idx => $e_name}
<span class="msg_error">{$CONST.ERROR}: {$e_name}</span>
{/foreach}
<form action="serendipity_admin.php" method="get">
{$formToken}
<input name="serendipity[adminModule]" type="hidden" value="plugins">
<input name="serendipity[adminAction]" type="hidden" value="addnew">
<input name="serendipity[type]" type="hidden" value="{$type|escape:"html"}">
<div class="form_select">
<label for="only_group">{$CONST.FILTERS}</label>
<select id="only_group" name="serendipity[only_group]">
{foreach $groupnames as $available_group => $available_name}
<option value="{$available_group}"{if $only_group == $available_group} selected="selected"{/if}>{$available_name}</option>
{/foreach}
<option value="ALL"{if $only_group == ALL} selected="selected"{/if}>{$CONST.ALL_CATEGORIES}</option>
<option value="UPGRADE"{if $only_group == UPGRADE} selected="selected"{/if}>{$CONST.WORD_NEW}</option>
</select>
</div>
<input type="submit" value="{$CONST.GO}">
</form>
{foreach $pluggroups AS $pluggroup => $groupstack}
{if empty($pluggroup)}
{if !empty($only_group)}{continue}{/if}
{elseif !empty($only_group) && $pluggroup != $only_group}{continue}{else}
<h4>{foreach $groupnames as $available_group => $available_name}{if $pluggroup == $available_group}{$available_name}{/if}{/foreach}</h4>
{/if}
<ul class="plainList">
{foreach $groupstack as $plug}
<li><h5>{$plug.name} ({$plug.class_name})</h5>
<p class="plugin_desc">{$plug.description}</p>
<ul class="plugin_info">
{if ! empty($plug.author)}
<li class="plugin_author">{$CONST.AUTHOR}: {$plug.author}</li>
{/if}
{if ! empty($plug.version)}
<li class="plugin_version">{$CONST.VERSION}: {$plug.version}</li>
{/if}
{if ! empty($plug.website)}
<li class="plugin_web"><a href="{$plug.website|escape:"html"}">{$CONST.PLUGIN_DOCUMENTATION}</a></li>
{/if}
{if ! empty($plug.local_documentation)}
<li class="plugin_localdoc"><a href="{$plug.local_documentation|escape:"html"}">{$CONST.PLUGIN_DOCUMENTATION_LOCAL}</a></li>
{/if}
{if ! empty($plug.changelog)}
<li class="plugin_changelog"><a href="{$plug.changelog|escape:"html"}">{$CONST.PLUGIN_DOCUMENTATION_CHANGELOG}</a></li>
{/if}
{if ! empty({$plug.upgrade_version}) && $plug.upgrade_version != $plug.version}
<li class="plugin_toversion">{$CONST.UPGRADE_TO_VERSION|sprintf:"{$plug.upgrade_version}"}{if ! empty($plug.pluginlocation) && $plug.pluginlocation != 'local'} ({$plug.pluginlocation|escape:"html"}){/if}</li>
{/if}
</ul>
<div class="plugin_status">
{if isset($requirements_failures.{$plug.class_name})}
<span class="unmet_requirements">{$CONST.UNMET_REQUIREMENTS|sprintf:"{if $requirements_failures.{$plug.class_name}.s9y}s9y $plug.requirements..serendipity,{/if} {if $requirements_failures.{$plug.class_name}.php}PHP $plug.requirements.php,{/if} {if $requirements_failures.{$plug.class_name}.smarty}Smarty $plug.requirements.smarty{/if}"}</span>
{elseif $plug['upgradable'] == true}
<a class="upgradable" href="?serendipity[adminModule]=plugins&amp;serendipity[pluginPath]={$plug.pluginPath}&amp;serendipity[install_plugin]={$plug.plugin_class}{if isset($plug['customURI'])}{$plug.customURI}{/if}">{$CONST.UPGRADE}</a>
{elseif $plug.installable == true}
<a class="installable" href="?serendipity[adminModule]=plugins&amp;serendipity[pluginPath]={$plug.pluginPath}&amp;serendipity[install_plugin]={$plug.plugin_class}{if isset($plug.customURI)}{$plug.customURI}{/if}">{$CONST.INSTALL}</a>
{else}
<span class="installed">{$CONST.ALREADY_INSTALLED}</span>
{/if}
</div>
</li>
{/foreach}
</ul>
{/foreach}
{else}
{if $save}
<span class="msg_success">{$CONST.DONE}:{$CONST.SETTINGS_SAVED_AT|sprintf:"$timestamp"}</span>
{/if}
<h2>{$CONST.BELOW_IS_A_LIST_OF_INSTALLED_PLUGINS}</h2>
{if $eyecandy}
<script src="{serendipity_getFile file="dragdrop.js"}"></script>
<span class="msg_notice">{$CONST.PREFERENCE_USE_JS_WARNING}</span>
{/if}
<section id="pluginlist_sidebar">
<h3>{$CONST.SIDEBAR_PLUGINS}</h3>
<a class="install_plugins block_level" href="?serendipity[adminModule]=plugins&amp;serendipity[adminAction]=addnew">{$CONST.CLICK_HERE_TO_INSTALL_PLUGIN|sprintf:"{$CONST.SIDEBAR_PLUGIN}"}</a>
{$backend_plugins_sidebar_header}
{$sidebar_plugins}
</section>
<section id="pluginlist_event">
<h3>{$CONST.EVENT_PLUGINS}</h3>
<a class="install_plugins block_level" href="?serendipity[adminModule]=plugins&amp;serendipity[adminAction]=addnew&amp;serendipity[type]=event">{$CONST.CLICK_HERE_TO_INSTALL_PLUGIN|sprintf:"{$CONST.EVENT_PLUGIN}"}</a>
{$backend_plugins_event_header}
{$event_plugins}
</section>
{if $memsnaps}
<section>
<h3>Memory Usage</h3>
<pre>{$memSnaps|print_r}</pre>
</section>
{/if}
{/if}

View File

@ -0,0 +1,66 @@
{* HTML5: Yes *}
{* jQuery: No *}
{* serendipity_plugins_admin.inc.php::serendipity_plugin_config() *}
<script>
var const_view = '{$CONST.VIEW_FULL}';
var const_hide = '{$CONST.HIDE}';
var img_plus = '{serendipity_getFile file="img/plus.png"}';
var img_minus = '{serendipity_getFile file="img/minus.png"}';
</script>
{if $allow_admin_scripts}
<script src="{serendipity_getFile file='admin/admin_scripts.js'}"></script>
{/if}
{if $showSubmit_head}
<div class="save_conf">
<input name="SAVECONF" type="submit" value="{$CONST.SAVE}">
</div>
{/if}
{if $showTable}
<div id="serendipity_plugin_config">
{/if}
{if is_array($config_groups)}
<a id="optionall" href="#" onClick="showConfigAll({sizeof($config_groups)}); return false" title="{$CONST.TOGGLE_ALL}">{$CONST.TOGGLE_ALL}</a>
{foreach $config_groups AS $config_header => $config_groupkeys}
<h2><a id="optionel{$config_groupkeys@iteration}" href="#" onClick="showConfig('el{$config_groupkeys@iteration}'); return false" title="{$CONST.TOGGLE_OPTION}">{$config_header}</a></h2>
<div id="el{$config_groupkeys@iteration}" class="plugin_optiongroup">
{foreach $config_groupkeys AS $config_groupkey}
{$OUT_STACK[$config_groupkey]}
{/foreach}
</div>
<script>document.getElementById('el{$config_groupkeys@iteration}').style.display = "none";</script>
{/foreach}
{* Is this really necessary? What for? *}
<div id="configuration_footer">&nbsp;</div>
{* If it is not, drop the inline style from CSS. *}
{/if} {* foreach config_groups end *}
{foreach $OUT_STACK_REST as $out_stack_config_item}
{$out_stack_config_item}
{/foreach}
{if $showTable}
</div>
{/if}
{* $serendipity_printConfigJS *}{* outsourced to templates/default/admin/admin_scripts.js - see passed vars on top *}
{if $showSubmit_foot}
<div class="save_conf">
<input name="SAVECONF" type="submit" value="{$CONST.SAVE}">
</div>
{/if}
{if $showExample}
<div>{$plugin_example}</div>
{/if}
{if $spawnNuggets}
{serendipity_hookPlugin hook="backend_wysiwyg_nuggets" eventData=$ev hookAll=true}
{if ($ev['skip_nuggets'] === false)}
<script>
function Spawnnugget() {
{foreach $htmlnugget AS $htmlnuggetid}
Spawnnuggets('{$htmlnuggetid}');
{/foreach}
}
</script>
{/if}
{/if}

View File

@ -0,0 +1,23 @@
{* HTML5: Yes *}
{* jQuery: NN *}
{* functions_plugins_admin.inc.php::function ownership() *}
{if $show_ownership}
{if $is_plugin_owner}
<select name="serendipity[ownership][{$name}]">
<option value="0">{$CONST.ALL_AUTHORS}</option>
{/if}
{foreach $users AS $user}
{if (!$is_plugin_owner && ($user['authorid'] == $authorid))}
{assign var="realname" value="{$user['realname']|escape}"}
{elseif $is_plugin_owner}
<option value="{$user['authorid']}"{($user['authorid'] == $authorid) ? ' selected="selected"' : ''}>{$user['realname']|escape}</option>
{/if}
{/foreach}
{if $is_plugin_owner}
</select>
{else}
{(empty($realname)) ? $CONST.ALL_AUTHORS : $realname}
{/if}
{/if}

View File

@ -0,0 +1,83 @@
{* HTML5: Yes *}
{* jQuery: No *}
{* functions_plugins_admin.inc.php::function_show_plugins() including output of functions_plugins_admin.inc.php::function ownership() *}
{if !$eyecandy}
<form action="?serendipity[adminModule]=plugins" method="post">
{elseif !$event_only}
{* Smarty 3 has a new auto literal option which is enabled by default.
When the { is followed by a space it's not interpreted as smarty delimiter but literal. *}
<script>
function templatePluginMoverInit() {
{foreach $plugin_placements AS $sidebar}
{($is_first) ? 'var' : ''} list = document.getElementById("{$sidebar}_col");
DragDrop.makeListContainer(list, 'g1');
list.onDragOver = function() { this.style["border"] = "1px solid #4d759b"; };
list.onDragOut = function() { this.style["border"] = "none"; };
{assign var="is_first" value=false}
{/foreach}
}
addLoadEvent(templatePluginMoverInit);
</script>
<form action="?serendipity[adminModule]=plugins" method="post" onsubmit="pluginMovergetSort(); return true">
<input id="order" name="serendipity[pluginorder]" type="hidden" value="">
{else}
<script>addLoadEvent(pluginMoverInitEvent);</script>
<form action="?serendipity[adminModule]=plugins" method="post" onsubmit="pluginMovergetSortEvent(); return true">
<input id="eventorder" name="serendipity[pluginorder]" type="hidden" value="">
{/if}
{$serendipity_setFormToken}
<div class="clearfix pluginmanager">
{foreach $placement as $plugin_placement}
<div class="pluginmanager_side pluginmanager_{($event_only) ? 'event' : 'sidebar'}">
<h4>{$plugin_placement['ptitle']}</h4>
<ol id="{$plugin_placement['pid']}_col" class="pluginmanager_container plainList">
{foreach $plugin_placement['plugin_data'] as $plugin_data}
<li id="{$plugin_data['css_key']}" class="pluginmanager_item_{cycle values="even,uneven"}">
<div id="g{$plugin_data['css_key']}" class="pluginmanager_grablet">
<a id="grab{$plugin_data['css_key']}" href="#">Move</a>{* i18n *}
</div>
{if $plugin_data['is_plugin_editable']}
<div class="form_check">
<input id="remove_{$plugin_data['name']}" name="serendipity[plugin_to_remove][]" type="checkbox" value="{$plugin_data['name']}">
<label for="remove_{$plugin_data['name']}" class="visuallyhidden">Remove this plugin</label>{* i18n *}
</div>
{/if}
{if $plugin_data['can_configure']}
<a class="pluginmanager_configure" href="?serendipity[adminModule]=plugins&amp;serendipity[plugin_to_conf]={$plugin_data['key']}">{$CONST.CONFIGURATION}</a>
{/if}
<h5>
{if $plugin_data['can_configure']}
<a title="{$plugin_data['name']}" href="?serendipity[adminModule]=plugins&amp;serendipity[plugin_to_conf]={$plugin_data['key']}">{$plugin_data['title']}</a>
{else}
{$plugin_data['title']}
{/if}
</h5>
<ul class="pluginmanager_plugininfo plainList">
<li class="pluginmanager_description">{$plugin_data['desc']}</li>
<li class="pluginmanager_ownership">{$plugin_data['ownership']}</li>
{($eyecandy) ? '<noscript>' : ''}
<li class="pluginmanager_place">{$plugin_data['place']}</li>
<li class="pluginmanager_move">{$plugin_data['moveup']} {$plugin_data['movedown']}</li>
{($eyecandy) ? '</noscript>' : ''}
</ul>
</li>
{/foreach}
</ol>
</div>
{/foreach}
<span class="plugin_count block_level">{$CONST.PLUGIN_AVAILABLE_COUNT|sprintf:$total}</span>
</div>
<div class="form_buttons">
<input name="REMOVE" type="submit" title="{$CONST.DELETE}" value="{$CONST.REMOVE_TICKED_PLUGINS}">
<input name="SAVE" type="submit" title="{$CONST.SAVE_CHANGES_TO_LAYOUT}" value="{$CONST.SAVE}">
</div>
</form>

View File

@ -0,0 +1,71 @@
{* HTML5: Yes *}
{* jQuery: NN *}
{if $adminAction == 'install'}
<span class="msg_success">{$install_template|string_format:"{$CONST.TEMPLATE_SET}"}</span>
{/if}
{if $deprecated}
<span class="msg_notice">{$CONST.WARNING_TEMPLATE_DEPRECATED}</span>
{/if}
<section id="template_options">
<h2>{$CONST.STYLE_OPTIONS} ({$cur_template})</h2>
{if $has_config}
{if $adminAction == 'configure'}
<span class="msg_success">{$CONST.DONE}: {$save_time}</span>
{/if}
<form method="post" action="serendipity_admin.php">
<input name="serendipity[adminModule]" type="hidden" value="templates">
<input name="serendipity[adminAction]" type="hidden" value="configure">
{$form_token}
{$configuration}
</form>
{else}
<p>{$CONST.STYLE_OPTIONS_NONE}</p>
{/if}
</section>
<section id="template_select">
<h2>{$CONST.SELECT_TEMPLATE}</h2>
<ul class="plainList clearfix">
{foreach $templates as $template=>$info}
{if $info.info.engine == 'yes'}{continue}{/if}
{if !empty($template)}
<li><article class="clearfix">
<h3>{$info.info.name}</h3>
{if $info.fullsize_preview || $info.preview}
<div class="preview_image">
{if $info.fullsize_preview}<a href="{$info.fullsize_preview}">{/if}
{if $info.preview}<img src="{$info.preview}" alt="{$CONST.PREVIEW}" >{/if}
{if $info.fullsize_preview}</a>{/if}
</div>
{/if}
<details class="template_info">
<summary>Template info</summary> {* i18n *}
<dl class="clearfix">
<dt class="template_author">{$CONST.AUTHOR}:</dt>
<dd>{$info.info.author}</dd>
<dt class="template_date">{$CONST.LAST_UPDATED}:</dt>
<dd>{$info.info.date}</dd>
<dt class="template_admin">{$CONST.CUSTOM_ADMIN_INTERFACE}:</dt>
<dd>{$info.info.custom_admin_interface}</dd>
</dl>
</details>
<div class="template_status">
{if $template != $cur_template}
{if !$info.unmetRequirements}
<a href="?serendipity[adminModule]=templates&amp;serendipity[adminAction]=install&amp;serendipity[theme]={$template}{$info.info.customURI}">{$CONST.SET_AS_TEMPLATE}</a>
{else}
<span class="unmet_requirements block_level">{$info.unmetRequirements}></span>
{/if}
{else}
<span class="installed block_level">{$CONST.ALREADY_INSTALLED}</span>
{/if}
</div>
</article>
</li>
{/if}
{/foreach}
</ul>
</section>

View File

@ -0,0 +1,116 @@
{* HTML5: Yes *}
{* jQuery: NN *}
{if ($get.action == 'ignore')}
{* TODO: don't know what to put here? *}
{elseif ($get.action == 'upgrade')}
{foreach $call_tasks AS $ctask}
{if $is_callable_task}
{$ctasks}
{/if}
{/foreach}
{if $errors}
<h2>{$CONST.DIAGNOSTIC_ERROR}</h2>
<div class="msg_error">
{foreach $errors AS $implode_err}
<p>{$implode_err}</p>
{/foreach}
</div>
{/if}
{/if}
{if (($showAbort && $get.action == 'ignore') || $get.action == 'upgrade')}
{if $get.action == 'ignore'}
<span class="msg_notice">{$CONST.SERENDIPITY_UPGRADER_YOU_HAVE_IGNORED}</span>
{elseif $get.action == 'upgrade'}
<span class="msg_success">{$CONST.SERENDIPITY_UPGRADER_NOW_UPGRADED|sprintf:$s9y_version}</span>
{/if}
{if $return_here}
{$print_UPGRADER_RETURN_HERE}
{* could also be used as: {$CONST.SERENDIPITY_UPGRADER_RETURN_HERE|sprintf:"<a href='$serendipityHTTPPath'>":'</a>'} *}
{/if}
{else}
<h2>{$CONST.SERENDIPITY_UPGRADER_WELCOME}</h2>
<p>{$CONST.SERENDIPITY_UPGRADER_PURPOSE|sprintf:$s9y_version_installed}</p>
<p>{$CONST.SERENDIPITY_UPGRADER_WHY|sprintf:$s9y_version}</p>
<h3>{$CONST.FIRST_WE_TAKE_A_LOOK}</h3>
<div class="diagnose">
<span class="msg_notice">{$result_diagnose}.</span>
{if $checksums}
<h4>{$CONST.INTEGRITY}</h4>
<ul>
{foreach $upgraderResultDiagnose1 AS $urd1}
<li>{$urd1}</li>
{/foreach}
</ul>
{/if}
<h4>{$CONST.PERMISSIONS}</h4>
<dl>
<dt>{$basedir}</dt>
{foreach $upgraderResultDiagnose2 AS $urd2}
<dd>{$urd2}</dd>
{/foreach}
<dt>{$basedir}{$CONST.PATH_SMARTY_COMPILE}</dt>
{foreach $upgraderResultDiagnose3 AS $urd3}
<dd>{$urd3}</dd>
{/foreach}
{if $isdir_uploadpath}
<dt>{$basedir}{$uploadHTTPPath}</dt>
{foreach $upgraderResultDiagnose4 AS $urd4}
<dd>{$urd4}</dd>
{/foreach}
{/if}
</dl>
{if $showWritableNote}
<span class="msg_notice">{$CONST.PROBLEM_PERMISSIONS_HOWTO|sprintf:'chmod 1777'}</span>
{/if}
{if ($errorCount > 0)}
<span class="msg_error">{$CONST.PROBLEM_DIAGNOSTIC}</span>
<a class="link_reload block_level" href="serendipity_admin.php">{$CONST.RECHECK_INSTALLATION}</a>
{/if}
</div>
{if ($errorCount < 1)}
{if (sizeof($sqlfiles) > 0)}
<h3>{$database_update_types}:</h3>
<p>{$CONST.SERENDIPITY_UPGRADER_FOUND_SQL_FILES}:</p>
{if is_array($sqlfiles) && !empty($sqlfiles)}
<ul>
{foreach $sqlfiles as $sqlfile}
<li>{$sqlfile}</li>
{/foreach}
</ul>
{/if}
{/if}
<h3>{$CONST.SERENDIPITY_UPGRADER_VERSION_SPECIFIC}:</h3>
{if is_array($tasks) && !empty($tasks)}
<dl>
{foreach $tasks as $task}
<dt>{$task.version} - {$task.title}</dl>
<dd>{$task.desc|nl2br}</dd>
{/foreach}
</dl>
{/if}
{if ($taskCount == 0)}
<p>{$CONST.SERENDIPITY_UPGRADER_NO_VERSION_SPECIFIC}</p>
{/if}
{if (($taskCount > 0) || (sizeof($sqlfiles) > 0))}
<h3>{$CONST.SERENDIPITY_UPGRADER_PROCEED_QUESTION}</h3>
<a class="block_level" href="{$upgradeLoc}">{$CONST.SERENDIPITY_UPGRADER_PROCEED_DOIT}</a>{if $showAbort} <a href="{$abortLoc}">{$CONST.SERENDIPITY_UPGRADER_PROCEED_ABORT}</a>{/if}
{else}
<h3>{$CONST.SERENDIPITY_UPGRADER_NO_UPGRADES}</h3>
<a class="block_level" href="{$upgradeLoc}">{$CONST.SERENDIPITY_UPGRADER_CONSIDER_DONE}</a>
{/if}
{/if}
{/if}

View File

@ -0,0 +1,91 @@
{* HTML5: Yes *}
{* jQuery: NN *}
{if $delete_yes}
{if $no_delete_permission}
<span class="msg_error">{$CONST.CREATE_NOT_AUTHORIZED}</span>
{else}
{if $no_delete_permission_userlevel}
<span class="msg_error">{$CONST.CREATE_NOT_AUTHORIZED_USERLEVEL}</span>
{else}
{if $delete_permission}
<span class="msg_success">{$CONST.DELETED_USER|sprintf:"{$user|escape:"html"}":"{$realname|escape:"html"}"}</span>
{else}
<span class="msg_error">{$CONST.CREATE_NOT_AUTHORIZED_USERLEVEL}</span>
{/if}
{/if}
{/if}
{/if}
{if $save_new}
{if $no_save_permission}
<span class="msg_error">{$CONST.CREATE_NOT_AUTHORIZED}</span>
{else}
{if $no_group_selected}
<span class="msg_error">{$CONST.WARNING_NO_GROUPS_SELECTED}</span>
{/if}
<span class="msg_success">{$CONST.CREATED_USER|sprintf:"# {$user|escape:"html"}":"{$realname|escape:"html"}"}</span>
{/if}
{/if}
{if $save_edit}
{if $no_edit_permission}
<span class="msg_error">{$CONST.CREATE_NOT_AUTHORIZED}</span>
{else}
{if $no_edit_permission_userlevel}
<span class="msg_error">{$CONST.CREATE_NOT_AUTHORIZED_USERLEVEL}</span>
{else}
{if $no_group_selected}
<span class="msg_error">{$CONST.WARNING_NO_GROUPS_SELECTED}</span>
{/if}
<span class="msg_success">{$CONST.MODIFIED_USER|sprintf:"{$realname|escape:"html"}"}</span>
{/if}
{/if}
{/if}
{if $delete == false}
<h2>{$CONST.USER} ({$CONST.USER_LEVEL})</h2>
<ul id="serendipity_users" class="plainList">
{foreach $users as $user}
{if $user.isEditable}
<li class="clearfix">
<span class="user_name user_{if $user.userlevel >= {$CONST.USERLEVEL_ADMIN}}admin{else}{if $user.userlevel >= {$CONST.USERLEVEL_CHIEF}}chief{else}editor{/if}{/if}">{$user.realname|escape:"html"} ({$user.userlevel})</span>
<ul class="plainList edit_actions">
<li><a class="link_view" href="{$user.authorUrl}" title="{$CONST.PREVIEW} {$user.realname}">{$CONST.PREVIEW}</a></li>
<li><a class="link_edit" href="?serendipity[adminModule]=users&amp;serendipity[adminAction]=edit&amp;serendipity[userid]={$user.authorid}#editform" title="{$CONST.EDIT} {$user.realname|escape:"html"}">{$CONST.EDIT}</a></li>
<li><a class="link_delete" href="?{$urlFormToken}&amp;serendipity[adminModule]=users&amp;serendipity[adminAction]=delete&amp;serendipity[userid]=$user.authorid" title="{$CONST.DELETE} {$user.realname|escape:"html"}">{$CONST.DELETE}</a></li>
</ul>
</li>
{/if}
{/foreach}
</ul>
{if $new}
<form action="?serendipity[adminModule]=users" method="post">
<input name="NEW" type="submit" value="{$CONST.CREATE_NEW_USER}">
</form>
{/if}
{/if}
{if $show_form}
<form{if $adminAction == 'edit'} id="editform"{/if} action="?serendipity[adminModule]=users#editform" method="post">
{$formToken}
{if $adminAction == 'edit'}{if $create_permission}<input name="serendipity[user]" type="hidden" value="{$from.authorid}">{/if}{/if}
<h3>{if $adminAction == 'edit'}{if $no_create_permission}{$CONST.CREATE_NOT_AUTHORIZED}: {$CONST.EDIT}{else}{if $create_permission}{$CONST.EDIT}{else}{$CONST.CREATE_NOT_AUTHORIZED}: {$CONST.EDIT}{/if}{/if}{else}{$CONST.CREATE}{/if}</h3>
{$config}
{if $adminAction == 'edit'}
<input name="SAVE_EDIT" type="submit" value="{$CONST.SAVE}">
{else}
<input name="SAVE_NEW" type="submit" value="{$CONST.CREATE_NEW_USER}">
{/if}
</form>
{else}
{if $delete}
<form action="?serendipity[adminModule]=users" method="post">
{$formToken}
<input name="serendipity[user]" type="hidden" value="{$userid}">
<fieldset class="users_delete_action">
<legend><span>{$CONST.DELETE_USER|sprintf:"{$userid}":"{$realname|escape:"html"}"}</span></legend>
<input name="DELETE_YES" type="submit" value="{$CONST.DUMP_IT}">
<input name="NO" type="submit" value="{$CONST.NOT_REALLY}">
</fieldset>
</form>
{/if}
{/if}

View File

@ -0,0 +1,118 @@
function toggle_extended(setCookie) {
var textarea = document.getElementById('serendipity[extended]');
var button = document.getElementById('option_extended');
var tools = document.getElementById('tools_extended');
if ( textarea.style.display == 'none' ) {
textarea.style.display = '';
tools.style.display = '';
button.src = minus_img;
if (setCookie == true) {
document.cookie = 'serendipity[toggle_extended]=true;';
}
} else {
textarea.style.display = 'none';
tools.style.display = 'none';
button.src = plus_img;
if (setCookie == true) {
document.cookie = 'serendipity[toggle_extended]=;';
}
}
}
function showItem(id) {
var selected = 0;
if (typeof(id) == 'undefined' || typeof(id) == 'object') {
id = 'categoryselector';
}
if (document.getElementById) {
el = document.getElementById(id);
if (selector_toggle[id] && selector_toggle[id] == 'off') {
selector_restore[id] = new Array();
selector_toggle[id] = 'on';
/* Hack to make sure that when the single dropdown is shown, don't have multiple selections */
last = 0;
for (i=0; i < el.options.length; i++) {
if (el.options[i].selected == true) {
selected++;
last = i;
selector_restore[id][last] = 'on';
}
if (selected > 1) {
/* If there is more than one selected, we reset all those to false
This is because otherwise the label will say 'No Category', but the categories will still be selected */
for (j=0; j < el.options.length; j++) {
/* Save selection in array to later restore them */
if (el.options[j].selected == true) {
el.options[j].selected = false;
selector_restore[id][j] = 'on';
last = j;
} else {
selector_restore[id][j] = false;
}
}
break;
}
}
el.selectedIndex = null;
if (last > 0) {
el.selectedIndex = last;
}
el.size = 1;
/* Show a normal dropdown */
if (el.multiple) {
el.multiple = false;
}
document.getElementById('option_' + id).src = plus_img;
} else {
selector_store[id] = el.size;
if (selector_store[id] == 0) {
selector_store[id] = 5;
}
last = 0;
if (el.selectedIndex > 0) {
if (!selector_restore[id]) {
selector_restore[id] = new Array();
}
for (j=0; j < el.options.length; j++) {
/* Save selection in array to later restore them */
if (el.options[j].selected == true) {
selector_restore[id][j] = 'on';
last = j;
}
}
}
el.selectedIndex = -1;
el.size = cat_count;
selector_toggle[id] = 'off';
/* Show multiple items */
el.multiple = true;
/* Restore previously selected items? */
last = 0;
for (i = 0; i < el.options.length; i++) {
if (selector_restore && selector_restore[id] && selector_restore[id][i] && selector_restore[id][i] == 'on') {
val = el.options[i].value;
if (el.options[i].selected != true) {
el.options[i].selected = true;
last = i;
// [TODO] IE Bug: Don't ask me why, but this restoring only works in Internet Explorer if you put this:
// alert('it doesnt matter what, just the alert is important');
}
}
}
document.getElementById('option_' + id).src = minus_img;
}
}
}

View File

@ -0,0 +1,135 @@
{* HTML5: Yes *}
{* jQuery: No *}
{if $entry_vars.errMsg}
<span class="msg_error">{$entry_vars.errMsg}</span>
{/if}
<form id="serendipityEntry" name="serendipityEntry" {$entry_vars.entry.entry_form} action="{$entry_vars.targetURL}" method="post">
{$entry_vars.hidden}
<div class="form_field">
<label for="entryTitle">{$CONST.TITLE}:</label>
<input id="entryTitle" name="serendipity[title]" type="text" value="{$entry_vars.entry.title|@escape}">
</div>
{if $entry_vars.allowDateManipulation}
<div class="form_field">
<input name="serendipity[chk_timestamp]" type="hidden" value="{$entry_vars.timestamp}">
{* TODO: this should be input[type=datetime] *}
<label for="serendipityNewTimestamp">{$CONST.DATE}:</label>
<input id="serendipityNewTimestamp" name="serendipity[new_timestamp]" type="text" value="{$entry_vars.timestamp|@formatTime:DATE_FORMAT_2:true:false:true}">
<a id="reset_timestamp" href="#" onclick="document.getElementById('serendipityNewTimestamp').value = '{$entry_vars.reset_timestamp|@formatTime:DATE_FORMAT_2:true:false:true}'; return false;" title="{$CONST.RESET_DATE_DESC}">{$CONST.RESET_DATE}</a>
</div>
{/if}
<div class="form_select">
{* BUG: doesn't work the way it used to (collapsed multiselect) *}
<label for="categoryselector">{$CONST.CATEGORY}:</label>
<select id="categoryselector" name="serendipity[categories][]" multiple="multiple">
<option value="0">{$CONST.NO_CATEGORY}</option>
{foreach from=$entry_vars.category_options item="entry_cat"}
<option value="{$entry_cat.categoryid}"{if $entry_cat.is_selected} selected="selected"{/if}>{$entry_cat.depth_pad}{$entry_cat.category_name}</option>
{/foreach}
</select>
</div>
<div class="form_select">
<label for="entry_status" class="visuallyhidden">Entry status</label> {* i18n *}
<select id="entry_status" name="serendipity[isdraft]">
{if $entry_vars.serendipityRightPublish}
<option value="false"{if $entry_vars.draft_mode == 'publish'} selected="selected"{/if}>{$CONST.PUBLISH}</option>
{/if}
<option value="true"{if $entry_vars.draft_mode == 'draft'} selected="selected"{/if}>{$CONST.DRAFT}</option>
</select>
</div>
<div class="form_area">
<label for="serendipity[body]">{$CONST.ENTRY_BODY}</label>
{if NOT $entry_vars.wysiwyg}
<div id="tools_entry">
{* This whole button bar should be replaced by something external, which maybe even
"reacts" to installed markup plugins. I.e. if a blog uses Markdown, the button for
italic should not insert an em element but the appropriate Markdown formatting. *}
<script>
{if $entry_vars.wysiwyg_advanced}
{if $iso2br}document.write('<input type="button" name="insX" value="NoBR" accesskey="x" onclick="wrapSelection(document.forms[\'serendipityEntry\'][\'serendipity[body]\'],\'<nl>\',\'</nl>\')">');{/if}
document.write('<input type="button" name="insI" value="I" accesskey="i" onclick="wrapSelection(document.forms[\'serendipityEntry\'][\'serendipity[body]\'],\'<em>\',\'</em>\')">');
document.write('<input type="button" name="insB" value="B" accesskey="b" onclick="wrapSelection(document.forms[\'serendipityEntry\'][\'serendipity[body]\'],\'<strong>\',\'</strong>\')">');
document.write('<input type="button" name="insU" value="U" accesskey="u" onclick="wrapSelection(document.forms[\'serendipityEntry\'][\'serendipity[body]\'],\'<u>\',\'</u>\')">');
document.write('<input type="button" name="insQ" value="{$CONST.QUOTE}" accesskey="q" onclick="wrapSelection(document.forms[\'serendipityEntry\'][\'serendipity[body]\'],\'<blockquote>\',\'</blockquote>\')">');
document.write('<input type="button" name="insJ" value="img" accesskey="j" onclick="wrapInsImage(document.forms[\'serendipityEntry\'][\'serendipity[body]\'])">');
document.write('<input type="button" name="insImage" value="{$CONST.MEDIA}" onclick="window.open(\'serendipity_admin_image_selector.php?serendipity[textarea]=body\', \'ImageSel\', \'width=800,height=600,toolbar=no,scrollbars=1,scrollbars,resize=1,resizable=1\');">');
document.write('<input type="button" name="insURL" value="URL" accesskey="l" onclick="wrapSelectionWithLink(document.forms[\'serendipityEntry\'][\'serendipity[body]\'])">');
{else}
{if $iso2br}document.write('<input type="button" value="NoBR" onclick="serendipity_insBasic(document.forms[\'serendipityEntry\'][\'serendipity[body]\'], \'x\')">');{/if}
document.write('<input type="button" value="B" onclick="serendipity_insBasic(document.forms[\'serendipityEntry\'][\'serendipity[body]\'], \'b\')">');
document.write('<input type="button" value="U" onclick="serendipity_insBasic(document.forms[\'serendipityEntry\'][\'serendipity[body]\'], \'u\')">');
document.write('<input type="button" value="I" onclick="serendipity_insBasic(document.forms[\'serendipityEntry\'][\'serendipity[body]\'], \'i\')">');
document.write('<input type="button" value="<img>" onclick="serendipity_insImage(document.forms[\'serendipityEntry\'][\'serendipity[body]\'])">');
document.write('<input type="button" value="{$CONST.MEDIA}" onclick="window.open(\'serendipity_admin_image_selector.php?serendipity[textarea]=body\', \'ImageSel\', \'width=800,height=600,toolbar=no\');">');
document.write('<input type="button" value="Link" onclick="serendipity_insLink(document.forms[\'serendipityEntry\'][\'serendipity[body]\'])">');
{/if}
</script>
</div>
{/if}
{serendipity_hookPlugin hook="backend_entry_toolbar_body" data=$entry_data.entry hookAll="true"}
<textarea id="serendipity[body]" name="serendipity[body]" rows="20">{$entry_vars.entry.body|@escape}</textarea>
</div>
<div class="clearfix">
<div class="form_check">
<input id="checkbox_allow_comments" name="serendipity[allow_comments]" type="checkbox" value="true"{if $entry_vars.allow_comments} checked="checked"{/if}><label for="checkbox_allow_comments">{$CONST.COMMENTS_ENABLE}</label>
</div>
<div class="form_check">
<input id="checkbox_moderate_comments" name="serendipity[moderate_comments]" type="checkbox" value="true"{if $entry_vars.moderate_comments} checked="checked"{/if}><label for="checkbox_moderate_comments">{$CONST.COMMENTS_MODERATE}</label>
</div>
</div>
<div class="form_buttons">
<input type="submit" accesskey="p" value="{$CONST.PREVIEW}" onclick="document.forms['serendipityEntry'].elements['serendipity[preview]'].value='true';">
<input type="submit" accesskey="s" value="{$CONST.SAVE}"onclick="return checkSave();">
</div>
<div class="form_area">
<label for="serendipity[extended]">{$CONST.EXTENDED_BODY}</label>
{if NOT $entry_vars.wysiwyg}
<div id="tools_extended">
{if $entry_vars.wysiwyg_advanced}
{if $iso2br}<input name="insX" type="button" value="NoBR" accesskey="x" onclick="wrapSelection(document.forms['serendipityEntry']['serendipity[extended]'],'<nl>','</nl>')">{/if}
<input name="insI" type="button" accesskey="i" value="I" onclick="wrapSelection(document.forms['serendipityEntry']['serendipity[extended]'],'<em>','</em>')">
<input name="insB" type="button" accesskey="b" value="B" onclick="wrapSelection(document.forms['serendipityEntry']['serendipity[extended]'],'<strong>','</strong>')">
<input name="insU" type="button" accesskey="u" value="U" onclick="wrapSelection(document.forms['serendipityEntry']['serendipity[extended]'],'<u>','</u>')">
<input name="insQ" type="button" accesskey="q" value="{$CONST.QUOTE}" onclick="wrapSelection(document.forms['serendipityEntry']['serendipity[extended]'],'<blockquote>','</blockquote>')">
<input name="insJ" type="button" accesskey="j" value="img" onclick="wrapInsImage(document.forms['serendipityEntry']['serendipity[extended]'])">
<input name="insImage" type="button" value="{$CONST.MEDIA}" onclick="window.open('serendipity_admin_image_selector.php?serendipity[textarea]=extended', 'ImageSel', 'width=800,height=600,toolbar=no,scrollbars=1,scrollbars,resize=1,resizable=1');">
<input name="insURL" type="button" accesskey="l" value="URL" onclick="wrapSelectionWithLink(document.forms['serendipityEntry']['serendipity[extended]'])">
{else}
{if $iso2br}<input type="button" value="NoBR" onclick="serendipity_insBasic(document.forms['serendipityEntry']['serendipity[extended]'], 'x')">{/if}
<input type="button" value="B" onclick="serendipity_insBasic(document.forms['serendipityEntry']['serendipity[extended]'], 'b')">
<input type="button" value="U" onclick="serendipity_insBasic(document.forms['serendipityEntry']['serendipity[extended]'], 'u')">
<input type="button" value="I" onclick="serendipity_insBasic(document.forms['serendipityEntry']['serendipity[extended]'], 'i')">
<input type="button" value="<img>" onclick="serendipity_insImage(document.forms['serendipityEntry']['serendipity[extended]'])">
<input type="button" value="{$CONST.MEDIA}" onclick="window.open('serendipity_admin_image_selector.php?serendipity[textarea]=extended', 'ImageSel', 'width=800,height=600,toolbar=no');">
<input type="button" value="Link" onclick="serendipity_insLink(document.forms['serendipityEntry']['serendipity[extended]'])">
{/if}
</div>
{/if}
{serendipity_hookPlugin hook="backend_entry_toolbar_extended" data=$entry_data.entry hookAll="true"}
<textarea id="serendipity[extended]" name="serendipity[extended]" rows="20">{$entry_vars.entry.extended|@escape}</textarea>
</div>
<fieldset>
<legend><span>{$CONST.ADVANCED_OPTIONS}</span></legend>
{$entry_vars.entry|@serendipity_refhookPlugin:'backend_display'}
</fieldset>
</form>
{if $entry_vars.show_wysiwyg}
<script>toggle_extended();</script>
{/if}
{if $entry_vars.wysiwyg}
{foreach from=$entry_vars.wysiwyg_blocks item="wysiwyg_block_item" key="wysiwyg_block_jsname"}
{$wysiwyg_block_item|emit_htmlarea_code:$wysiwyg_block_jsname}
{/foreach}
{$entry_vars.wysiwyg_blocks|@serendipity_refhookPlugin:'backend_wysiwyg_finish'}
{/if}
<script src="serendipity_define.js.php"></script>
<script src="serendipity_editor.js"></script>

Binary file not shown.

After

Width:  |  Height:  |  Size: 883 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 980 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 808 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 857 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 702 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 797 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 191 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 252 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 700 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 708 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 781 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 777 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 922 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 997 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 781 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 813 B

View File

@ -0,0 +1,173 @@
#zoomslider {
position: relative;
display: block;
width: 10px; /* If you change the width of this, also change the JavaScript variable "slider_width"!!! */
height: 100px;
border: 1px solid yellow;
background-color: yellow;
color: black;
margin-left: auto;
margin-right: auto;
text-align: center;
margin-top: 5px;
margin-bottom: 5px;
}
#zoombutton {
position: absolute;
display: inline;
background-color: red;
margin: 0px;
padding: 0px;
border: 0px;
cursor: move;
z-index: 4;
visibility: hidden;
}
.smallcaps {
font-family: Verdana;
font-size: 7pt;
color: white;
}
.nospace {
margin: 0px;
padding: 0px;
}
.button {
border: 1px solid gray;
font-family: Verdana;
font-size: 7pt;
color: white;
background-color: #303030;
padding: 3px;
}
.specialbutton {
border: 1px solid gray;
font-family: Verdana;
font-size: 8pt;
color: white;
background-color: red;
padding: 3px;
margin: 5px;
}
.small {
width: 25px;
margin-top: 5px;
}
.center {
margin-left: auto;
margin-right: auto;
text-align: center;
vertical-align: middle;
}
.center span {
position: relative;
top: -5px;
}
#imgedit {
position: absolute;
left: 10px;
top: 25px;
margin: 15px;
padding: 5px;
}
#outer {
display: block;
position: absolute;
z-index: 1;
}
#backdrop {
display: block;
position: absolute;
z-index: 2;
filter:progid:DXImageTransform.Microsoft.Alpha(opacity=55);
-moz-opacity: 0.55;
}
#overlay {
position: absolute;
display: block;
z-index: 3;
cursor: move;
overflow: hidden;
}
#harea {
position: absolute;
display: block;
z-index: 4;
}
#varea {
position: absolute;
display: block;
z-index: 4;
}
#zoom {
display: block;
float: left;
height: 140px;
border: 1px solid red;
vertical-align: middle;
margin-left: auto;
margin-right: auto;
text-align: center;
position: absolute;
}
#scaletext {
display: inline;
}
#cropimage {
overflow: hidden;
display: block;
position: absolute;
top: 1px;
}
.info {
display: block;
position: relative;
border: 1px solid black;
color: black;
background-color: #A0A0A0;
margin: 20px;
padding: 10px;
}
legend {
background-color: #A0A0A0;
font-family: Verdana;
font-size: 12pt;
font-weight: bold;
-moz-border-radius-topleft: 10px;
-moz-border-radius-topright: 10px;
border-left: 1px solid black;
border-right: 1px solid black;
padding: 3px;
color: white;
}
.error {
color: red;
}
code {
color: white;
font-size: 8pt;
}

View File

@ -0,0 +1,189 @@
{* HTML5: Yes *}
{* jQuery: No *}
<!doctype html>
<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7" lang="{$lang}"> <![endif]-->
<!--[if IE 7]> <html class="no-js lt-ie9 lt-ie8" lang="{$lang}"> <![endif]-->
<!--[if IE 8]> <html class="no-js lt-ie9" lang="{$lang}"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="{$lang}"> <!--<![endif]-->
<head>
<meta charset="{$CONST.LANG_CHARSET}">
<title>{if $admin_vars.title}{$admin_vars.title} | {/if}{$CONST.SERENDIPITY_ADMIN_SUITE}</title>
<meta name="viewport" content="width=device-width">
<link rel="stylesheet" href="{$admin_vars.css_file}">
<link rel="stylesheet" href="{$admin_vars.admin_css_file}">
<script src="{serendipity_getFile file='admin/js/modernizr-2.6.2.min.js'}"></script>
<script src="{serendipity_getFile file='admin/header_spawn.js'}"></script>
{if $admin_vars.admin_installed}
{serendipity_hookPlugin hook="backend_header" hookAll="true"}
{/if}
</head>
<body id="serendipity_admin_page" onload="spawn()">
{if NOT $admin_vars.no_banner}
<header id="top">
<div class="clearfix">
{if $admin_vars.admin_installed}
<div id="banner">
<h1><span class="visuallyhidden">{$CONST.SERENDIPITY_ADMIN_SUITE}: </span>{$blogTitle}</h1>
{if $admin_vars.is_logged_in}
<a href="{$serendipityBaseURL}">{$CONST.BACK_TO_BLOG}</a>
{/if}
{else}
<h1>{$CONST.SERENDIPITY_INSTALLATION}</h1>
{/if}
</div>
{if $admin_vars.is_logged_in}
<nav id="user_menu">
<h2>{$admin_vars.self_info}</h2>
<ul>
<li><a href="serendipity_admin.php?serendipity[adminModule]=logout">{$CONST.LOGOUT}</a></li>
<li><a href="serendipity_admin.php">{$CONST.ADMIN_FRONTPAGE}</a></li>
{if 'personalConfiguration'|checkPermission}
<li><a href="serendipity_admin.php?serendipity[adminModule]=personal">{$CONST.PERSONAL_SETTINGS}</a></li>
{/if}
</ul>
</nav>
{/if}
</div>
</header>
{/if}
<div id="main" class="clearfix">
{if NOT $admin_vars.is_logged_in}
{$admin_vars.out|@serendipity_refhookPlugin:'backend_login_page'}
{* <div id="login_container"> *}
{* <h2>{$CONST.WELCOME_TO_ADMIN}</h2> *}
{$admin_vars.out.header}
{if $admin_vars.post_action != '' AND NOT $admin_vars.is_logged_in}
<span class="msg_error">{$CONST.WRONG_USERNAME_OR_PASSWORD}</span>
{/if}
<form id="login" class="clearfix" action="serendipity_admin.php" method="post">
<input type="hidden" name="serendipity[action]" value="admin">
<fieldset>
<legend class="visuallyhidden"><span>{$CONST.PLEASE_ENTER_CREDENTIALS}</span></legend>
<div class="form_field">
<label for="login_uid">{$CONST.USERNAME}</label>
<input id="login_uid" name="serendipity[user]" type="text">
</div>
<div class="form_field">
<label for="login_pwd">{$CONST.PASSWORD}</label>
<input id="login_pwd" name="serendipity[pass]" type="password">
</div>
<div class="form_check">
<input id="login_auto" name="serendipity[auto]" type="checkbox"><label for="login_auto">{$CONST.AUTOMATIC_LOGIN}</label>
</div>
<input id="login_send" name="submit" type="submit" value="{$CONST.LOGIN}">
</fieldset>
{$admin_vars.out.table}
</form>
<a id="back_to_blog" href="{$serendipityBaseURL}">{$CONST.BACK_TO_BLOG}</a>
{$admin_vars.out.footer}
{* </div> *}
{else}
<div id="content" class="clearfix">
{$admin_vars.main_content}
</div>
{if NOT $admin_vars.no_sidebar}
<nav id="main_menu">
<h2 class="visuallyhidden">Main menu</h2> {* i18n *}
<ul>
{if 'adminEntries'|checkPermission OR 'adminEntriesPlugins'|checkPermission}
<li><h3>{$CONST.ADMIN_ENTRIES}</h3>
<ul>
{if 'adminEntries'|checkPermission}
<li><a href="serendipity_admin.php?serendipity[adminModule]=entries&amp;serendipity[adminAction]=new">{$CONST.NEW_ENTRY}</a></li>
<li><a href="serendipity_admin.php?serendipity[adminModule]=entries&amp;serendipity[adminAction]=editSelect">{$CONST.EDIT_ENTRIES}</a></li>
{/if}
{if 'adminComments'|checkPermission}
<li><a href="serendipity_admin.php?serendipity[adminModule]=comments">{$CONST.COMMENTS}</a></li>
{/if}
{if 'adminCategories'|checkPermission}
<li><a href="serendipity_admin.php?serendipity[adminModule]=category&amp;serendipity[adminAction]=view">{$CONST.CATEGORIES}</a></li>
{/if}
{if 'adminEntries'|checkPermission OR 'adminEntriesPlugins'|checkPermission}
{if $admin_vars.no_create !== true}
{serendipity_hookPlugin hook="backend_sidebar_entries" hookAll="true"}
{/if}
{/if}
</ul>
</li>
{/if}
{if 'adminImages'|checkPermission}
<li><h3>{$CONST.MEDIA}</h3>
<ul>
{if 'adminImagesAdd'|checkPermission}
<li><a href="serendipity_admin.php?serendipity[adminModule]=media&amp;serendipity[adminAction]=addSelect">{$CONST.ADD_MEDIA}</a></li>
{/if}
{if 'adminImagesView'|checkPermission}
<li><a href="serendipity_admin.php?serendipity[adminModule]=media">{$CONST.MEDIA_LIBRARY}</a></li>
{/if}
{if 'adminImagesDirectories'|checkPermission}
<li><a href="serendipity_admin.php?serendipity[adminModule]=media&amp;serendipity[adminAction]=directorySelect">{$CONST.MANAGE_DIRECTORIES}</a></li>
{/if}
{if 'adminImagesSync'|checkPermission}
<li><a href="serendipity_admin.php?serendipity[adminModule]=media&amp;serendipity[adminAction]=sync" onclick="return confirm('{$CONST.WARNING_THIS_BLAHBLAH}');">{$CONST.CREATE_THUMBS}</a></li>
{/if}
{if $admin_vars.no_create !== true}
{serendipity_hookPlugin hook="backend_sidebar_entries_images" hookAll="true"}
{/if}
</ul>
</li>
{/if}
{if 'adminTemplates'|checkPermission OR 'adminPlugins'|checkPermission}
<li><h3>{$CONST.APPEARANCE}</h3>
<ul>
{if 'adminTemplates'|checkPermission}
<li><a href="serendipity_admin.php?serendipity[adminModule]=templates">{$CONST.MANAGE_STYLES}</a></li>
{/if}
{if 'adminPlugins'|checkPermission}
<li><a href="serendipity_admin.php?serendipity[adminModule]=plugins">{$CONST.CONFIGURE_PLUGINS}</a></li>
{/if}
{if $admin_vars.no_create !== true}
{serendipity_hookPlugin hook="backend_sidebar_admin_appearance" hookAll="true"}
{/if}
</ul>
</li>
{/if}
{if 'adminUsersGroups'|checkPermission OR 'adminImport'|checkPermission OR 'siteConfiguration'|checkPermission OR 'blogConfiguration'|checkPermission OR 'adminUsers'|checkPermission}
<li><h3>{$CONST.ADMIN}</h3>
<ul>
{if 'siteConfiguration'|checkPermission OR 'blogConfiguration'|checkPermission}
<li><a href="serendipity_admin.php?serendipity[adminModule]=configuration">{$CONST.CONFIGURATION}</a></li>
{/if}
{if 'adminUsers'|checkPermission}
<li><a href="serendipity_admin.php?serendipity[adminModule]=users">{$CONST.MANAGE_USERS}</a></li>
{/if}
{if 'adminUsersGroups'|checkPermission}
<li><a href="serendipity_admin.php?serendipity[adminModule]=groups">{$CONST.MANAGE_GROUPS}</a></li>
{/if}
{if 'adminImport'|checkPermission}
<li><a href="serendipity_admin.php?serendipity[adminModule]=import">{$CONST.IMPORT_ENTRIES}</a></li>
<li><a href="serendipity_admin.php?serendipity[adminModule]=export">{$CONST.EXPORT_ENTRIES}</a></li>
{/if}
{if 'siteConfiguration'|checkPermission || 'blogConfiguration'|checkPermission}
<li><a href="serendipity_admin.php?serendipity[adminModule]=integrity">{$CONST.INTEGRITY}</a></li>
{/if}
{if $admin_vars.no_create !== true}
{serendipity_hookPlugin hook="backend_sidebar_admin" hookAll="true"}
{/if}
</ul>
</li>
{/if}
</ul>
</nav>
{/if}
{/if}
</div>
{if NOT $admin_vars.no_footer}
<footer id="meta">
<small>{$admin_vars.version_info}</small>
</footer>
{/if}
<script src="{serendipity_getFile file='admin/js/2k11.admin.js'}"></script>
</body>
</html>

View File

@ -0,0 +1 @@
jQuery(document).ready(function($) { });

View File

@ -0,0 +1,501 @@
/**
* box-sizing Polyfill
*
* A polyfill for box-sizing: border-box for IE6 & IE7.
*
* JScript
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published
* by the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* See <http://www.gnu.org/licenses/lgpl-3.0.txt>
*
* @category JScript
* @package box-sizing-polyfill
* @author Christian Schepp Schaefer <schaepp@gmx.de> <http://twitter.com/derSchepp>
* @copyright 2012 Christian Schepp Schaefer
* @license http://www.gnu.org/copyleft/lesser.html The GNU LESSER GENERAL PUBLIC LICENSE, Version 3.0
* @link http://github.com/Schepp/box-sizing-polyfill
*
* PREFACE:
*
* This box-sizing polyfill is based on previous work done by Erik Arvidsson,
* which he published in 2002 on http://webfx.eae.net/dhtml/boxsizing/boxsizing.html.
*
* USAGE:
*
* Add the behavior/HTC after every `box-sizing: border-box;` that you assign:
*
* box-sizing: border-box;
* *behavior: url(/scripts/boxsizing.htc);`
*
* Prefix the `behavior` property with a star, like seen above, so it will only be seen by
* IE6 & IE7, not by IE8+ who already implement box-sizing.
*
* The URL to the HTC file must be relative to your HTML(!) document, not relative to your CSS.
* That's why I'd advise you to use absolute paths like in the example.
*
*/
<component lightWeight="true">
<attach event="onpropertychange" onevent="checkPropertyChange()" />
<attach event="ondetach" onevent="restore()" />
<attach event="onresize" for="window" onevent="update()" />
<script type="text/javascript">
//<![CDATA[
var viewportwidth = (typeof window.innerWidth != 'undefined' ? window.innerWidth : element.document.documentElement.clientWidth);
// Shortcut for the document object
var doc = element.document;
// Buffer for multiple resize events
var resizetimeout = null;
// Don't apply box-sizing to certain elements
var apply = false;
switch(element.nodeName){
case '#comment':
case 'HTML':
case 'HEAD':
case 'TITLE':
case 'SCRIPT':
case 'STYLE':
case 'LINK':
case 'META':
break;
default:
apply = true;
break;
}
/*
* update gets called during resize events, then waits until there are no further resize events, and finally triggers a recalculation
*/
function update(){
if(resizetimeout !== null){
window.clearTimeout(resizetimeout);
}
resizetimeout = window.setTimeout(function(){
restore();
init();
resizetimeout = null;
},100);
}
/*
* restore gets called when the behavior is being detached (see event binding at the top),
* resets everything like it was before applying the behavior
*/
function restore(){
if(apply){
try{
element.runtimeStyle.removeAttribute("width");
element.runtimeStyle.removeAttribute("height");
}
catch(e){}
}
}
/*
* init gets called once at the start and then never again,
* triggers box-sizing calculations and updates width and height
*/
function init(){
if(apply){
updateBorderBoxWidth();
updateBorderBoxHeight();
}
}
/*
* checkPropertyChange gets called as soon as an element property changes
* (see event binding at the top), it then checks if any property influencing its
* dimensions was changed and if yes recalculates width and height
*/
function checkPropertyChange(){
if(apply){
var pn = event.propertyName;
if(pn === "style.boxSizing" && element.style.boxSizing === ""){
element.style.removeAttribute("boxSizing");
element.runtimeStyle.removeAttribute("boxSizing");
element.runtimeStyle.removeAttribute("width");
element.runtimeStyle.removeAttribute("height");
}
switch (pn){
case "style.width":
case "style.minWidth":
case "style.maxWidth":
case "style.borderLeftWidth":
case "style.borderLeftStyle":
case "style.borderRightWidth":
case "style.borderRightStyle":
case "style.paddingLeft":
case "style.paddingRight":
updateBorderBoxWidth();
break;
case "style.height":
case "style.minHeight":
case "style.maxHeight":
case "style.borderTopWidth":
case "style.borderTopStyle":
case "style.borderBottomWidth":
case "style.borderBottomStyle":
case "style.paddingTop":
case "style.paddingBottom":
updateBorderBoxHeight();
break;
case "className":
case "style.boxSizing":
updateBorderBoxWidth();
updateBorderBoxHeight();
break;
}
}
}
/*
* Helper function, taken from Dean Edward's IE7 framework,
* added by Schepp on 12.06.2010.
* http://code.google.com/p/ie7-js/
*
* Allows us to convert from relative to pixel-values.
*/
function getPixelValue(value){
var PIXEL = /^\d+(px)?$/i;
if (PIXEL.test(value)) return parseInt(value);
var style = element.style.left;
var runtimeStyle = element.runtimeStyle.left;
element.runtimeStyle.left = element.currentStyle.left;
element.style.left = value || 0;
value = parseInt(element.style.pixelLeft);
element.style.left = style;
element.runtimeStyle.left = runtimeStyle;
return value;
}
function getPixelWidth(object, value){
// For Pixel Values
var PIXEL = /^\d+(px)?$/i;
if (PIXEL.test(value)) return parseInt(value);
// For Percentage Values
var PERCENT = /^[\d\.]+%$/i;
if (PERCENT.test(value)){
try{
var parentPaddingLeft = getPixelWidth(object.parentElement,object.parentElement.currentStyle.paddingLeft);
var parentPaddingRight = getPixelWidth(object.parentElement,object.parentElement.currentStyle.paddingRight);
var parentBorderLeft = getPixelWidth(object.parentElement,object.parentElement.currentStyle.borderLeft);
var parentBorderRight = getPixelWidth(object.parentElement,object.parentElement.currentStyle.borderRight);
//var parentWidth = getPixelWidth(object.parentElement,(object.parentElement.currentStyle.width != "auto" ? object.parentElement.currentStyle.width : "100%"));
var parentWidth = object.parentElement.offsetWidth - parentPaddingLeft - parentPaddingRight - parentBorderLeft - parentBorderRight;
var value = (parseFloat(value) / 100) * parentWidth;
}
catch(e){
var value = (parseFloat(value) / 100) * element.document.documentElement.clientWidth;
}
return parseInt(value);
}
// For EM Values
var style = object.style.left;
var runtimeStyle = object.runtimeStyle.left;
object.runtimeStyle.left = object.currentStyle.left;
object.style.left = value || 0;
value = parseInt(object.style.pixelLeft);
object.style.left = style;
object.runtimeStyle.left = runtimeStyle;
return value;
}
function getPixelHeight(object, value){
// For Pixel Values
var PIXEL = /^\d+(px)?$/i;
if (PIXEL.test(value)) return parseInt(value);
// For Percentage Values
var PERCENT = /^[\d\.]+%$/i;
if (PERCENT.test(value)){
try{
if(object.parentElement.currentStyle.height != "auto"){
switch(object.parentElement.nodeName){
default:
if(object.parentElement.currentStyle.height !== "auto"){
var parentPaddingTop = getPixelWidth(object.parentElement,object.parentElement.currentStyle.paddingTop);
var parentPaddingBottom = getPixelWidth(object.parentElement,object.parentElement.currentStyle.paddingBottom);
var parentBorderTop = getPixelWidth(object.parentElement,object.parentElement.currentStyle.borderTop);
var parentBorderBottom = getPixelWidth(object.parentElement,object.parentElement.currentStyle.borderBottom);
var parentHeight = object.parentElement.offsetHeight - parentPaddingTop - parentPaddingBottom - parentBorderTop - parentBorderBottom;
//var parentHeight = getPixelHeight(object.parentElement,object.parentElement.currentStyle.height);
value = (parseFloat(value) / 100) * parentHeight;
}
else {
value = "auto";
}
break;
case 'HTML':
parentHeight = element.document.documentElement.clientHeight;
if(parentHeight !== "auto"){
value = (parseFloat(value) / 100) * parentHeight;
}
else {
value = "auto";
}
break;
}
if(value !== "auto") value = parseInt(value);
}
else {
value = "auto";
}
}
catch(e){
value = "auto";
}
return value;
}
// For EM Values
var style = object.style.left;
var runtimeStyle = object.runtimeStyle.left;
object.runtimeStyle.left = object.currentStyle.left;
object.style.left = value || 0;
value = parseInt(object.style.pixelLeft);
object.style.left = style;
object.runtimeStyle.left = runtimeStyle;
return value;
}
/*
* getBorderWidth & friends
* Border width getters
*/
function getBorderWidth(sSide){
if(element.currentStyle["border" + sSide + "Style"] == "none"){
return 0;
}
var n = getPixelValue(element.currentStyle["border" + sSide + "Width"]);
return n || 0;
}
function getBorderLeftWidth() { return getBorderWidth("Left"); }
function getBorderRightWidth() { return getBorderWidth("Right"); }
function getBorderTopWidth() { return getBorderWidth("Top"); }
function getBorderBottomWidth() { return getBorderWidth("Bottom"); }
/*
* getPadding & friends
* Padding width getters
*/
function getPadding(sSide) {
var n = getPixelValue(element.currentStyle["padding" + sSide]);
return n || 0;
}
function getPaddingLeft() { return getPadding("Left"); }
function getPaddingRight() { return getPadding("Right"); }
function getPaddingTop() { return getPadding("Top"); }
function getPaddingBottom() { return getPadding("Bottom"); }
/*
* getBoxSizing
* Get the box-sizing value for the current element
*/
function getBoxSizing(){
var s = element.style;
var cs = element.currentStyle
if(typeof s.boxSizing != "undefined" && s.boxSizing != ""){
return s.boxSizing;
}
if(typeof s["box-sizing"] != "undefined" && s["box-sizing"] != ""){
return s["box-sizing"];
}
if(typeof cs.boxSizing != "undefined" && cs.boxSizing != ""){
return cs.boxSizing;
}
if(typeof cs["box-sizing"] != "undefined" && cs["box-sizing"] != ""){
return cs["box-sizing"];
}
return getDocumentBoxSizing();
}
/*
* getDocumentBoxSizing
* Get the default document box sizing (check for quirks mode)
*/
function getDocumentBoxSizing(){
if(doc.compatMode === null || doc.compatMode === "BackCompat"){
return "border-box";
}
return "content-box"
}
/*
* setBorderBoxWidth & friends
* Width and height setters
*/
function setBorderBoxWidth(n){
element.runtimeStyle.width = Math.max(0, n - getBorderLeftWidth() -
getPaddingLeft() - getPaddingRight() - getBorderRightWidth()) + "px";
}
function setBorderBoxMinWidth(n){
element.runtimeStyle.minWidth = Math.max(0, n - getBorderLeftWidth() -
getPaddingLeft() - getPaddingRight() - getBorderRightWidth()) + "px";
}
function setBorderBoxMaxWidth(n){
element.runtimeStyle.maxWidth = Math.max(0, n - getBorderLeftWidth() -
getPaddingLeft() - getPaddingRight() - getBorderRightWidth()) + "px";
}
function setBorderBoxHeight(n){
element.runtimeStyle.height = Math.max(0, n - getBorderTopWidth() -
getPaddingTop() - getPaddingBottom() - getBorderBottomWidth()) + "px";
}
function setBorderBoxMinHeight(n){
element.runtimeStyle.minHeight = Math.max(0, n - getBorderTopWidth() -
getPaddingTop() - getPaddingBottom() - getBorderBottomWidth()) + "px";
}
function setBorderBoxMaxHeight(n){
element.runtimeStyle.maxHeight = Math.max(0, n - getBorderTopWidth() -
getPaddingTop() - getPaddingBottom() - getBorderBottomWidth()) + "px";
}
function setContentBoxWidth(n){
element.runtimeStyle.width = Math.max(0, n + getBorderLeftWidth() +
getPaddingLeft() + getPaddingRight() + getBorderRightWidth()) + "px";
}
function setContentBoxMinWidth(n){
element.runtimeStyle.minWidth = Math.max(0, n + getBorderLeftWidth() +
getPaddingLeft() + getPaddingRight() + getBorderRightWidth()) + "px";
}
function setContentBoxMaxWidth(n){
element.runtimeStyle.maxWidth = Math.max(0, n + getBorderLeftWidth() +
getPaddingLeft() + getPaddingRight() + getBorderRightWidth()) + "px";
}
function setContentBoxHeight(n){
element.runtimeStyle.height = Math.max(0, n + getBorderTopWidth() +
getPaddingTop() + getPaddingBottom() + getBorderBottomWidth()) + "px";
}
function setContentBoxMinHeight(n){
element.runtimeStyle.minHeight = Math.max(0, n + getBorderTopWidth() +
getPaddingTop() + getPaddingBottom() + getBorderBottomWidth()) + "px";
}
function setContentBoxMaxHeight(n){
element.runtimeStyle.maxHeight = Math.max(0, n + getBorderTopWidth() +
getPaddingTop() + getPaddingBottom() + getBorderBottomWidth()) + "px";
}
/*
* updateBorderBoxWidth & updateBorderBoxHeight
*
*/
function updateBorderBoxWidth() {
if(getDocumentBoxSizing() == getBoxSizing()){
return;
}
var csw = element.currentStyle.width;
if(csw != "auto"){
csw = getPixelWidth(element,csw);
if(getBoxSizing() == "border-box"){
setBorderBoxWidth(parseInt(csw));
}
else{
setContentBoxWidth(parseInt(csw));
}
}
csw = element.currentStyle.minWidth;
if(csw != "none"){
csw = getPixelWidth(element,csw);
if(getBoxSizing() == "border-box"){
setBorderBoxMinWidth(parseInt(csw));
}
else{
setContentBoxMinWidth(parseInt(csw));
}
}
csw = element.currentStyle.maxWidth;
if(csw != "none"){
csw = getPixelWidth(element,csw);
if(getBoxSizing() == "border-box"){
setBorderBoxMaxWidth(parseInt(csw));
}
else{
setContentBoxMaxWidth(parseInt(csw));
}
}
}
function updateBorderBoxHeight() {
if(getDocumentBoxSizing() == getBoxSizing()){
return;
}
var csh = element.currentStyle.height;
if(csh != "auto"){
csh = getPixelHeight(element,csh);
if(csh !== "auto"){
if(getBoxSizing() == "border-box"){
setBorderBoxHeight(parseInt(csh));
}
else{
setContentBoxHeight(parseInt(csh));
}
}
}
csh = element.currentStyle.minHeight;
if(csh != "none"){
csh = getPixelHeight(element,csh);
if(csh !== "none"){
if(getBoxSizing() == "border-box"){
setBorderBoxMinHeight(parseInt(csh));
}
else{
setContentBoxMinHeight(parseInt(csh));
}
}
}
csh = element.currentStyle.maxHeight;
if(csh != "none"){
csh = getPixelHeight(element,csh);
if(csh !== "none"){
if(getBoxSizing() == "border-box"){
setBorderBoxMaxHeight(parseInt(csh));
}
else{
setContentBoxMaxHeight(parseInt(csh));
}
}
}
}
// Run the calculations
init();
//]]>
</script>
</component>

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,383 @@
{* HTML5: Yes *}
{* jQuery: No *}
<html>
<head>
<meta charset="{$CONST.LANG_CHARSET}">
<title>{$CONST.SERENDIPITY_ADMIN_SUITE}: {$CONST.SELECT_FILE}</title>
{if $media.css}<link rel="stylesheet" href="{$media.css}">{/if}
{if $media.css_tree}<link rel="stylesheet" href="{$media.css_tree}">{/if}
{if $media.css_imgedit}<link rel="stylesheet" href="{$media.css_imgedit}">{/if}
{if $media.is_imgedit}
<style>
#outer {ldelim}
left: {$imgedit.zoombox_padding}px;
{rdelim}
#overlay {ldelim}
clip: rect({$imgedit.overlay_clip_top} {$imgedit.overlay_clip_right} {$imgedit.overlay_clip_bottom} {$imgedit.overlay_clip_left});
{rdelim}
#harea {ldelim}
left: {$imgedit.zoombox_x}px;
top: {$imgedit.zoombox_y}px;
visibility: {$imgedit.harea_visibility};
{rdelim}
#varea {ldelim}
left: {$imgedit.zoombox_x}px;
top: {$imgedit.zoombox_y}px;
visibility: {$imgedit.varea_visibility};
{rdelim}
#zoom {ldelim}
width: {$imgedit.zoombox_width}px;
{rdelim}
#scaletext {ldelim}
visibility: {$imgedit.scale_visibility};
{rdelim}
#outer {ldelim}
width: {$imgedit.img_width}px;
height: {$imgedit.img_height}px;
border: 1px solid red;
position: relative;
display: block;
{rdelim}
</style>
<script src="{serendipity_getFile file='dragdrop.js'}" ></script>
<script src="{serendipity_getFile file='imgedit.js'}" ></script>
{/if}
<script src="{serendipity_getFile file='YahooUI/treeview/YAHOO.js'}"></script>
<script src="{serendipity_getFile file='YahooUI/treeview/treeview.js'}"></script>
</head>
<script>
function addLoadEvent(func) {ldelim}
var oldonload = window.onload;
if (typeof window.onload != 'function') {ldelim}
window.onload = func;
{rdelim} else {ldelim}
window.onload = function() {ldelim}
oldonload();
func();
{rdelim}
{rdelim}
{rdelim}
function SetCookie(name, value) {ldelim}
var today = new Date();
var expire = new Date();
expire.setTime(today.getTime() + (60*60*24*30*1000));
document.cookie = 'serendipity[' + name + ']='+escape(value) + ';expires=' + expire.toGMTString();
{rdelim}
function rememberOptions() {ldelim}
el = document.getElementById('imageForm');
for (i = 0; i < el.elements.length; i++) {ldelim}
elname = new String(el.elements[i].name);
elname = elname.replace(/\[/g, '_');
elname = elname.replace(/\]/g, '');
if (el.elements[i].type == 'radio') {ldelim}
if (el.elements[i].checked) {ldelim}
SetCookie(elname, el.elements[i].value);
{rdelim}
{rdelim} else if (typeof(el.elements[i].options) == 'object') {ldelim}
SetCookie(elname, el.elements[i].options[el.elements[i].selectedIndex].value);
{rdelim}
{rdelim}
{rdelim}
{if $media.only_path}
if (parent.frames && parent.frames['tree']) {ldelim}
parent.frames['tree'].document.getElementById('newdirlink').href =
parent.frames['tree'].basenewdirurl +
"{$media.only_path|@escape}"
{rdelim}
{/if}
{if $media.case == 'default'}
function rename(id, fname) {ldelim}
if (newname = prompt('{$CONST.ENTER_NEW_NAME}' + fname, fname)) {ldelim}
newloc = '?{$media.token_url}&serendipity[adminModule]=images&serendipity[adminAction]=rename&serendipity[fid]='+ escape(id) + '&serendipity[newname]='+ escape(newname);
location.href=newloc;
{rdelim}
{rdelim}
{/if}
{if $media.case == 'tree'}
var toggle_state = 'expand';
function treeToggleAll() {ldelim}
if (toggle_state == 'expand') {ldelim}
toggle_state = 'collapse';
tree.expandAll();
{rdelim} else {ldelim}
toggle_state = 'expand';
tree.collapseAll();
coreNode.expand();
{rdelim}
{rdelim}
{/if}
</script>
{if $media.frameset}
<frameset id="media_frame" cols="20%,*">
<frame id="media_frame_tree" frameborder="0" name="tree" scrolling="auto" src="{$serendipityHTTPPath}serendipity_admin_image_selector.php?{$media.GET_STRING}&amp;serendipity[step]=tree">
<frame id="media_frame_main" frameborder="0" name="media" src="{$serendipityHTTPPath}serendipity_admin_image_selector.php?{$media.GET_STRING}&amp;serendipity[step]=default">
</frameset>
</html>
{else}
<body id="{$media.body_id}">
<div class="serendipityAdminContent">
{if $media.case == 'external'}
<!-- EXTERNAL MEDIA START -->
{if $media.is_created OR $media.is_deleted}
<script>
if (parent.frames['tree']) {ldelim}
parent.frames['tree'].location.href = parent.frames['tree'].location.href;
parent.frames['media'].location.href = '{$serendipityHTTPPath}serendipity_admin_image_selector.php?serendipity[step]=default&serendipity[only_path]={$media.new_dir}';
{rdelim}
</script>
{/if}
{$media.external}
{if $media.is_imgedit}
{$IMGEDIT}
{/if}
<!-- EXTERNAL MEDIA END -->
{elseif $media.case == 'default'}
<!-- MEDIA MANAGER START -->
<h1>{$CONST.SELECT_FILE}</h1>
<p>{$CONST.CLICK_FILE_TO_INSERT}</p>
{$media.external}
{$MEDIA_LIST}
<!-- MEDIA MANAGER END -->
{elseif $media.case == 'choose'}
{if $perm_denied}
<span class="msg_error">{$CONST.PERM_DENIED}</span>
{else}
<!-- MEDIA SELECTION START -->
{$media.external}
<script src="{$serendipityHTTPPath}serendipity_define.js.php"></script>
<script src="{$serendipityHTTPPath}serendipity_editor.js"></script>
<div class="clearfix">
{if $media.file.is_image}
{serendipity_hookPlugin hook="frontend_image_selector" eventData=$media.file hookAll=true}
<h1>{$CONST.YOU_CHOSE|@sprintf:$media.file.realname}</h1>
<img src="{$media.file.imgsrc}" alt="">
<form id="imageForm" name="serendipity[selForm]" action="#" method="GET" onsubmit="serendipity_imageSelector_done()">
{serendipity_hookPlugin hookAll=true hook='frontend_image_selector_hiddenfields' eventData=$media.file}
<input name="imgThumbWidth" type="hidden" value="{$media.file.thumbWidth}">
<input name="imgThumbHeight" type="hidden" value="{$media.file.thumbHeight}">
<input name="imgWidth" type="hidden" value="{$media.file.dimensions_width}">
<input name="imgHeight" type="hidden" value="{$media.file.dimensions_height}">
<input name="imgID" type="hidden" value="{$media.imgID}">
<input name="baseURL" type="hidden" value="{$serendipityBaseURL}">
<input name="indexFile" type="hidden" value="{$serendipityIndexFile}">
<input name="imgName" type="hidden" value="{$media.file.full_file}">
<input name="thumbName" type="hidden" value="{$media.file.show_thumb}">
<input name="hotlink" type="hidden" value="{$media.file.hotlink}">
{if $media.htmltarget}
<input name="serendipity[htmltarget]" type="hidden" value="{$media.htmltarget|@escape}">
{/if}
{if $media.filename_only}
<input name="serendipity[filename_only]" type="hidden" value="{$media.filename_only|@escape}">
{/if}
{if $media.file.fast_select}
<script>
{serendipity_hookPlugin hookAll=true hook='frontend_image_add_filenameonly' eventData=$media.file}
serendipity_imageSelector_done('{$media.textarea|@escape}');
</script>
{else}
<fieldset id="image_size">
<legend><span>{$CONST.IMAGE_SIZE}</span></legend>
<div class="clearfix">
<div class="form_radio">
<input id="radio_link_no" name="serendipity[linkThumbnail]" type="radio" value="no" {'linkThumbnail'|@ifRemember:'no':true}>
<label for="radio_link_no">{$CONST.I_WANT_THUMB}</label>
</div>
<div class="form_radio">
<input id="radio_link_yes" name="serendipity[linkThumbnail]" type="radio" value="yes" {'linkThumbnail'|@ifRemember:'yes'}>
<label for="radio_link_yes">{$CONST.I_WANT_BIG_IMAGE}</label>
</div>
</div>
{serendipity_hookPlugin hookAll=true hook='frontend_image_selector_imagesize' eventData=$media.file}
</fieldset>
{if NOT $media.filename_only}
<fieldset id="image_alignment">
<legend><span>{$CONST.IMAGE_ALIGNMENT}</span></legend>
<div class="clearfix">
<div class="form_radio">
<input id="image_align_top" name="serendipity[align]" {'align'|@ifRemember:''} type="radio" value="">
<label for="image_align_top"><img src="{serendipity_getFile file='img/img_align_top.png'}" alt="Top"></label> {* i18n *}
</div>
<div class="form_radio">
<input id="image_align_left" name="serendipity[align]" {'align'|@ifRemember:'left':true} type="radio" value="left">
<label for="image_align_left"><img src="{serendipity_getFile file='img/img_align_left.png'}" alt="Left"></label> {* i18n *}
</div>
<div class="form_radio">
<input id="image_align_right" name="serendipity[align]" {'align'|@ifRemember:'right'} type="radio" value="right">
<label for="image_align_right"><img src="{serendipity_getFile file='img/img_align_right.png'}" alt="Right"></label> {* i18n *}
</div>
</div>
{serendipity_hookPlugin hookAll=true hook='frontend_image_selector_imagealign' eventData=$media.file}
</fieldset>
<fieldset id="image_as_link">
<legend><span>{$CONST.IMAGE_AS_A_LINK}</span></legend>
<div class="clearfix">
<div class="form_radio">
<input id="radio_islink_yes" name="serendipity[isLink]" type="radio" value="yes" {'isLink'|@ifRemember:'yes':true}>
<label for="radio_islink_yes">{$CONST.I_WANT_NO_LINK}</label>
</div>
<div class="form_radio">
<input id="radio_islink_no" name="serendipity[isLink]" type="radio" value="no" {'isLink'|@ifRemember:'no'}>
<label for="radio_islink_no">{$CONST.I_WANT_IT_TO_LINK}</label>
</div>
</div>
<div class="form_field">
{* Could use input[type=url], but does that handle local URLs as well? Hm. *}
{if $media.file.hotlink}
<input name="serendipity[url]" type="text" value="{$media.file.path}">
{else}
{serendipity_hookPlugin hookAll=true hook='frontend_image_selector_link_url' eventData=$media.file.links}
<input name="serendipity[url]" type="text" value="{$media.file.links.imagelinkurl}">
{/if}
</div>
<div class="form_select">
<label id="select_image_target">{$CONST.MEDIA_TARGET}</label>
<select id="select_image_target" name="serendipity[target]">
<option value="none" {'target'|@ifRemember:'none':false:'selected'}>{$CONST.NONE}</option>
<option value="js" {'target'|@ifRemember:'js':false:'selected'}>{$CONST.MEDIA_TARGET_JS}</option>
<option value="plugin" {'target'|@ifRemember:'plugin':false:'selected'}>{$CONST.MEDIA_ENTRY}</option>
<option value="_blank" {'target'|@ifRemember:'_blank':false:'selected'}>{$CONST.MEDIA_TARGET_BLANK}</option>
</select>
{serendipity_hookPlugin hookAll=true hook='frontend_image_selector_imagelink2' eventData=$media.file}
</div>
</fieldset>
<div id="image_comment" class="form_area">
<label for="serendipity_imagecomment">{$CONST.COMMENT}</label>
<textarea id="serendipity_imagecomment" name="serendipity[imagecomment]" rows="5">{$media.file.props.base_property.COMMENT1|@escape}</textarea>
{serendipity_hookPlugin hookAll=true hook='frontend_image_selector_imagecomment' eventData=$media.file}
</div>
<div id="image_alttext" class="form_field">
<label for="serendipity_alt">{$CONST.MEDIA_ALT}</label>
<input id="serendipity_alt" name="serendipity[alt]" type="text" value="{$media.file.props.base_property.ALT|@escape}">
{serendipity_hookPlugin hookAll=true hook='frontend_image_selector_alt' eventData=$media.file}
</div>
<div id="image_title" class="form_field">
<label for="serendipity_title">{$CONST.MEDIA_TITLE}</label>
<input id="serendipity_title" name="serendipity[title]" type="text" value="{$media.file.props.base_property.TITLE|@escape}">
{serendipity_hookPlugin hookAll=true hook='frontend_image_selector_title' eventData=$media.file}
</div>
{/if}
{serendipity_hookPlugin hookAll=true hook='frontend_image_selector_more' eventData=$media.file}
<div class="form_buttons">
<input type="button" value="{$CONST.BACK}" onclick="history.go(-1);">
<input type="button" value="{$CONST.DONE}" onclick="rememberOptions(); {$media.file.origfinishJSFunction}">
{serendipity_hookPlugin hookAll=true hook='frontend_image_selector_submit' eventData=$media.file}
</div>
{/if}
</form>
{else}
{if $media.filename_only}
<script>
{serendipity_hookPlugin hookAll=true hook='frontend_image_add_filenameonly' eventData=$media}
parent.self.opener.serendipity_imageSelector_addToElement('{$media.file.full_file|escape}', '{$media.htmltarget|@escape}');
parent.self.close();
</script>
{else}
<script>
block = '<a class="block_level opens_window" href="{$media.file.full_file}" title="{$media.file.realname|@escape}">{$media.file.realname|@escape}</a>';
{serendipity_hookPlugin hookAll=true hook='frontend_image_add_unknown' eventData=$media}
if (parent.self.opener.editorref) {ldelim}
parent.self.opener.editorref.surroundHTML(block, '');
{rdelim} else {ldelim}
parent.self.opener.serendipity_imageSelector_addToBody(block, '{$media.textarea}');
{rdelim}
parent.self.close();
</script>
{/if}
{/if}
{/if}
{elseif $media.case == 'tree'}
<div id="content">
<form name="mainForm" action="javscript:;">
<div class="newsItem">
<div id="expandcontractdiv">
<a href="javascript:treeToggleAll()">{$CONST.TOGGLE_ALL}</a>
</div>
<div id="treeDiv1"></div>
</div>
</form>
</div>
<div id="footerContainer">
<div id="footer">
<a id="newdirlink" target="media" href="{$serendipityHTTPPath}serendipity_admin_image_selector.php?serendipity[step]=directoryCreate">{$CONST.WORD_NEW}</a>
<a id="managedirlink" target="media" href="{$serendipityHTTPPath}serendipity_admin_image_selector.php?serendipity[step]=default&amp;serendipity[adminModule]=images&amp;serendipity[adminAction]=directorySelect">{$CONST.MANAGE_DIRECTORIES}</a>
</div>
</div>
<script>
var tree;
var nodes = new Array();
var nodeIndex;
var coreNode = '';
var last_path = '';
var last_node = new Array();
var baseurl = '{$serendipityHTTPPath}serendipity_admin_image_selector.php?{$media.GET_STRING}&amp;serendipity[step]=default&amp;serendipity[only_path]=';
var basenewdirurl = '{$serendipityHTTPPath}serendipity_admin_image_selector.php?{$media.GET_STRING}&amp;serendipity[step]=directoryCreate&amp;&amp;serendipity[only_path]=';
function treeInit() {ldelim}
tree = new YAHOO.widget.TreeView("treeDiv1");
tree.onExpand = function(node) {ldelim}
document.getElementById('newdirlink').href = basenewdirurl + node.data.relpath;
{rdelim};
coreNode = new YAHOO.widget.TextNode("{$CONST.MEDIA}", tree.getRoot(), false);
coreNode.href = baseurl;
coreNode.target = 'media';
coreNode.expanded = true;
{foreach from=$media.paths item="item" key="id"}
mydir = {ldelim} id: "{$id}", label: "{$item.name}", target : "media", href: baseurl + "{$item.relpath}", relpath: "{$item.relpath}" {rdelim};
{if $item.depth == 1}
tmpNode = new YAHOO.widget.TextNode(mydir, coreNode, false);
{else}
if (last_node[{$item.depth}-1]) {ldelim}
tmpNode = new YAHOO.widget.TextNode(mydir, last_node[{$item.depth} - 1], false);
{rdelim} else {ldelim}
tmpNode = new YAHOO.widget.TextNode(mydir, coreNode, false);
{rdelim}
{/if}
last_node[{$item.depth}] = tmpNode;
{/foreach}
tree.draw();
{rdelim}
addLoadEvent(treeInit);
</script>
{/if}
</div>
</body>
</html>
{/if}

View File

@ -0,0 +1,57 @@
{* HTML5: Yes *}
{* jQuery: No *}
{* Erm, why isn't this localized at all? o_O *}
<div id="imgedit" class="clearfix">
<form method="post" action="{$imgedit.my_url}" onsubmit="imgedit_getCoordinates()">
<input id="area_orientation" name="area_orientation" type="hidden" value="{$imgedit.area_orientation}">
<input id="zoombox_factor" name="zoombox_factor" type="hidden" value="{$imgedit.zoombox_factor}">
<input id="zoombox_x" name="zoombox_x" type="hidden" value="{$imgedit.zoombox_x}">
<input id="zoombox_y" name="zoombox_y" type="hidden" value="{$imgedit.zoombox_y}">
<input id="real_img_width" name="real_img_width" type="hidden" value="{$imgedit.real_img_width}">
<input id="real_img_height" name="real_img_height" type="hidden" value="{$imgedit.real_img_height}">
<input id="autoguess_clicked" name="autoguess_clicked" type="hidden" value="{$imgedit.autoguess_clicked}">
<div id="cropbuttons" class="clearfix">
<input name="crop" type="submit" value="Crop this image! I'm serious!">
<div id="scaletext">
<span>OR</span> <input name="scale" type="submit" onclick="return imgedit_autoSize('true');" value="Just get that crap somehow inside, will ya? (Equals to: Fit image to largest side)">
</div>
</div>
{* There might be better (HTML5/jQuery) widgets for this, but let's keep it for now. *}
<div id="zoom" class="clearfix">
<input id="action_enlarge" name="action[enlarge]" type="submit" onclick="return imgedit_zoom(-2); this.blur();" value="Enlarge">
<script>document.write('<div id="zoomslider"><img id="zoombutton" src="{serendipity_getFile file="admin/img/imgedit_slider.gif"}" width="25" height="5" alt="[Slider]"></div>');</script>
<noscript>
<div class="zoomfactor">Zoom: {$imgedit.zoombox_factor}x</div>
</noscript>
<input id="action_reduce" name="action[reduce]" type="submit" onclick="return imgedit_zoom(2); this.blur();" value="Reduce">
<input id="action_autoscale" name="autoscale" type="submit" onclick="return imgedit_autoSize('false');" value="Best Guess">
<!-- BEGIN ORIENTATION_AVAILABLE -->
<input id="action_orientation" name="toggle_area_orientation" type="image" onclick="return imgedit_areaOrientation();" title="Toggle Orientation" alt="Toggle Orientation" src="{serendipity_getFile file="admin/img/imgedit_orientation.gif"}">
<!-- END ORIENTATION_AVAILABLE -->
<noscript>
<input id="action_move_up" class="action_move" name="action[moveup]" type="submit" onclick="this.blur();" value="&uarr;">
<input id="action_move_left" class="action_move" name="action[moveleft]" type="submit" onclick="this.blur();" value="&larr;">
<input id="action_move_right" class="action_move" name="action[moveright]" type="submit" onclick="this.blur();" value="&rarr;">
<input id="action_move_down" class="action_move" name="action[movedown]" type="submit" onclick="this.blur();" value="&darr;">
<span id="action_moveby">Move by <input name="move_increase" type="text" value="{$imgedit.move_increase}">px</span>
</noscript>
</div>
<div id="outer" class="clearfix">
<img id="backdrop" src="{$imgedit.http_img_name}" alt="Backdrop" width="{$imgedit.img_width}" height="{$imgedit.img_height}">
<img id="overlay" src="{$imgedit.http_img_name}" alt="Overlay" width="{$imgedit.img_width}" height="{$imgedit.img_height}">
<img id="harea" src="{$imgedit.harea_img_name}" alt="[Crop area]" width="{$imgedit.harea_width}" height="{$imgedit.harea_height}">
<img id="varea" src="{$imgedit.varea_img_name}" alt="[Crop area]" width="{$imgedit.varea_width}" height="{$imgedit.varea_height}">
</div>
</form>
</div>
<script>imgedit_init({$imgedit.zoombox_width}, {$imgedit.area_border}, {$imgedit.zoombox_x}, {$imgedit.zoombox_y}, '{$imgedit.area_orientation}');</script>
</body>
</html>

View File

@ -0,0 +1,41 @@
{* HTML5: Yes *}
{* jQuery: NN *}
{* Erm, why isn't this localized at all? o_O *}
<div id="fs_info" class="info">
{* Check if h3 is the proper level. *}
<h3>Output Information</h3>
<p>Your image was {$imgedit.real_img_width} x {$imgedit.real_img_height} pixels (Orientation: {$imgedit.area_orientation}).</p>
<p>Depending on your zoom of {$imgedit.zoombox_factor}x, it was {$imgedit.zoom_img_width} x {$imgedit.zoom_img_height} pixels.</p>
<p>It got scaled to {$imgedit.img_width} x {$imgedit.img_height} pixels.</p>
<p>Then a rectangle starting from ({$imgedit.slice_from_x}|{$imgedit.slice_from_y}) to ({$imgedit.slice_to_x}|{$imgedit.slice_to_y}) has been sliced from it.</p>
{if $imgedit.image_cut}
<p>The image has been correctly cropped and only the part inside of the rectangle is going to be shown.</p>
{/if}
{if $imgedit.image_no_cut}
<p>Because the source dimensions were smaller than the destination dimensions, the image does not fill up the complete space.</p>
{/if}
{if $imgedit.image_error}
<span class="msg_error">However, there were errors processing your image.</span>
{/if}
</div>
<div id="fs_crop" class="info">
<h3>Image Result</h3>
<h4>Cropped Image:<h4>
<div id="outer">
<img id="cropimage" class="crop" src="{$imgedit.http_img_name}?{$imgedit.refresh_line}" width="{$imgedit.img_width}" height="{$imgedit.img_height}" alt="Cropped image">
</div>
</div>
<div class="info">
<h3>Play it again, Sam</h3>
<p>That was great! So, please once more, with feeling!</p>
</div>

View File

@ -0,0 +1,159 @@
{* HTML5: Yes *}
{* jQuery: No *}
{foreach from=$media.files item="file" name="mediafiles" key="mediakey"}
{if NOT $media.manage}
<div class="media_file_preview">
{$file.preview}
{if $file.orderkey != ''}
<span>{$file.orderkey|@escape}</span>
{/if}
</div>
{else}
<article class="media_file">
<header>
<h3>{$file.realname}{if $file.orderkey != ''}: {$file.orderkey|@escape}{/if}</h3>
{if $file.authorid != 0}<span class="author">{$file.authorname}</span>{/if}
</header>
<div class="media_file_preview">
{$file.preview}
</div>
{if $file.is_editable}
<ul class="media_file_actions plainList">
<li><a id="media_fullsize" href="#" onclick="F1 = window.open('{if $file.hotlink}{$file.path}{else}{$file.full_file}{/if}', 'Zoom', 'height={$file.popupHeight},width={$file.popupWidth},top='+ (screen.height-{$file.popupHeight})/2 +',left='+ (screen.width-{$file.popupWidth})/2 +',toolbar=no,menubar=no,location=no,resize=1,resizable=1{if NOT $file.is_image},scrollbars=yes{/if}');">{$CONST.MEDIA_FULLSIZE}</a></li>
<li><a id="media_rename" href="#" onclick="rename('{$file.id}', '{$file.name|escape:javascript}')">{$CONST.MEDIA_RENAME}</a></li>
{if $file.is_image AND NOT $file.hotlink}
<li><a id="media_resize" href="#" onclick="location.href='?serendipity[adminModule]=images&amp;serendipity[adminAction]=scaleSelect&amp;serendipity[fid]={$file.id}';">{$CONST.IMAGE_RESIZE}</a></li>
{/if}
{if $file.is_image AND NOT $file.hotlink}
<li><a id="media_rotate_left" href="?serendipity[adminModule]=images&amp;serendipity[adminAction]=rotateCCW&amp;serendipity[fid]={$file.id}">{$CONST.IMAGE_ROTATE_LEFT}</a></li>
{/if}
{if $file.is_image AND NOT $file.hotlink}
<li><a id="media_rotate_right" href="?serendipity[adminModule]=images&amp;serendipity[adminAction]=rotateCW&amp;serendipity[fid]={$file.id}">{$CONST.IMAGE_ROTATE_RIGHT}</a></li>
{/if}
<li><a id="media_prop" href="?serendipity[adminModule]=images&amp;serendipity[adminAction]=properties&amp;serendipity[fid]={$file.id}">{$CONST.MEDIA_PROP}</a></li>
<li><a id="media_delete" href="?serendipity[adminModule]=images&amp;serendipity[adminAction]=delete&amp;serendipity[fid]={$file.id}">{$CONST.MEDIA_DELETE}</a></li>
<li><input id="multidelete_image{$file.id}" name="serendipity[multiDelete][]" type="checkbox" value="{$file.id}">
<label for="multidelete_image{$file.id}" class="visuallyhidden">Select for multidelete</label> {* i18n *}
</li>
</ul>
{/if}
<footer>
<ul class="media_file_meta plainList">
{if $file.hotlink}
<li>{$file.nice_hotlink}</li>
{else}
{if $file.is_image}
<li><b>{$CONST.ORIGINAL_SHORT}:</b> {$file.dimensions_width}x{$file.dimensions_height}</li>
<li><b>{$CONST.THUMBNAIL_SHORT}:</b> {$file.dim.0}x{$file.dim.1}</li>
{/if}
<li>{$file.nice_size} KB</li>
{if $file.realname != $file.diskname}
<li>{$file.diskname}</li>
{/if}
{/if}
</ul>
</footer>
</article>
{/if}
{if NOT $media.enclose}
<article class="media_file media_enclose_no">
<header>
<h3>{$file.realname}</h3>
<span>{$file.mime}{if $file.realname != $file.diskname}, {$file.diskname}{/if}</span>
</header>
<footer>
<ul class="media_file_meta plainList">
<li>{if $file.authorid != 0}{$CONST.POSTED_BY} {$file.authorname} {/if}{$CONST.ON} {$file.date|@formatTime:DATE_FORMAT_SHORT}</li>
{if $file.hotlink}
<li>{$file.nice_hotlink}</li>
{elseif $file.is_image}
<li><b>{$CONST.ORIGINAL_SHORT}:</b> {$file.dimensions_width}x{$file.dimensions_height}</li>
<li><b>{$CONST.THUMBNAIL_SHORT}:</b> {$file.dim.0}x{$file.dim.1}</li>
{/if}
<li>{$file.nice_size} KB</li>
</ul>
</footer>
<input type="hidden" name="serendipity[mediaProperties][{$mediakey}][image_id]" value="{$file.image_id}">
<section class="media_file_props">
<h4>{$CONST.MEDIA_PROP}</h4>
{foreach from=$file.base_property key="prop_fieldname" item="prop_content"}
<div class="form_{if $prop_content.type == 'textarea'}area{else}field{/if}">
<label for="mediaProperty{$prop_fieldname}">{$prop_content.label}</label>
{if $prop_content.type == 'textarea'}
<textarea id="mediaProperty{$prop_fieldname}" name="serendipity[mediaProperties][{$mediakey}][{$prop_content.title}]" rows="5">{$prop_content.val|@escape}</textarea>
{elseif $prop_content.type == 'readonly'}
{$prop_content.val|@escape}
{elseif $prop_content.type == 'input'}
<input id="mediaProperty{$prop_fieldname}" name="serendipity[mediaProperties][{$mediakey}][{$prop_content.title}]" type="text" value="{$prop_content.val|@escape}">
{/if}
</div>
{/foreach}
{if NOT $file.hotlink}
<div class="form_select">
<label for="newDir{$mediakey}">{$CONST.FILTER_DIRECTORY}</label>
<input type="hidden" name="serendipity[oldDir][{$mediakey}]" value="{$file.path|@escape}">
<select id="newDir{$mediakey}" name="serendipity[newDir][{$mediakey}]">
<option value=""></option>
{foreach from=$media.paths item="folder"}
<option {if ($file.path == $folder.relpath)}selected="selected"{/if} value="{$folder.relpath}">{'&nbsp;'|str_repeat:($folder.depth*2)}{$folder.name}</option>
{/foreach}
</select>
</div>
{/if}
{if $file.is_image}
<a class="block_level opens_window" href="serendipity_admin_image_selector.php?serendipity[adminModule]=images&amp;serendipity[adminAction]=imgedit&amp;serendipity[fid]={$file.id}">{$CONST.EDIT}</a>
{/if}
</section>
<section class="media_file_keywords">
<h4>{$CONST.MEDIA_KEYWORDS}</h4>
<ul class="plainList">
{foreach from=$file.base_keywords key="keyword_row" item="keyword_cells"}
{foreach from=$keyword_cells key="keyword_cell" item="keyword"}
{if $keyword.name}
<li><input id="mediaKeyword{$keyword.name}{$mediakey}" name="serendipity[mediaKeywords][{$mediakey}][{$keyword.name}]" type="checkbox" value="true"{if $keyword.selected} checked="checked"{/if}>
<label for="mediaKeyword{$keyword.name}{$mediakey}">{$keyword.name}</label></li>
{/if}
{/foreach}
{/foreach}
</ul>
</section>
<section class="media_file_metadata">
<h4>EXIF/IPTC/XMP</h4>
<dl>
{foreach from=$file.metadata key="meta_type" item="meta_data"}
<dt>{$meta_type}</dt>
{if is_array($meta_data)}
{foreach from=$meta_data key="meta_name" item="meta_value"}
<dd class="meta_name">{$meta_name}!</dd>
<dd class="meta_value">{if is_array($meta_value)}<pre>{$meta_value|@print_r}</pre>{else}{$meta_value|@formatTime:DATE_FORMAT_SHORT:false:$meta_name}{/if}</dd>
{/foreach}
{else}
<dd>{$meta_data|@formatTime:DATE_FORMAT_SHORT:false:$meta_type}</dd>
{/if}
{/foreach}
</dl>
</section>
{if $file.references}
<section class="media_file_referer">
<h4>{$CONST.REFERER}</h4>
<ul>
{foreach from=$file.references item="ref"}
<li>({$ref.name|@escape}) <a rel="nofollow" href="{$ref.link|@escape}">{$ref.link|@default:$CONST.NONE|@escape}</a></li>
{/foreach}
</ul>
</section>
{/if}
</article>
{/if}
{/foreach}

View File

@ -0,0 +1,165 @@
{* HTML5: Yes *}
{* jQuery: No *}
<script src="{serendipity_getFile file='admin/admin_scripts.js'}"></script>
<h2>{$CONST.FIND_MEDIA}</h2>
<form method="get" action="?">
{$media.token}
{$media.form_hidden}
<fieldset>
<legend><span>{$CONST.FILTERS}</span></legend>
<a id="toggle_filters" class="block_level" href="#" onclick="showFilters(); return false">{$CONST.FILTERS}</a>
<div id="media_filter" class="clearfix">
<div id="media_filter_path" class="form_select">
<label for="serendipity_only_path">{$CONST.FILTER_DIRECTORY}</label>
<select id="serendipity_only_path" name="serendipity[only_path]">
<option value="">{if NOT $media.limit_path}{$CONST.ALL_DIRECTORIES}{else}{$media.blimit_path}{/if}</option>
{foreach from=$media.paths item="folder"}
<option {if ($media.only_path == $media.limit_path|cat:$folder.relpath)}selected="selected"{/if} value="{$folder.relpath}">{'&nbsp;'|str_repeat:($folder.depth*2)}{$folder.name}</option>
{/foreach}
</select>
</div>
<div id="media_filter_file" class="form_field">
<label for="serendipity_only_filename">{$CONST.SORT_ORDER_NAME}</label>
<input id="serendipity_only_filename" name="serendipity[only_filename]" type="text" value="{$media.only_filename|@escape}">
</div>
</div>
<div id="moreFilter" class="serendipity_pluginlist_section" style="height: auto; display: none">
<div class="form_field">
<label for="keyword_input">{$CONST.MEDIA_KEYWORDS}</label>
<input id="keyword_input" name="serendipity[keywords]" type="text" value="{$media.keywords_selected|@escape}">
</div>
<div id="keyword_list" class="clearfix">
{foreach from=$media.keywords item="keyword"}
<a href="#" onclick="AddKeyword('{$keyword|@escape}'); return false">{$keyword|@escape}</a>
{/foreach}
</div>
{foreach from=$media.sort_order item="so_val" key="so_key"}
{if $so_val.type == 'date' || $so_val.type == 'intrange'}
<fieldset>
<legend class="visuallyhidden"><span>Sort</span></legend> {* i18n *}
{else}
<div class="form_{if $so_val.type == 'authors'}select{else}field{/if}">
<label for="serendipity_filter_{$so_key}">{$so_val.desc}</label>
{/if}
{if $so_val.type == 'date'}
{if $media.filter[$so_key].from != '' OR $media.filter[$so_key].to != ''}{assign var="show_filter" value=$media.filter[$so_key]}{/if}
<div class="form_field">
{* Core might need to be adapted to input[type=date] *}
<label for="serendipity_filter_{$so_key}_from" class="visuallyhidden">From</label> {* i18n *}
<input id="serendipity_filter_{$so_key}_from" name="serendipity[filter][{$so_key}][from]" type="date" value="{$media.filter[$so_key].from|@escape}">
-
<label for="serendipity_filter_{$so_key}_to" class="visuallyhidden">To</label> {* i18n *}
<input id="serendipity_filter_{$so_key}_to" name="serendipity[filter][{$so_key}][to]" type="date" value="{$media.filter[$so_key].to|@escape}">
{* <span class="input_hint">(DD.MM.YYYY | YYYY-MM-DD | MM/DD/YYYY)</span> *}
</div>
{elseif $so_val.type == 'intrange'}
{if $media.filter[$so_key].from != '' OR $media.filter[$so_key].to != ''}{assign var="show_filter" value=$media.filter[$so_key]}{/if}
<div class="form_field">
{* Could also use input[type=range]; unsure if that's actually useful (yet) *}
<label for="serendipity_filter_{$so_key}_from" class="visuallyhidden">From</label> {* i18n *}
<input id="serendipity_filter_{$so_key}_from" name="serendipity[filter][{$so_key}][from]" type="text" value="{$media.filter[$so_key].from|@escape}">
-
<label for="serendipity_filter_{$so_key}_to" class="visuallyhidden">To</label> {* i18n *}
<input id="serendipity_filter_{$so_key}_to" name="serendipity[filter][{$so_key}][to]" type="text" value="{$media.filter[$so_key].to|@escape}">
</div>
{elseif $so_val.type == 'authors'}
{if $media.filter[$so_key] != ''}{assign var="show_filter" value=$media.filter[$so_key]}{/if}
<select id="serendipity_filter_{$so_key}" name="serendipity[filter][{$so_key}]">
<option value="">{$CONST.ALL_AUTHORS}</option>
{foreach from=$media.authors item="media_author"}
<option value="{$media_author.authorid}" {if $media.filter[$so_key] == $media_author.authorid}selected="selected"{/if}>{$media_author.realname|@escape}</option>
{/foreach}
</select>
{else}
{if $media.filter[$so_key] != ''}{assign var="show_filter" value=$media.filter[$so_key]}{/if}
<input id="serendipity_filter_{$so_key}" name="serendipity[filter][{$so_key}]" type="text" value="{$media.filter[$so_key]|@escape}">
{/if}
{if $so_val.type == 'date' || $so_val.type == 'intrange'}
</fieldset>
{else}
</div>
{/if}
{/foreach}
</div>
</fieldset>
{if $media.keywords_selected != '' OR $show_filter}
<script>showFilters();</script>
{/if}
<fieldset>
<legend><span>{$CONST.SORT_ORDER}</span></legend>
<div class="clearfix">
<div class="form_select">
<label for="serendipity_sortorder_order">{$CONST.SORT_BY}</label>
<select id="serendipity_sortorder_order" name="serendipity[sortorder][order]">
{foreach from=$media.sort_order item="so_val" key="so_key"}
<option value="{$so_key}" {if $media.sortorder.order == $so_key}selected="selected"{/if}>{$so_val.desc}</option>
{/foreach}
</select>
</div>
<div class="form_select">
<label for="serendipity_sortorder_ordermode">{$CONST.SORT_ORDER}</label>
<select id="serendipity_sortorder_ordermode" name="serendipity[sortorder][ordermode]">
<option value="DESC" {if $media.sortorder.ordermode == 'DESC'}selected="selected"{/if}>{$CONST.SORT_ORDER_DESC}</option>
<option value="ASC" {if $media.sortorder.ordermode == 'ASC'}selected="selected"{/if}>{$CONST.SORT_ORDER_ASC}</option>
</select>
</div>
<div class="form_select">
<label for="serendipity_sortorder_perpage">{$CONST.FILES_PER_PAGE}</label>
<select id="serendipity_sortorder_perpage" name="serendipity[sortorder][perpage]">
{foreach from=$media.sort_row_interval item="so_val"}
<option value="{$so_val}" {if $media.perPage == $so_val}selected="selected"{/if}>{$so_val}</option>
{/foreach}
</select>
</div>
</div>
</fieldset>
{if $media.show_upload}
<input type="button" value="{$CONST.ADD_MEDIA|@escape}" onclick="location.href='{$media.url}&amp;serendipity[adminAction]=addSelect&amp;serendipity[only_path]={$media.only_path|escape:url}'; return false">
{/if}
<input name="go" type="submit" value="{$CONST.GO}">
</form>
{if $media.nr_files < 1}
<span class="msg_notice">{$CONST.NO_IMAGES_FOUND}</span>
{else}
{if $smarty.get.serendipity.adminModule == 'media'}
<form id="formMultiDelete" name="formMultiDelete" action="?" method="post">
{$media.token}
<input name="serendipity[action]" type="hidden" value="admin">
<input name="serendipity[adminModule]" type="hidden" value="media">
<input name="serendipity[adminAction]" type="hidden" value="multidelete">
{/if}
<div class="clearfix media_pane">
<ul class="clearfix pagination plainList">
<li>{if $media.page != 1 AND $media.page <= $media.pages}<a href="{$media.linkPrevious}">{$CONST.PREVIOUS}</a>{else}<span class="visuallyhidden">{$CONST.NO_ENTRIES_TO_PRINT}</span>{/if}</li>
<li>{if $media.page != $media.pages}<a href="{$media.linkNext}">{$CONST.NEXT}</a>{else}<span class="visuallyhidden">{$CONST.NO_ENTRIES_TO_PRINT}</span>{/if}</li>
</ul>
{$MEDIA_ITEMS}
{* Should be cloned using JS *}
<ul class="clearfix pagination plainList">
<li>{if $media.page != 1 AND $media.page <= $media.pages}<a href="{$media.linkPrevious}">{$CONST.PREVIOUS}</a>{else}<span class="visuallyhidden">{$CONST.NO_ENTRIES_TO_PRINT}</span>{/if}</li>
<li>{if $media.page != $media.pages}<a href="{$media.linkNext}">{$CONST.NEXT}</a>{else}<span class="visuallyhidden">{$CONST.NO_ENTRIES_TO_PRINT}</span>{/if}</li>
</ul>
</div>
{if $smarty.get.serendipity.adminModule == 'media'}
<div class="form_buttons">
<input name="toggle" type="button" value="{$CONST.INVERT_SELECTIONS}" onclick="invertSelection()">
<input name="toggle" type="submit" value="{$CONST.DELETE_SELECTED_ENTRIES}">
</div>
</form>
{/if}
{/if}

View File

@ -0,0 +1,21 @@
{* HTML5: Yes *}
{* jQuery: NN *}
{if $media.is_edit}
<form id="mediaPropertyForm" action="?" method="POST">
<div>
{$media.token}
<input name="serendipity[action]" type="hidden" value="admin">
<input name="serendipity[adminModule]" type="hidden" value="images">
<input name="serendipity[adminAction]" type="hidden" value="add">
<input name="serendipity[adminSubAction]" type="hidden" value="properties">
{$media.editform_hidden}
{/if}
{$MEDIA_ITEMS}
{if $media.is_edit}
<input name="submit" type="submit" value="{$CONST.GO}">
</div>
</form>
{/if}

View File

@ -0,0 +1,91 @@
{* HTML5: Yes *}
{* jQuery: NN *}
<html>
<head>
<meta charset="{$CONST.LANG_CHARSET}">
<title>{$media.file.props.base_property.TITLE|@default:$media.file.realname}</title>
<link rel="stylesheet" href="{$media.css}">
<link rel="stylesheet" href="{$media.css_front}">
</head>
<body id="{$media.body_id}">
{if $perm_denied}
<span class="msg_error">{$CONST.PERM_DENIED}</span>
{else}
<div class="clearfix">
<h2>{$media.file.realname}</h2>
<h3><a href="#">{$media.file.props.base_property.TITLE|@default:''}</a></h3>
<div class="media_show">
{if $media.file.is_image}
<img src="{$media.file.full_file}" alt="{$media.file.realname}">
{else}
<a href="{$media.file.full_file}">{$media.file.realname} ({$media.file.displaymime})</a>
{/if}
<a href="{$media.from|@escape}" title="{$CONST.BACK_TO_BLOG}">{$CONST.BACK_TO_BLOG}</a>
</div>
{if $media.file.base_property}
<div class="media_props_base">
<h4>{$CONST.MEDIA_PROP}</h4>
<dl>
{foreach from=$media.file.base_property key="prop_fieldname" item="prop_content"}
{if $prop_content.val}
<dt>{$prop_content.label}</dt>
<dd>{$prop_content.val|@escape}</dd>
{/if}
{/foreach}
</dl>
</div>
{/if}
{if $media.file.props.base_keyword}
<div class="media_props_keywords">
<h4>{$CONST.MEDIA_KEYWORDS}</h4>
<div class="media_keywords">
{foreach from=$media.file.props.base_keyword key="prop_fieldname" item="prop_content"}
<span>{$prop_fieldname|@escape}</span>
{/foreach}
<div>
</div>
{/if}
{if $media.file.props.base_metadata}
<div class="media_props_metadata">
<h4>EXIF/IPTC/XMP</h4>
<dl>
{foreach from=$media.file.props.base_metadata key="meta_type" item="meta_data"}
<dt>{$meta_type}</dt>
{if is_array($meta_data)}
{foreach from=$meta_data key="meta_name" item="meta_value"}
<dd class="meta_name">{$meta_name}</dd>
<dd class="meta_value">
{if is_array($meta_value)}
<pre>{$meta_value|@print_r}</pre>
{else}
<span>{$meta_value|@formatTime:DATE_FORMAT_SHORT:false:$meta_name}</span>
{/if}</dd>
{/foreach}
{else}
<dd>{$meta_data|@formatTime:DATE_FORMAT_SHORT:false:$meta_type}</dd>
{/if}
{/foreach}
</dl>
</div>
{/if}
{if $media.file.references}
<div class="media_props_filerefs">
<h4>{$CONST.REFERER}</h4>
<ul>
{foreach from=$media.file.references item="ref"}
<li>({$ref.name|@escape}) <a rel="nofollow" href="{$ref.link|@escape}">{$ref.link|@default:$CONST.NONE|@escape}</a></li>
{/foreach}
</ul>
</div>
{/if}
</div>
{/if}
</body>
</html>

View File

@ -0,0 +1,259 @@
{* HTML5: No *}
{* jQuery: No *}
<div class="image_add_form">{$CONST.ADD_MEDIA_BLAHBLAH}</div>
<script>
// Function prototype inspired by http://molily.de/javascript-nodelist
function showNodes(n) {ldelim}
var html;
html = '<!--nodeset--><li>';
switch (n.nodeType) {ldelim}
case 1:
html += 'Type is <em>' + n.nodeName + '<\/em>';
if (n.hasChildNodes()) {ldelim}
ausgabe += ' - childNodes: ' + n.childNodes.length;
{rdelim}
break;
case 3:
var nval = n.nodeValue.replace(/</g, '&lt;').replace(/\n/g, '\\n');
html += 'Content: <strong>' + nval + '<\/strong>';
break;
case 8:
var nval = n.nodeValue.replace(/</g, '&lt;').replace(/\n/g, '\\n');
html += 'Hidden: <em>' + nval + '<\/em>';
break;
default:
html += 'Type is ' + n.nodeType + ', Content is <strong>' + n.nodeValue + '<\/strong>';
{rdelim}
if (n.hasChildNodes()) {ldelim}
html += '\n<ol>\n';
for (i=0; i < n.childNodes.length; i++) {ldelim}
j = n.childNodes[i];
html += showNodes(j);
{rdelim}
html += '</ol>\n';
{rdelim}
html += '</li>\n';
return html;
{rdelim}
function getfilename(value) {ldelim}
re = /^.+[\/\\]+?(.+)$/;
return value.replace(re, "$1");
{rdelim}
isFileUpload = true;
function hideForeign() {ldelim}
document.getElementById('foreign_upload').style.display = 'none';
document.getElementById('imageurl').value = '';
isFileUpload = false;
{rdelim}
var fieldcount = 1;
function addField() {ldelim}
fieldcount++;
fields = document.getElementById('upload_template').cloneNode(true);
fields.id = 'upload_form_' + fieldcount;
fields.style.display = 'block';
// Get the DOM outline be uncommenting this:
//document.getElementById('debug').innerHTML = showNodes(fields);
// garvin: This gets a bit weird. Opera, Mozilla and IE all have their own numbering.
// We cannot operate on "ID" basis, since a unique ID is not yet set before instancing.
if (fields.childNodes[0].nodeValue == null) {ldelim}
// This is Internet Explorer, it does not have a linebreak as first element.
userfile = fields.childNodes[0].childNodes[0].childNodes[0].childNodes[1].childNodes[0];
targetfilename = fields.childNodes[0].childNodes[0].childNodes[2].childNodes[1].childNodes[0];
targetdir = fields.childNodes[0].childNodes[0].childNodes[3].childNodes[1].childNodes[0];
columncount = fields.childNodes[1].childNodes[0];
{rdelim} else {ldelim}
// We have a browser which has \n's as their own nodes. Don't ask me. Now let's check if it's Opera or Mozilla.
if (fields.childNodes[1].childNodes[0].nodeValue == null) {ldelim}
// This is Opera.
userfile = fields.childNodes[1].childNodes[0].childNodes[0].childNodes[1].childNodes[0];
targetfilename = fields.childNodes[1].childNodes[0].childNodes[2].childNodes[1].childNodes[0];
targetdir = fields.childNodes[1].childNodes[0].childNodes[3].childNodes[1].childNodes[0];
columncount = fields.childNodes[3].childNodes[0];
{rdelim} else if (fields.childNodes[1].childNodes[1].childNodes[0].childNodes[3] == null) {ldelim}
// This is Safari.
userfile = fields.childNodes[1].childNodes[1].childNodes[0].childNodes[1].childNodes[0];
targetfilename = fields.childNodes[1].childNodes[1].childNodes[2].childNodes[1].childNodes[0];
targetdir = fields.childNodes[1].childNodes[1].childNodes[3].childNodes[1].childNodes[0];
columncount = fields.childNodes[3].childNodes[0];
{rdelim} else {ldelim}
// This is Mozilla.
userfile = fields.childNodes[1].childNodes[1].childNodes[0].childNodes[3].childNodes[0];
targetfilename = fields.childNodes[1].childNodes[1].childNodes[4].childNodes[3].childNodes[0];
targetdir = fields.childNodes[1].childNodes[1].childNodes[6].childNodes[3].childNodes[0];
columncount = fields.childNodes[3].childNodes[0];
{rdelim}
{rdelim}
userfile.id = 'userfile_' + fieldcount;
userfile.name = 'serendipity[userfile][' + fieldcount + ']';
targetfilename.id = 'target_filename_' + fieldcount;
targetfilename.name = 'serendipity[target_filename][' + fieldcount + ']';
targetdir.id = 'target_directory_' + fieldcount;
targetdir.name = 'serendipity[target_directory][' + fieldcount + ']';
columncount.id = 'column_count_' + fieldcount;
columncount.name = 'serendipity[column_count][' + fieldcount + ']';
iNode = document.getElementById('upload_form');
iNode.parentNode.insertBefore(fields, iNode);
document.getElementById(targetdir.id).selectedIndex = document.getElementById('target_directory_' + (fieldcount - 1)).selectedIndex;
{rdelim}
var inputStorage = new Array();
function checkInputs() {ldelim}
for (i = 1; i <= fieldcount; i++) {ldelim}
if (!inputStorage[i]) {ldelim}
fillInput(i, i);
{rdelim} else if (inputStorage[i] == document.getElementById('target_filename_' + i).value) {ldelim}
fillInput(i, i);
{rdelim}
{rdelim}
{rdelim}
function debugFields() {ldelim}
for (i = 1; i <= fieldcount; i++) {ldelim}
debugField('target_filename_' + i);
debugField('userfile_' + i);
{rdelim}
{rdelim}
function rememberOptions() {ldelim}
td = document.getElementById('target_directory_2');
td_val = td.options[td.selectedIndex].value;
SetCookie("addmedia_directory", td_val);
{rdelim}
function debugField(id) {ldelim}
alert(id + ': ' + document.getElementById(id).value);
{rdelim}
function fillInput(source, target) {ldelim}
useDuplicate = false;
// First field is a special value for foreign URLs instead of uploaded files
if (source == 1 && document.getElementById('imageurl').value != "") {ldelim}
sourceval = getfilename(document.getElementById('imageurl').value);
useDuplicate = true;
{rdelim} else {ldelim}
sourceval = getfilename(document.getElementById('userfile_' + source).value);
{rdelim}
if (sourceval.length > 0) {ldelim}
document.getElementById('target_filename_' + target).value = sourceval;
inputStorage[target] = sourceval;
{rdelim}
// Display filename in duplicate form as well!
if (useDuplicate) {ldelim}
tkey = target + 1;
if (!inputStorage[tkey] || inputStorage[tkey] == document.getElementById('target_filename_' + tkey).value) {ldelim}
document.getElementById('target_filename_' + (target+1)).value = sourceval;
inputStorage[target + 1] = '~~~';
{rdelim}
{rdelim}
{rdelim}
</script>
<form id="uploadform" action="?" method="POST" enctype="multipart/form-data" onsubmit="rememberOptions()">
<div>
{if $media.max_file_size}
<input name="MAX_FILE_SIZE" type="hidden" value="{$max_file_size}">
{/if}
{$media.token}
<input name="serendipity[action]" type="hidden" value="admin">
<input name="serendipity[adminModule]" type="hidden" value="images">
<input name="serendipity[adminAction]" type="hidden" value="add">
{$media.form_hidden}
<div id="foreign_upload" class="image_add_foreign">
<div class="form_field">
<label for="imageurl">{$CONST.ENTER_MEDIA_URL}</label>
<input id="imageurl" name="serendipity[imageurl]" type="text" onchange="checkInputs()" value="">
</div>
<div class="form_select">
<label for="serendipity_imageimporttype">{$CONST.ENTER_MEDIA_URL_METHOD}</label>
<select name="serendipity[imageimporttype]">
<option value="image">{$CONST.FETCH_METHOD_IMAGE}</option>
<option value="hotlink">{$CONST.FETCH_METHOD_HOTLINK}</option>
</select>
</div>
<span class="standout"> {$CONST.WORD_OR} </span>
</div>
<!-- WARNING: Do not change spacing or breaks below. If you do, the JavaScript childNodes need to be edited. Newlines count as nodes! -->
<div id="upload_template">
<table style="margin-top: 35px" id="upload_table" class="image_add_local">
<tr>
<td nowrap='nowrap'>{$CONST.ENTER_MEDIA_UPLOAD}</td>
<td><input class="input_file" id="userfile_1" name="serendipity[userfile][1]"
onchange="checkInputs();"
type="file"></td>
</tr>
<tr>
<td align="center" colspan="2"><br></td>
</tr>
<tr>
<td>{$CONST.SAVE_FILE_AS}</td>
<td><input class="input_textbox" type="text" id="target_filename_1" name="serendipity[target_filename][1]" value="" size="40"> <span class="input-desc image-upload">{$CONST.PLAIN_ASCII_NAMES}</span></td>
</tr>
<tr>
<td>{$CONST.STORE_IN_DIRECTORY}</td>
<td><select id="target_directory_1" name="serendipity[target_directory][1]">
<option value="">{$CONST.BASE_DIRECTORY}</option>
{foreach from=$media.folders item="folder"}
<option {if $media.only_path == $folder.relpath}selected="selected"{/if} value="{$folder.relpath}">{'&nbsp;'|@str_repeat:($folder.depth*2)} {$folder.name}</option>
{/foreach}
</select>
</td>
</tr>
</table>
<div id="ccounter"><input type="hidden" name="serendipity[column_count][1]" id="column_count_1" value="true"></div>
</div>
<div id="debug">
</div>
<script>
document.getElementById('upload_template').style.display = 'none';
document.write('<span id="upload_form"><' + '/span>');
addField();
</script>
{serendipity_hookPlugin hook="backend_image_addform" hookAll=true}
<div class="form_buttons">
<script>document.write('<input type="button" value="{$CONST.IMAGE_MORE_INPUT}" onclick="hideForeign(); addField()">');</script>
<input id="all_authors" name="serendipity[all_authors]" type="hidden" value="true" checked="checked">
</div>
<div class="form_buttons">
<input type="submit" value="{$CONST.GO}" onclick="checkInputs();">
<span class="standout"> {$CONST.WORD_OR} </span>
<input name="go_properties" type="submit" value="{$CONST.GO_ADD_PROPERTIES|@escape}" onclick="checkInputs();">
</div>
</div>
</form>
<div class="image_add_note">{$CONST.ADD_MEDIA_BLAHBLAH_NOTE}</div>

View File

@ -0,0 +1,34 @@
.pluginmanager_side {
vertical-align: top;
width: 33%;
}
.pluginmanager_container {
background: transparent;
border: 1px solid #ddd;
height: 98%;
margin: 0;
min-height: 12.5em;
padding: 5px;
}
.pluginmanager_container li {
margin: 0 0 5px;
padding: 5px;
position: relative;
}
.pluginmanager_item_even,
.pluginmanager_item_uneven {
background: #eee;
border: 1px solid #ddd;
}
.pluginmanager_place,
.pluginmanager_ownership,
.pluginmanager_move { text-align: right; }
.pluginmanager_grablet {
cursor: move;
display: block;
}

View File

@ -0,0 +1,877 @@
/* normalize.css v1.0.1 | MIT License | git.io/normalize */
article, aside, details,
figcaption, figure, footer,
header, hgroup, nav, section,
summary { display: block; }
audio, canvas,
video {
display: inline-block;
*display: inline;
*zoom: 1;
}
audio:not([controls]) {
display: none;
height: 0;
}
[hidden] { display: none; }
html {
font-size: 100%;
-webkit-text-size-adjust: 100%;
-ms-text-size-adjust: 100%;
}
a:focus { outline: thin dotted; }
a:active,
a:hover { outline: 0; }
abbr[title] { border-bottom: 1px dotted; }
b, strong { font-weight: bold; }
blockquote { margin: 1em 40px; }
dfn { font-style: italic; }
mark {
background: #ff0;
color: #000;
}
code, kbd,
pre, samp {
font-family: monospace, serif;
_font-family: 'courier new', monospace;
font-size: 1em;
}
pre {
white-space: pre;
white-space: pre-wrap;
word-wrap: break-word;
}
small { font-size: 80%; }
sub, sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline;
}
sup { top: -0.5em; }
sub { bottom: -0.25em; }
menu, ol,
ul { padding: 0 0 0 40px; }
nav ul,
nav ol {
list-style: none;
list-style-image: none;
}
img {
border: 0;
-ms-interpolation-mode: bicubic;
}
svg:not(:root) { overflow: hidden; }
figure,
form { margin: 0; }
fieldset {
border: 1px solid #ccc;
margin: 0 2px;
padding: 0.35em 0.625em 0.75em;
}
legend {
border: 0;
padding: 0;
white-space: normal;
*margin-left: -7px;
}
button, input,
select, textarea {
font-size: 100%;
margin: 0;
vertical-align: baseline;
*vertical-align: middle;
}
button, input { line-height: normal; }
button,
html input[type="button"],
input[type="reset"],
input[type="submit"] {
-webkit-appearance: button;
cursor: pointer;
*overflow: visible;
}
button[disabled],
input[disabled] { cursor: default; }
input[type="checkbox"],
input[type="radio"] {
box-sizing: border-box;
padding: 0;
*height: 13px;
*width: 13px;
}
input[type="search"] {
-webkit-appearance: textfield;
-moz-box-sizing: content-box;
-webkit-box-sizing: content-box;
box-sizing: content-box;
}
input[type="search"]::-webkit-search-cancel-button,
input[type="search"]::-webkit-search-decoration { -webkit-appearance: none; }
button::-moz-focus-inner,
input::-moz-focus-inner {
border: 0;
padding: 0;
}
textarea {
overflow: auto;
vertical-align: top;
}
table {
border-collapse: collapse;
border-spacing: 0;
}
/* Base styles */
html, button,
input, select,
textarea {
background: #fcfcfc;
color: #222;
font-family: Helvetica, Arial, sans-serif;
}
body {
font-size: 1em;
line-height: 1.5;
margin: 0;
}
/* These selection declarations have to be separate. */
::-moz-selection {
background: #3a4b6f;
color: #fff;
text-shadow: none;
}
::selection {
background: #3a4b6f;
color: #fff;
text-shadow: none;
}
hr {
display: block;
height: 1px;
border: 0;
border-top: 1px solid #ccc;
margin: 1.5em 0;
padding: 0;
}
img { vertical-align: middle; }
/* Responsive media objects
http://unstoppablerobotninja.com/entry/fluid-images */
embed, object,
audio, video,
img { max-width: 100%; }
video,
img { height: auto; }
fieldset {
border: 0;
margin: 0;
padding: 0;
}
textarea { resize: vertical; }
/* Automagic quotes, http://html5doctor.com/blockquote-q-cite/ */
q { quotes: '“' '”' '' ''; }
:lang(de) q { quotes: '„' '“' '' ''; }
blockquote p { quotes: '“' '”'; }
blockquote p:before {
content: '';
content: no-open-quote;
}
blockquote p:after {
content: '';
content: no-close-quote;
}
blockquote p:first-child:before {
content: '“';
content: open-quote;
}
blockquote p:last-child:after {
content: '”';
content: close-quote;
}
:lang(de) blockquote p,
blockquote:lang(de) p { quotes: '„' '“'; }
:lang(de) blockquote p:before,
blockquote:lang(de) p:before {
content: '';
content: no-open-quote;
}
:lang(de) blockquote p:after,
blockquote:lang(de) p:after {
content: '';
content: no-close-quote;
}
:lang(de) blockquote p:first-child:before,
blockquote:lang(de) p:first-child:before {
content: '„';
content: open-quote;
}
:lang(de) blockquote p:last-child:after,
blockquote:lang(de) p:last-child:after {
content: '“';
content: close-quote;
}
blockquote > cite,
blockquote + cite { display: block; }
blockquote > cite:before,
blockquote + cite:before { content: " "; }
blockquote > cite { margin: 1.5em 0; }
blockquote + cite { margin: 0 0 1.5em 3em; }
dt { font-weight: bold; }
dd { margin: 0; }
caption, th { text-align: left; }
li ul, li ol { margin: 0; }
pre code { font-size: 1em; }
p {
-webkit-hyphens: auto;
-moz-hyphens: auto;
-ms-hyphens: auto;
hyphens: auto;
}
p code, p samp,
p kbd {
-webkit-hyphens: none;
-moz-hyphens: none;
-ms-hypens: none;
hyphens: none;
}
nav ul,
nav ol { padding: 0; }
/* CSS helper classes for various purposes */
/* Image replacement */
.ir {
background-color: transparent;
border: 0;
overflow: hidden;
*text-indent: -9999px;
}
.ir:before {
content: "";
display: block;
width: 0;
height: 100%;
}
/* Hide from both screenreaders and browsers */
.hidden {
display: none !important;
visibility: hidden;
}
/* Hide only visually, but have it available for screenreaders */
.visuallyhidden {
border: 0;
clip: rect(0 0 0 0);
height: 1px;
margin: -1px;
overflow: hidden;
padding: 0;
position: absolute;
width: 1px;
}
/* Extends the .visuallyhidden class to allow the element
to be focusable when navigated to via the keyboard */
.visuallyhidden.focusable:active,
.visuallyhidden.focusable:focus {
clip: auto;
height: auto;
margin: 0;
overflow: visible;
position: static;
width: auto;
}
/* Hide visually and from screenreaders, but maintain layout */
.invisible { visibility: hidden; }
/* Clearfix: contain floats */
.clearfix:before,
.clearfix:after {
content: " ";
display: table;
}
.clearfix:after { clear: both; }
.clearfix { *zoom: 1; }
/* Forms | forked from formalize.me */
.input_full_wrap {
display: block;
padding-right: 8px;
}
input[type="radio"],
input[type="checkbox"] {
position: relative;
vertical-align: top;
top: 5px;
top: 0 \0;
*top: -5px;
}
button:focus, input:focus,
select:focus, textarea:focus {
-webkit-box-shadow: #0066ff 0 0 5px 0;
-moz-box-shadow: #0066ff 0 0 5px 0;
box-shadow: #0066ff 0 0 5px 0;
z-index: 1;
}
input[type="file"]:focus, input[type="file"]:active,
input[type="radio"]:focus, input[type="radio"]:active,
input[type="checkbox"]:focus, input[type="checkbox"]:active {
-webkit-box-shadow: none;
-moz-box-shadow: none;
box-shadow: none;
}
button, input[type="button"],
input[type="reset"],
input[type="submit"] {
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
-ms-border-radius: 4px;
-o-border-radius: 4px;
border-radius: 4px;
-webkit-background-clip: padding;
-moz-background-clip: padding;
background-clip: padding-box;
background: #ddd;
background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #dddddd));
background-image: -webkit-linear-gradient(#ffffff, #dddddd);
background-image: -moz-linear-gradient(#ffffff, #dddddd);
background-image: -o-linear-gradient(#ffffff, #dddddd);
background-image: linear-gradient(#ffffff, #dddddd);
border: 1px solid;
border-color: #ddd #bbb #999;
color: #000;
outline: 0;
padding: 3px 10px;
text-shadow: #fff 0 1px 1px;
width: auto;
*padding-top: 2px;
*padding-bottom: 0;
}
button:hover, input[type="button"]:hover,
input[type="reset"]:hover,
input[type="submit"]:hover {
background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(1px, #eeeeee), color-stop(100%, #cccccc));
background-image: -webkit-linear-gradient(#ffffff, #eeeeee 1px, #cccccc);
background-image: -moz-linear-gradient(#ffffff, #eeeeee 1px, #cccccc);
background-image: -o-linear-gradient(#ffffff, #eeeeee 1px, #cccccc);
background-image: linear-gradient(#ffffff, #eeeeee 1px, #cccccc);
}
button:active, input[type="button"]:active,
input[type="reset"]:active,
input[type="submit"]:active {
background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(1px, #dddddd), color-stop(100%, #eeeeee));
background-image: -webkit-linear-gradient(#ffffff, #dddddd 1px, #eeeeee);
background-image: -moz-linear-gradient(#ffffff, #dddddd 1px, #eeeeee);
background-image: -o-linear-gradient(#ffffff, #dddddd 1px, #eeeeee);
background-image: linear-gradient(#ffffff, #dddddd 1px, #eeeeee);
-webkit-box-shadow: inset rgba(0, 0, 0, 0.25) 0 1px 2px 0;
-moz-box-shadow: inset rgba(0, 0, 0, 0.25) 0 1px 2px 0;
box-shadow: inset rgba(0, 0, 0, 0.25) 0 1px 2px 0;
border-color: #999 #bbb #ddd;
}
button {
*padding-top: 1px;
*padding-bottom: 1px;
}
input[type="date"], input[type="datetime"],
input[type="datetime-local"], input[type="month"],
input[type="number"], input[type="password"],
input[type="time"], input[type="week"],
textarea, select, input[type="email"],
input[type="search"], input[type="tel"],
input[type="text"], input[type="url"] {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
-webkit-background-clip: padding;
-moz-background-clip: padding;
background-clip: padding-box;
-webkit-border-radius: 0;
-moz-border-radius: 0;
-ms-border-radius: 0;
-o-border-radius: 0;
border-radius: 0;
-webkit-appearance: none;
background-color: #fafafa;
border: 1px solid;
border-color: #c1c1c1 #c1c1c1 #e1e1e1;
color: #222;
outline: 0;
padding: 2px 3px;
text-align: left;
height: 1.8em;
*padding-top: 2px;
*padding-bottom: 1px;
*height: auto;
}
input[type="date"][disabled], input[type="datetime"][disabled],
input[type="datetime-local"][disabled], input[type="month"][disabled],
input[type="number"][disabled], input[type="password"][disabled],
input[type="time"][disabled], input[type="week"][disabled],
textarea[disabled], select[disabled], input[type="email"][disabled],
input[type="search"][disabled], input[type="tel"][disabled],
input[type="text"][disabled], input[type="url"][disabled] { background-color: #eee; }
button[disabled], input[disabled],
select[disabled], select[disabled] option,
select[disabled] optgroup, textarea[disabled] {
-webkit-box-shadow: none;
-moz-box-shadow: none;
box-shadow: none;
-moz-user-select: -moz-none;
-webkit-user-select: none;
user-select: none;
color: #888;
cursor: default;
}
/* Separate rule for Firefox.
Separate rule for IE, too.
Cannot stack with WebKit's. */
::-webkit-input-placeholder { color: #888; }
input:-moz-placeholder,
textarea:-moz-placeholder { color: #888; }
input.placeholder_text,
textarea.placeholder_text { color: #888; }
:invalid {
-webkit-box-shadow: none;
-moz-box-shadow: none;
box-shadow: none;
}
textarea, select[size],
select[multiple] { height: auto; }
@media (-webkit-min-device-pixel-ratio: 0) {
select {
background-image: url("data:image/gif;base64,R0lGODlhDQAEAIAAAAAAAP8A/yH5BAEHAAEALAAAAAANAAQAAAILhA+hG5jMDpxvhgIAOw==");
background-repeat: no-repeat;
background-position: right center;
padding-right: 20px;
}
select[size],
select[multiple] {
background-image: none;
padding: 0;
}
}
textarea {
min-height: 40px;
overflow: auto;
resize: vertical;
width: 100%;
}
optgroup {
color: #222;
font-style: normal;
font-weight: normal;
}
/* Backend-specific form stuff */
label, .standout,
legend > span { font-weight: bold; }
.block_level,
.form_multiselect label,
label > span { display: block; }
label > span,
input[type=checkbox] + label,
input[type=radio] + label,
.form_check label { font-weight: normal; }
input[type=checkbox] { margin-right: .4em; }
.form_radio {
float: left;
margin-right: 1em;
}
.form_buttons {
margin-top: 1.5em;
margin-bottom: 1.5em;
}
.form_field, .form_area,
.form_check, .form_radio,
.form_select, .form_multiselect {
margin-top: .75em;
margin-bottom: .75em;
}
/* Styles common to all resolutions */
/* Color scheme:
-------------
Dark blue: #25253d Mid blue: #3e5f81
Lite blue: #ccdee7 Yellow: #ffbf00
Off black: #222 Off white: #fcfcfc
*/
html { background: #ccdee7; }
body {
background: #fcfcfc;
font-size: 0.875em;
}
a, a:visited { color: #3a4b6f; }
a:hover, a:focus { color: #d06604; }
h1 {
font-size: 1.71429em;
line-height: 1.75em;
margin: 0.875em 0;
}
h2 {
font-size: 1.42857em;
line-height: 1.05em;
margin: 1.05em 0;
}
h3 {
font-size: 1.28571em;
line-height: 1.16667em;
margin: 1.16667em 0;
}
h4 {
font-size: 1.14286em;
line-height: 1.3125em;
margin: 1.3125em 0;
}
h5, h6 { font-size: 1em; }
h5, h6,
blockquote,
ul, ol, dl,
p, table,
details,
.standalone {
margin-top: 1.5em;
margin-bottom: 1.5em;
}
summary { cursor: pointer; }
.plainList,
.imageMessage ul,
.actions {
list-style: none;
padding: 0;
}
/* Backend messages */
.msg_error, .msg_success,
.msg_notice {
display: block;
margin: 1.5em 0;
padding: 10px;
}
.msg_error {
background: #f2dede;
border: 1px solid #e4b9b9;
color: #b94a48;
}
.msg_success {
background: #dff0d8;
border: 1px solid #c1e2b3;
color: #468847;
}
.msg_notice {
background: #fcf8e3;
border: 1px solid #f7ecb5;
color: #c09853;
}
/* Layout */
#top > div,
#main {
margin: 0 auto;
max-width: 1280px;
width: 96%;
}
/* Header area */
#top {
background: #25253d;
color: #fcfcfc;
}
#top a, #top a:visited { color: #ffbf00; }
#top a:hover, #top a:focus { color: #fcfcfc; }
#banner h1,
#banner a { float: left; }
#banner a { margin: 2.4em 0 0 2em; }
#user_menu { clear: both; }
#user_menu h2 { margin: 1.5em 0 0; }
#user_menu li,
.edit_actions li {
display: inline-block;
margin: 0 1em 0 0;
*display: inline;
*zoom: 1;
}
.edit_actions li { margin: 0 0 0 1em; }
.category_data,
.user_name, .group_name,
.edit_actions { float: left; }
.category_data,
.user_name, .group_name { min-width: 8em; }
.category_data { margin: 0 1em 0 0; }
/* Content area */
.comment_data dt, .comment_data dd,
.template_info dt,
.template_info dd { float: left; }
.comment_data dt,
.template_info dt { margin: 0 .4em 0 0; }
.comment_data dt, .template_info dt,
.comment_summary, .comment_full { clear: both; }
.actions li {
display: inline-block;
margin: 0 .4em 0 0;
*display: inline;
*zoom: 1;
}
#entry_skip legend,
#entry_skip label,
#skipto_entry,
.dialog_delrip li {
float: left;
margin: 0 .4em 0 0;
}
.sub_perm { margin-left: 1em; }
/* Login form */
#login { margin: 2em auto 1em; }
#back_to_blog {
display: block;
margin: 1em auto 2em;
}
#back_to_blog,
#login { max-width: 24em; }
#login .form_check,
#login_send { float: left; }
#login_send { margin: .5em 0 0 7.5em;}
#login .form_field label {
display: inline-block;
min-width: 8em;
*display: inline;
*zoom: 1;
}
/* Footer area */
#meta {
background: #ccdee7;
border-top: 1px solid #25253d;
text-align: center;
}
#meta small {
display: block;
font-size: 1em;
padding: 8px;
}
/* Plugin manager might go into pluginmanager.css in the end */
#configuration_footer { height: 100px; }
.plugin_count {
clear: both;
margin: 0 0 1.5em;
}
/* Media db might go into imgedit.css in the end */
#fs_crop { min-height: 200px; }
.media_pane .pagination { margin: 0; }
/* Media Queries for Responsive Design. */
@media only screen and (min-width: 481px) { }
@media only screen and (min-width: 768px) {
body { font-size: 1em; }
h1 {
font-size: 2em;
line-height: 1.5em;
margin: 0.75em 0;
}
h2 {
font-size: 1.5em;
line-height: 1em;
margin: 1em 0;
}
pre {
font-size: 0.875em;
line-height: 1.71429em;
margin: 1.71429em 0;
}
/* Plugin manager might go into pluginmanager.css in the end */
.pluginmanager_side {
float: left;
margin: 0 0 1.5em;
}
#pluginlist_sidebar .pluginmanager_side {
margin-right: 1%;
width: 32%;
}
#pluginlist_event .pluginmanager_side {
margin-right: 1%;
width: 48%;
}
}
@media only screen and (min-width: 1024px) {
#banner,
#content {
float: left;
margin: 0 2% 0 0;
}
#user_menu,
#main_menu {
float: right;
margin: 0 0 0 2%;
}
#banner, #user_menu { width: 48%; }
.lt-ie8 #banner, .lt-ie8 #user_menu { width: 47.5%; }
#user_menu {
clear: none;
text-align: right;
}
#user_menu li,
.edit_actions li { margin: 0 0 0 1em; }
.edit_actions { float: right; }
#content { width: 73%; }
.lt-ie8 #content { width: 72.5%; }
#main_menu { width: 23%; }
.lt-ie8 #main_menu { width: 22.5%; }
#login { margin: 4em auto 1em; }
#back_to_blog { margin: 1em auto 4em; }
}
@media only screen and (min-width: 1400px) {
body { font-size: 1.125em; }
}