1
0

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,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; }
}