2008-04-21 13:35:50 +00:00
<% #href %>
2010-01-10 14:40:36 +00:00
<% param.path %>
2008-04-21 13:35:50 +00:00
2008-05-05 00:27:43 +00:00
<% #listItem %>
2008-04-21 20:46:29 +00:00
<tr>
2015-01-11 13:18:11 +01:00
<td class='uk-width-6-10'><% site.title | site.link %></td>
<td class='uk-text-truncate' title='<% site.modified short %>' data-uk-tooltip="{pos: 'top-left'}">
<% site.modified text %>
</td>
<td><% site.modifier %></td>
2008-04-21 20:46:29 +00:00
</tr>
2015-01-01 21:00:43 +01:00
<% #search %>
<h1><% response.title %></h1>
<form class='uk-form' method='post' action='<% site.href search %>'>
<div class='uk-form-controls'>
<input type='text' class='uk-width-1-2' name='q' value='<% request.q encoding="form" %>' required>
<button type='submit' name='search' value='1' class='uk-button uk-button-primary'>
<% gettext Find %>
</button>
2015-01-04 13:27:32 +01:00
<a href='<% site.href %>' class='uk-button uk-button-link'><% gettext Cancel %></a>
2015-01-01 21:00:43 +01:00
</div>
</form>
<p>
<% if <% response.count %> is null then '' else <% ngettext 'Showing {0} result' 'Showing {0} results' <% response.count %> suffix=. %> %>
</p>
<dl class='uk-description-list-line'>
<% response.result %>
</dl>
2010-05-30 13:39:09 +00:00
<% #opensearchdescription %>
<?xml version="1.0" encoding="UTF-8"?>
<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">
<ShortName><% site.title %></ShortName>
<Description>Search the site <% site.href %></Description>
<Tags>antville search</Tags>
<Image height="16" width="16" type="image/vnd.microsoft.icon"><% image /ant-icon.png url %></Image>
<Url type="text/html" template="<% site.href search %>?q={searchTerms}" />
<Query role="example" searchTerms="cat" />
</OpenSearchDescription>
2015-01-11 13:22:37 +01:00
<% #header %>
<header class='av-header'>
<div class='av-header-bg'>
<div class='av-header-bg-chaos'></div>
<div class='av-header-bg-offset'>
<div class='av-header-bg-dots'></div>
</div>
</div>
<div class='av-title'>
<% site.title | site.link title=<% site.tagline %> %>
</div>
</header>
2008-04-21 13:35:50 +00:00
2015-01-11 13:22:37 +01:00
<% #footer %>
<footer>
<hr class='uk-margin-large-top'>
<div class='uk-text-small uk-margin-bottom uk-float-left'>
<div><% gettext 'Created {0}' <% site.created text %> %>.</div>
<div><% gettext 'Last modified {0}' <% site.modified text %> %>.</div>
</div>
<div class='uk-text-right'>
<% image /smallchaos.gif | link http://antville.org %> &
<% image /helma.png | link http://helma.org %>
</div>
</footer>
2008-04-21 13:35:50 +00:00
2015-01-24 20:01:25 +01:00
<% #javascript %>
2015-01-28 17:03:22 +01:00
document.addEventListener('DOMContentLoaded', function () {
// Injecting main.css if necessary for compatibility reasons
2015-01-24 20:01:25 +01:00
if (!document.querySelector('link[href$=main\\.css]')) {
var link = document.createElement('link');
link.href = '<% site.href main.css %>';
link.rel = 'stylesheet';
link.type = 'text/css';
document.head.appendChild(link);
}
2015-01-28 17:03:22 +01:00
});
2015-01-24 20:01:25 +01:00
2015-01-30 15:55:57 +01:00
<% site.skin Site#javascript | script %>
2015-01-24 20:01:25 +01:00
2015-01-28 17:03:22 +01:00
<% #include %>
(function (url) {
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = url;
2015-01-30 23:59:40 +01:00
document.head.appendChild(script);
2015-01-28 17:03:22 +01:00
})('<% param.href %>');
<% #stylesheet %>
2015-01-30 16:10:11 +01:00
@import '<% root.static ../../styles/main.min.css %>';
2015-01-30 22:22:37 +01:00
// FIXME: compatibility
2015-01-30 21:07:19 +01:00
2015-01-30 22:10:39 +01:00
@background-color: <% value 'background color' default=#fff %>;
@link-color: <% value 'link color' default=#ff4040 %>;
@hover-color: <% value 'active link color' default=#d50000 %>;
2015-01-30 22:57:27 +01:00
@font-family: <% value 'base font' default='Helvetica Neue, Helvetica, Arial, sans-serif' %>;
2015-01-31 13:43:11 +01:00
@font-size: <% value 'base font size' default="'14px / 20px'" %>;
@font-color: <% value 'base font color' default=#444 %>;
2015-01-30 21:07:19 +01:00
@font-family-small: <% value 'small font' default=inherit %>;
@font-size-small: <% value 'small font size' default=inherit %>;
@font-color-small: <% value 'small font color' default=inherit %>;
@font-family-large: <% value 'big font' default=inherit %>;
@font-size-large: <% value 'big font size' default=inherit %>;
@font-color-large: <% value 'big font color' default=inherit %>;
2015-01-31 13:43:11 +01:00
@muted-color: average(@background-color, @font-color);
@muted-background: fadeout(@muted-color, 80%);
2015-01-30 16:48:09 +01:00
// Overwriting some classes defined by UIKit to go along with Antville’ s layout
2015-01-30 22:57:27 +01:00
html {
font: normal @font-size @font-family;
2015-01-30 21:36:35 +01:00
}
2015-01-30 21:07:19 +01:00
h1, h2, h3, h4, h5, h6 {
color: @font-color-large;
font-family: @font-family-large;
2015-01-30 16:48:09 +01:00
}
a {
color: @link-color;
&:hover {
color: @hover-color;
}
}
em {
2015-01-30 21:07:19 +01:00
color: @font-color;
2015-01-30 16:48:09 +01:00
}
img {
2015-01-30 22:10:39 +01:00
max-width: initial; // FIXME: compatibility
2015-01-30 16:48:09 +01:00
}
hr {
2015-01-30 22:10:39 +01:00
border-top-color: @muted-background;
2015-01-30 16:48:09 +01:00
}
2015-01-30 21:07:19 +01:00
2015-01-30 21:36:35 +01:00
.uk-text-muted, .uk-article-meta, .uk-description-list-line > dd {
color: @muted-color !important;
2015-01-30 21:07:19 +01:00
}
2015-01-28 17:03:22 +01:00
.uk-table-striped tbody tr:hover, .uk-table-striped tbody tr:nth-of-type(odd) {
background: inherit;
}
.uk-button-group.av-link-group a {
2015-01-30 16:48:09 +01:00
border-right: initial;
2015-01-28 17:03:22 +01:00
}
.uk-nav-divider + .uk-nav-divider,
.uk-nav-header + .uk-nav-header {
display: none;
}
.uk-nav-side .uk-nav-divider {
margin-top: 15px;
border-top: none;
}
.uk-alert {
2015-01-30 21:36:35 +01:00
background: @muted-background;
border-color: @muted-color;
color: @muted-color;
text-shadow: none;
2015-01-28 17:03:22 +01:00
}
2015-01-30 21:07:19 +01:00
.uk-icon-button {
&:link, &:visited {
background-color: @background-color;
color: @link-color;
border-color: @link-color;
text-shadow: initial;
}
2015-01-28 17:03:22 +01:00
&:hover {
2015-01-30 21:07:19 +01:00
background-color: @background-color;
color: @hover-color;
2015-01-28 17:03:22 +01:00
border-color: @hover-color;
2015-01-30 21:07:19 +01:00
text-shadow: initial;
}
}
.uk-button {
&, &:link, &:visited {
background-color: @background-color;
color: @font-color;
border-color: @font-color;
text-shadow: initial;
}
&:hover {
background-color: @background-color;
2015-01-28 17:03:22 +01:00
color: @hover-color;
2015-01-30 21:07:19 +01:00
border-color: @hover-color;
}
&.uk-button-link {
border: initial;
&:link, &:visited {
color: @link-color;
}
&:hover {
color: @hover-color;
}
}
&.uk-button-primary {
background-color: @background-color;
border-style: double;
border-color: @link-color;
color: @link-color;
font-weight: bold;
&:hover {
background: inherit;
border-color: @hover-color;
color: @hover-color;
}
2015-01-28 17:03:22 +01:00
}
}
2015-01-30 21:07:19 +01:00
.uk-pagination {
& > li > a {
background: @background-color;
color: @link-color;
border-color: @link-color;
text-shadow: initial;
&:hover {
background: @background-color;
color: @hover-color;
border-color: @hover-color;
}
}
& > .uk-active > span {
background: @background-color;
border-color: @font-color-small;
color: @font-color-small;
font-weight: bold;
}
& > .uk-disabled > span {
background: @muted-background;
color: @muted-color;
border-color: @muted-color;
text-shadow: initial;
}
2015-01-28 17:03:22 +01:00
}
2015-01-30 21:07:19 +01:00
.uk-subnav > li > a {
&:link, &:visited {
color: @link-color;
}
2015-01-28 17:03:22 +01:00
&:hover {
color: @hover-color;
}
}
.uk-nav-side > li.uk-active > a {
background: none;
color: @link-color;
box-shadow: none;
font-weight: bold;
}
2015-01-30 16:48:09 +01:00
.uk-thumbnail img {
max-width: 100%;
2015-01-30 15:55:57 +01:00
}
2015-01-30 21:07:19 +01:00
h1 a, .uk-table a {
&:visited {
color: @link-color;
}
&:hover {
color: @hover-color;
}
}
2015-01-30 23:14:11 +01:00
.uk-table th, .uk-table td, {
2015-01-30 22:10:39 +01:00
border-color: @muted-background;
}
2015-01-30 23:14:11 +01:00
.uk-form legend:after {
content: '';
display: block;
border-bottom: 1px solid @muted-background;
width: 100%;
}
2015-01-31 00:00:30 +01:00
.uk-form select, .uk-form textarea, .uk-form input:not([type]), .uk-form input[type="text"], .uk-form input[type="password"], .uk-form input[type="datetime"], .uk-form input[type="datetime-local"], .uk-form input[type="date"], .uk-form input[type="month"], .uk-form input[type="time"], .uk-form input[type="week"], .uk-form input[type="number"], .uk-form input[type="email"], .uk-form input[type="url"], .uk-form input[type="search"], .uk-form input[type="tel"], .uk-form input[type="color"] {
border-color: @muted-background;
}
2015-01-30 16:48:09 +01:00
// Here come the classes defining the default Antville layout
2015-01-28 17:03:22 +01:00
.av-page {
width: 900px; // FIXME: Could we use the `vw` unit already?
}
.av-sprite {
display: inline-block;
vertical-align: middle;
}
.av-border-left {
2015-01-30 23:14:11 +01:00
border-left: 1px solid @muted-background;
2015-01-28 17:03:22 +01:00
}
.av-overflow {
// FIXME: Is this cross-browser compatible?
max-width: 0;
overflow: hidden;
}
.av-invisible {
visibility: hidden;
}
.av-upload {
position: relative;
input[type='file'] {
position: relative;
z-index: 1;
visibility: hidden;
}
.av-upload-controls {
position: absolute;
z-index: 2;
top: 0;
left: 0;
}
}
.av-image-box {
display: inline-block;
max-width: 100%;
}
.av-tagged {
2015-01-31 13:43:11 +01:00
padding: 0;
2015-01-28 17:03:22 +01:00
.av-tagged-image {
opacity: 0;
img {
2015-01-30 16:48:09 +01:00
max-width: 100%;
2015-01-28 17:03:22 +01:00
display: inline-block;
margin: 0;
padding: 0;
vertical-align: bottom;
opacity: 1;
}
.Caption_Content {
color: #fff;
padding: 10px;
}
}
}
.av-poll-result-bar {
display: inline-block;
height: 0.5rem;
overflow: hidden;
margin-right: 0.5rem;
background-color: @link-color;
}
.av-header {
margin-top: 5px;
.av-header-bg {
position: relative;
}
.av-header-bg-chaos {
float: left;
width: 262px;
height: 53px;
margin-left: -40px;
background: url('<% image /spritesheet.png url %>');
background-position: 5px -139px;
}
.av-header-bg-offset {
height: 53px;
margin-left: 222px;
}
.av-header-bg-dots {
position: relative;
top: 7px;
height: 38px;
background: url('<% image /dot.gif url %>');
background-position-x: 1px;
}
.av-title {
position: relative;
top: -50px;
overflow: visible;
white-space: nowrap;
font-family: Verdana, Helvetica, Arial, sans-serif;
font-size: 25px;
font-weight: bold;
transform: translateY(50%);
}
}
.av-skin-active {
background: #fff;
opacity: .25;
}
.av-translated-locale {
font-weight: bold;
}
.av-layout-sandbox {
height: 22px;
}
.av-layout-sandbox div {
position: fixed;
top: 0;
left: 0;
right: 0;
height: 22px;
padding: 0 20px;
background: url('<% image /sandbox.png url %>');
background-position: 0 23px;
text-align: left;
}
.av-skin-control {
margin: 5px 0;
}
.av-skin-edit-link {
padding: 2px;
text-decoration: none !important;
}
// Overwriting some Helma and Jala classes for debugging and calendar integration
.helma-debug-line /*:has(script)*/ {
border: none !important;
}
.jala-calendar {
width: 100%;
text-align: center;
}
.jala-calendar tbody th {
font-weight: normal;
2015-01-30 21:07:19 +01:00
color: @font-color;
2015-01-28 17:03:22 +01:00
}
.jala-calendar-day {
width: 14.27%;
line-height: 1.2rem;
text-align: center;
a {
font-weight: bold;
}
}
.jala-calendar-selected {
2015-01-30 21:07:19 +01:00
border: 1px solid @font-color-small;
2015-01-28 17:03:22 +01:00
border-radius: 4px;
2015-01-30 21:07:19 +01:00
font-weight: bold;
2015-01-28 17:03:22 +01:00
}
.jala-calendar-left {
text-align: center;
vertical-align: baseline;
}
.jala-calendar-right {
border: 0;
text-align: center;
vertical-align: baseline;
}
// Overwriting some CSS classes for Google’ s custom search
2015-01-31 16:24:34 +01:00
.gs-webResult.gs-result a.gs-title:link,
.gs-webResult.gs-result a.gs-title:link b,
.gs-imageResult a.gs-title:link,
.gs-imageResult a.gs-title:link b {
color: @link-color !important;
}
.gs-webResult.gs-result a.gs-title:visited,
.gs-webResult.gs-result a.gs-title:visited b,
.gs-imageResult a.gs-title:visited,
.gs-imageResult a.gs-title:visited b {
color: @link-color !important;
}
2015-01-28 17:03:22 +01:00
.gs-result .gs-title, .gs-result .gs-title * {
text-decoration: none !important;
}
a.gs-title:hover {
text-decoration: underline !important;
}
.gsc-results {
2015-01-31 16:24:34 +01:00
border: none !important;
2015-01-28 17:03:22 +01:00
width: auto !important;
}
.cse .gsc-control-cse, .gsc-control-cse, .gsc-result-info, .gcsc-branding, .gsc-table-result, .gsc-thumbnail-inside, .gsc-url-top {
2015-01-31 16:24:34 +01:00
border: none !important;
2015-01-28 17:03:22 +01:00
padding-left: 0 !important;
padding-right: 0 !important;
}
.gsc-results .gsc-cursor-box {
margin: 10px 0 0 0 !important;
}
2015-01-31 16:24:34 +01:00
.gsc-result-info, .gsc-orderby-label, td.gsc-branding-text, td.gcsc-branding-text {
color: @muted-color !important;
}
2015-01-28 17:03:22 +01:00
.gs-no-results-result .gs-snippet, .gs-error-result .gs-snippet {
margin: 0 !important;
2015-01-31 16:24:34 +01:00
border: none !important;
padding: 0 !important;
background-color: inherit !important;
2015-01-28 17:03:22 +01:00
}
.gs-webResult div.gs-visibleUrl, .gs-imageResult div.gs-visibleUrl {
2015-01-31 16:24:34 +01:00
color: @muted-color !important;
}
.gsc-control-cse, .gsc-control-cse-en {
background: @background-color !important;
}
.gsc-webResult.gsc-result, .gsc-results .gsc-imageResult {
border: none !important;
background: none !important;
}
.gs-webResult .gs-snippet, .gs-imageResult .gs-snippet, .gs-fileFormatType {
color: @font-color !important;
}
.gsc-results .gsc-cursor-box .gsc-cursor-page {
color: @link-color !important;
background: none !important;
2015-01-28 17:03:22 +01:00
}
.gcsc-branding-img-noclear {
width: 51px;
height: 15px;
2015-01-30 16:48:09 +01:00
max-width: initial;
2015-01-28 17:03:22 +01:00
vertical-align: text-bottom;
}
2015-01-31 16:24:34 +01:00
.gsc-above-wrapper-area {
border-bottom-color: @muted-background !important;
}
2008-04-21 13:35:50 +00:00
<% #referrers %>
2014-12-21 17:20:22 +01:00
<h1><% response.title %></h1>
2015-01-06 23:13:25 +01:00
<form class='uk-form' action="<% response.action %>" method="get">
<div class='uk-form-row'>
<input class='uk-width-1-2' type="text" name="filter" value="<% request.filter encoding="form" %>">
<button class='uk-button uk-button-primary' type="submit" name="submit" value="1"><% gettext Search %></button>
<a class='uk-button' href='<% site.href referrers %>'>
<% gettext Reset %>
</a>
<div class='uk-form-help-block'>
2015-01-06 23:54:24 +01:00
<label>
<input type="checkbox" id="includeSpam" name="includeSpam" value="checked" <% request.includeSpam prefix='checked="' suffix='"' encoding="form" %> />
2015-01-30 21:42:20 +01:00
<% gettext 'Disable filter' %>
<i class='uk-icon uk-icon-info-circle uk-text-muted' data-uk-tooltip="{pos: 'right'}"title='<% gettext "Edit the filter in the site settings." %>'></i>
2015-01-06 23:54:24 +01:00
</label>
2015-01-06 23:13:25 +01:00
</div>
2014-12-21 17:20:22 +01:00
</div>
2015-01-09 21:02:46 +01:00
<% site.skin $Site#referrerTable %>
2014-12-21 17:20:22 +01:00
</form>
2015-01-09 21:02:46 +01:00
<% #referrerTable %>
2015-01-11 22:05:05 +01:00
<table class='uk-hidden uk-table uk-table-condensed uk-table-striped uk-table-hover av-referrers'>
2015-01-09 21:02:46 +01:00
<thead>
<tr>
2015-01-11 13:10:46 +01:00
<th class='uk-text-right'><i class='uk-icon-bar-chart'></i></th>
<th><% gettext Referrer %></th>
<th></th>
2015-01-09 21:02:46 +01:00
</tr>
</thead>
<tbody>
<% site.skin $Site#referrer %>
<% response.list %>
</tbody>
</table>
2008-05-15 13:02:50 +00:00
<script type="text/javascript">
2015-01-30 23:59:40 +01:00
$(function () {
2015-01-06 23:13:25 +01:00
var query = new Antville.Query();
var spamFilter = new Antville.Filter([<% site.spamfilter %>]);
var searchFilter = new Antville.Filter(query.filter);
var searchEngineFilters = [
new Antville.Filter("\/\/.*altavista.*\?", "q"),
new Antville.Filter("\/\/.*bing\..*\?", "q"),
new Antville.Filter("\/\/.*google\..*\?", "q"),
new Antville.Filter("\/\/.*search\.yahoo\..*\?", "p"),
new Antville.Filter("\/\/.*yandex\..*\?", "text")
];
2015-01-06 23:54:24 +01:00
var urlShortenerCounter = 0;
2015-01-06 23:13:25 +01:00
var urlShortenerFilters = [
new Antville.Filter('\/\/bit\.ly/'),
new Antville.Filter('\/\/goo\.gl/'),
new Antville.Filter('\/\/owl\.ly/'),
new Antville.Filter('\/\/t\.co/'),
2015-01-09 21:02:46 +01:00
new Antville.Filter('\/\/tinyurl\.com/')
2015-01-06 23:13:25 +01:00
];
$('.av-referrer-row').each(function (index) {
2015-01-06 23:54:24 +01:00
if (index < 1) return;
2015-01-06 23:13:25 +01:00
var row = $(this);
var ref = row.find('.av-referrer a');
var url = ref.attr('href');
var count = row.find('.av-referrer-count').html();
var control = row.find('.av-referrer-control a');
control.on('click', function (event) {
event.preventDefault();
var input = prompt("<% gettext 'Are you sure you want to add this URL to the referrer spam filter?'%> <% gettext 'You can edit it before if you only want to filter a pattern.' %>", url);
if (input) {
2015-01-09 21:02:46 +01:00
location.href = '<% site.href referrers %>?submit=1&permanent=' + encodeURIComponent(input);
2015-01-06 23:13:25 +01:00
}
});
var referrer = new Antville.Referrer(url, url, count);
ref.html(referrer.text);
2015-01-06 23:54:24 +01:00
for (var i = 0, filter; i < urlShortenerFilters.length; i += 1) {
filter = urlShortenerFilters[i];
if (filter.test(url)) {
urlShortenerCounter += parseInt(count, 10);
2015-01-11 13:23:42 +01:00
row.remove();
2015-01-06 23:54:24 +01:00
}
}
2015-01-06 23:13:25 +01:00
if (spamFilter.test(url)) {
if (query.includeSpam) {
ref.addClass('uk-text-muted');
control.remove();
} else {
2015-01-11 13:23:42 +01:00
row.remove();
2015-01-06 23:13:25 +01:00
}
2008-04-21 13:35:50 +00:00
}
2015-01-06 23:13:25 +01:00
if (query.filter && !searchFilter.test(url)) {
2015-01-11 13:23:42 +01:00
row.remove();
2015-01-06 23:13:25 +01:00
}
var re = new RegExp('[:/].*$');
for (var i = 0, filter; i < searchEngineFilters.length; i += 1) {
filter = searchEngineFilters[i];
if (filter.test(url)) {
var host = referrer.text.replace(re, '');
ref.html(referrer.compose('<i><% gettext "Search" %> ' + host + ':</i>', filter.key));
break;
}
}
});
2015-01-06 23:54:24 +01:00
var firstRow = $('.av-referrer-row:first');
if (urlShortenerCounter > 0) {
firstRow.find('.av-referrer-count')
.html(urlShortenerCounter)
.end()
.find('.av-referrer')
.html('URL Shorteners')
.end()
.find('.av-referrer-control a')
.remove();
var rows = $('.av-referrer-row');
for (var i = 1, count; i < rows.length; i += 1) {
count = parseInt(rows.eq(i).find('.av-referrer-count').html(), 10);
if (count >= urlShortenerCounter) {
firstRow.insertAfter(rows.eq(i));
break;
}
}
} else {
2015-01-11 13:23:42 +01:00
firstRow.remove();
2015-01-06 23:54:24 +01:00
}
2015-01-11 22:05:05 +01:00
if ($('.av-referrers tbody').children().length > 0) {
$('.av-referrers').removeClass('uk-hidden');
}
2015-01-06 23:13:25 +01:00
});
2008-05-15 13:02:50 +00:00
</script>
2015-01-11 13:23:42 +01:00
2008-05-15 13:02:50 +00:00
<% #referrer %>
2015-01-06 23:13:25 +01:00
<tr class='av-referrer-row'>
<td class='uk-text-right av-referrer-count'><% param.requests %></td>
2015-01-11 13:06:50 +01:00
<td class='av-referrer av-overflow uk-width-1-1'>
2015-01-06 23:13:25 +01:00
<% param.referrer | link %>
</td>
<td class='av-referrer-control uk-text-right'>
<a href='javascript:'><i class='uk-icon uk-icon-filter'></i></a>
</td>
2014-12-21 17:20:22 +01:00
</tr>
2008-05-15 13:02:50 +00:00
2009-12-13 21:54:58 +00:00
<% #deleted %>
2014-12-21 17:20:22 +01:00
<% gettext "This site is going to be deleted completely and irreversibly after {0}." <% site.deleted | format long %> %>
2009-12-13 21:54:58 +00:00
2008-12-14 19:49:12 +00:00
<% #export %>
2015-01-04 13:27:32 +01:00
<h1><% gettext "Export Site Data" %></h1>
<p>
<% if <% param.status %> is null then <% if <% file.self %> is null then '' else <% gettext "Download the file {0} or klick “Start” to create a new one." <% file.skin File#main %> '<small>' <% file.created | format short %> '</small>' %> %> else <% param.status %> %>
</p>
<form action="" method="post">
<button type="submit" name="submit" value="<% if <% param.status %> is null then start else stop %>" class='uk-button uk-button-primary'>
2010-04-24 12:28:29 +00:00
<% if <% param.status %> is null then <% gettext Start %> else <% gettext Stop %> %>
</button>
2015-01-04 13:27:32 +01:00
<a href='<% site.href %>' class='uk-button uk-link-button'><% gettext Cancel %></a>
</form>
2010-04-10 21:53:53 +00:00
<% #import %>
2015-01-04 13:27:32 +01:00
<h1><% gettext 'Import Site Data' %></h1>
<p>
<% if <% file.self %> is null then '' else <% gettext "The site is scheduled for importing the file {0}. The imported site data will be available within 24 hours." <% file.skin File#main %> '</a>' '<small>' <% file.created | format short %> '</small>' %> %>
</p>
<form class='uk-form uk-form-stacked' method="post" enctype="multipart/form-data">
<div class='uk-form-row'>
<label class='uk-form-label' for=''>
<% gettext File %>
</label>
<div class='uk-form-controls'>
<% if <% file.self %> is null then <% site.upload file %> %>
</div>
</div>
<div class='uk-form-row'>
<button class='uk-button uk-button-primary' type="submit" name="submit" value="<% if <% file.self %> is null then start else stop %>">
<% if <% file.self %> is null then <% gettext Start %> else <% gettext Stop %> %>
</button>
<a href='<% site.href %>' class='uk-button uk-button-link'><% gettext Cancel %></a>
</div>
</form>
2010-04-10 21:53:53 +00:00
2008-04-21 13:35:50 +00:00
<% #edit %>
2014-11-09 20:22:42 +01:00
<h1><% response.title %></h1>
2015-01-06 14:03:44 +01:00
<div class='uk-article-meta'><% site.skin $HopObject#meta %></div>
2015-01-23 18:19:24 +01:00
<form class='uk-form uk-form-stacked' id="edit" method="post" action="<% response.action %>">
2014-11-09 20:22:42 +01:00
<fieldset>
2015-01-06 14:03:44 +01:00
<div class='uk-form-row uk-margin-top'>
2014-11-09 20:22:42 +01:00
<label class='uk-form-label' for='mode'>
<% gettext Mode %>
</label>
<div class='uk-form-controls'>
<% site.select mode %>
</div>
</div>
<div class='uk-form-row'>
<label class='uk-form-label' for='title'>
<% gettext Title %>
</label>
<div class='uk-form-controls'>
<% site.input title class='uk-width-1-1' %>
</div>
</div>
<div class='uk-form-row'>
<label class='uk-form-label' for='tagline'>
2014-12-08 20:17:46 +01:00
<% gettext Description %>
2014-11-09 20:22:42 +01:00
</label>
<div class='uk-form-controls'>
<% site.input tagline class='uk-width-1-1' %>
</div>
</div>
<div class='uk-form-row'>
<label class='uk-form-label' for='pageSize'>
<% gettext Paging %>
</label>
<div class='uk-form-controls'>
2014-12-14 10:20:04 +01:00
<% site.input pageSize class='uk-width-1-6' type=number min=1 max=25 %>
2014-11-09 20:22:42 +01:00
<% gettext "{0} per page" <% gettext "stories" %> %>
<% // site.select pageMode %>
</div>
</div>
<div class='uk-form-row'>
<label class='uk-form-label' for='commentMode'>
<% gettext Comments %>
</label>
<div class='uk-form-controls'>
<label>
<% site.checkbox commentMode %>
enabled
</label>
</div>
</div>
<div class='uk-form-row'>
<label class='uk-form-label'>
<% gettext Archive %>
</label>
<div class='uk-form-controls'>
<label>
<% site.checkbox archiveMode %>
<% gettext enabled %>
</label>
</div>
</div>
<div class='uk-form-row'>
<label class='uk-form-label' for='locale'>
<% gettext Language %>
</label>
<div class='uk-form-controls'>
<% site.select locale %>
</div>
</div>
<div class='uk-form-row'>
<label class='uk-form-label' for='timeZone'>
<% gettext 'Time Zone' %>
</label>
<div class='uk-form-controls'>
<% site.select timeZone %>
</div>
</div>
<div class='uk-form-row'>
<label class='uk-form-label' for='notificationMode'>
<% gettext Notifications %>
</label>
<div class='uk-form-controls'>
<% site.select notificationMode %>
</div>
</div>
</fieldset>
2014-12-21 17:20:22 +01:00
<% site.skin $Site#admin restricted=true %>
2014-12-17 23:56:06 +01:00
<fieldset class='uk-margin-top'>
2014-11-09 20:22:42 +01:00
<legend><% gettext Advanced %></legend>
<div class='uk-form-row'>
<label class='uk-form-label' for='callbackUrl'>
<% gettext 'Callback URL' %>
</label>
<div class='uk-form-controls'>
2014-12-14 10:20:04 +01:00
<% site.input callbackUrl type=url class='uk-width-1-1' %>
2014-11-09 20:22:42 +01:00
<label>
<% site.checkbox callbackMode %>
<% gettext enabled %>
</label>
</div>
</div>
<div class='uk-form-row'>
<label class='uk-form-label'>
<% gettext 'Disk Space' %>
</label>
<div class='uk-form-controls'>
<% site.diskspace %>
</div>
</div>
<div class='uk-form-row'>
<label class='uk-form-label'>
<% gettext Bookmarklet %>
</label>
<div class='uk-form-controls'>
2015-01-24 21:52:28 +01:00
<a class='uk-button' data-uk-tooltip='{pos: "right"}' href="javascript: var siteUrl = '<% site.href %>'; var selection = (window.getSelection) ? window.getSelection() : document.selection.createRange(); selection = selection.text || selection; selection = selection + ''; var url='<% root.static %>../../formica.html?s=' + encodeURIComponent(siteUrl) + '&l=' + encodeURIComponent(location.href) + '&r=' + encodeURIComponent(document.referrer) + '&w=400&h=400&c=' + encodeURIComponent(selection || document.title); window.open(url, 'formica', 'width=630, height=350'); void 0;" title="<% gettext 'Drag to Bookmarks Bar' %>"><% gettext "Post to {0}" <% site.title %> %></a>
2014-11-09 20:22:42 +01:00
</div>
</div>
</fieldset>
<a id="spamfilter" name="spamfilter"></a>
2014-12-17 23:56:06 +01:00
<fieldset class='uk-margin-top'>
2015-01-30 21:42:20 +01:00
<legend><% gettext "Referrer Filter" %></legend>
2014-11-09 20:22:42 +01:00
<div class='uk-form-row'>
<div class='uk-form-controls'>
<% site.textarea spamfilter rows=5 class='uk-width-1-1' %>
<p class="uk-form-help-block">
<% gettext "Enter one filter {0}pattern{1} per line to be applied on every URL in the referrer and backlink lists." '<a href="http://en.wikipedia.org/wiki/Regular_expression">' </a> %>
</p>
</div>
</div>
</fieldset>
2014-12-17 23:56:06 +01:00
<div class='uk-margin-top'>
2014-11-09 20:22:42 +01:00
<button class='uk-button uk-button-primary' type="submit" id="submit" name="save" value="1">
<% gettext Save %>
</button>
2015-01-24 14:19:45 +01:00
<% site.link delete <% gettext Delete %> class='uk-button' %>
2015-01-04 13:27:32 +01:00
<a href='<% site.href %>' class="uk-button uk-button-link"><% gettext Cancel %></a>
2014-11-09 20:22:42 +01:00
</div>
</form>
2013-04-06 21:55:25 +00:00
<script>
2015-01-30 23:59:40 +01:00
$(function () {
2015-01-31 00:00:30 +01:00
$('input#callbackMode').on('click', function(event) {
$('input#callbackUrl').prop('disabled', !this.checked);
2015-01-11 14:27:29 +01:00
});
2015-01-31 00:00:30 +01:00
$('input#callbackUrl').prop('disabled', !$('input#callbackMode').prop('checked'));
// Group related <option> elements by inserting additional <optgroup> elements.
var groups = [];
var element = $('form#edit #timeZone');
element.find('option').each(function(index, item) {
var zone = $(item);
var parts = zone.html().split('/'); // E.g. Europe/Vienna
var group = parts[0];
if ($.inArray(group, groups) < 0) {
groups.push(group);
}
});
groups.sort();
$.each(groups, function(index, group) {
var key = group + '/'; // E.g. Europe/
element.find('option:contains(' + key + ')')
.wrapAll($('<optgroup>').attr('label', group))
.each(function(index, item) {
$(item).html($(item).html().replace(key, ''));
});
});
});
2013-04-06 21:55:25 +00:00
</script>
2014-11-09 20:22:42 +01:00
2014-12-21 17:20:22 +01:00
<% #admin %>
<a name='admin' id='admin'></a>
<fieldset class='uk-margin-top'>
<legend><% gettext Administration %></legend>
<div class='uk-form-row'>
<label class='uk-form-label' for='status'>
<% gettext Status %>
</label>
<div class='uk-form-controls'>
<% site.select status %>
</div>
</div>
<div class='uk-form-row'>
<label class='uk-form-label' for='status'>
<% gettext Information %>
</label>
<div><% ngettext "{0} Story" "{0} Stories" <% count <% site.self stories %> %> %></div>
<div><% ngettext "{0} Comment" "{0} Comments" <% count <% site.self comments %> %> %></div>
<div><% ngettext "{0} Image" "{0} Images" <% count <% site.self images %> %> %></div>
<div><% ngettext "{0} File" "{0} Files" <% count <% site.self files %> %> %></div>
</div>
<div class='uk-form-row'>
<label class='uk-form-label' for='notes'>
<% gettext Notes %>
</label>
<div class='uk-form-controls'>
<% site.textarea notes class='uk-width-1-1' rows=5 %>
</div>
</div>
</fieldset>
2014-12-10 16:50:16 +01:00
<% #delete %>
<div class='uk-alert uk-alert-danger'>
<% gettext 'You are about to delete the whole site which currently contains {0}, {1}, {2}, {3} and {4}.'
<% ngettext '{0} story' '{0} stories' <% count <% site.self stories %> %> %>
<% ngettext '{0} comment' '{0} comments' <% count <% site.self comments %> %> %>
<% ngettext '{0} image' '{0} images' <% count <% site.self images %> %> %>
<% ngettext '{0} file' '{0} files' <% count <% site.self files %> %> %>
<% ngettext '{0} poll' '{0} polls' <% count <% site.self polls %> %> %> %>
<strong><% gettext 'All of this will be deleted irreversibly.' %></strong>
<% gettext 'Are you sure you want to proceed?' %>
</div>
* Refactored Admin prototype by reducing interface, eliminating lenghty help texts and leaving out meaningless features
* Moved SITENOTIFICATIONPERIOD constant, health property as well as getFormOptions(), commitEntries(), commitRequests(), purgeReferrers(), invokeCallbacks(), updateHealth(), exportImport(), updateDomains(), queue() and dequeue() methods from Root to Admin prototype
* Renamed Admin.purgeDatabase() method to Admin.purgeSites() and added code for automatic blocking/deletion of restricted/abandoned sites
* Renamed Root.getScopes() method to Admin.getNotificationScopes()
* Renamed User.getScopes() method to Admin.getCreationScopes()
* Added Admin.getPhaseOutModes() method
* Removed obsolete code
* Fixed and renamed Admin.privateSites to Admin.restrictedSites collection
* Finally added simple and reasonable quota implementation
* Fixed gettext_macro() and ngettext_macro() with check for necessary arguments
* Removed sender argument from global sendMail() method – instead, the root.replyTo property is used
* Fixed some i18n messages
* Moved code setting res.handlers.layout before permission check in HopObject.onRequest() to prevent broken layout in error screen
* Completely rewrote HopObject.notify() method (hopefully fixing issue 49)
* Check free disk space before invoking create_action() of Files and Images prototypes
* Modified output of Membership.toString() method
* Fixed some linebreaks in Membership.skin
* Added option to set session.data.error for additonal information in $Root#error skin
* Slightly modified output of $Root#health skin
* Replaced Root.phaseOutInactiveSites and Root.phaseOutPrivateSites with Root.phaseOutMode
* Removed qualifyingDate property from Root
* Renamed Root.qualifyingPeriod property to Root.probationPeriod
* Removed autoCleanupEnabled and autoCleanupStartTime properties from Root
* Added replyTo property to Root
* Rewrote Root.getCreationPermission() method
* Added #notify_blocking and #notify_deletion skins to $Site.skin
* Replaced Site.notifiedOfBlocking and Site.notifiedOfDeletion properties with Site.notified
* Added Site.diskspace_macro() returning the free disk space in MB
* Fixed bug in Site.main_action() causing erroneous display of deletion warning
2010-01-15 21:32:11 +00:00
2010-05-24 13:32:40 +00:00
<% #notify_block %>
* Refactored Admin prototype by reducing interface, eliminating lenghty help texts and leaving out meaningless features
* Moved SITENOTIFICATIONPERIOD constant, health property as well as getFormOptions(), commitEntries(), commitRequests(), purgeReferrers(), invokeCallbacks(), updateHealth(), exportImport(), updateDomains(), queue() and dequeue() methods from Root to Admin prototype
* Renamed Admin.purgeDatabase() method to Admin.purgeSites() and added code for automatic blocking/deletion of restricted/abandoned sites
* Renamed Root.getScopes() method to Admin.getNotificationScopes()
* Renamed User.getScopes() method to Admin.getCreationScopes()
* Added Admin.getPhaseOutModes() method
* Removed obsolete code
* Fixed and renamed Admin.privateSites to Admin.restrictedSites collection
* Finally added simple and reasonable quota implementation
* Fixed gettext_macro() and ngettext_macro() with check for necessary arguments
* Removed sender argument from global sendMail() method – instead, the root.replyTo property is used
* Fixed some i18n messages
* Moved code setting res.handlers.layout before permission check in HopObject.onRequest() to prevent broken layout in error screen
* Completely rewrote HopObject.notify() method (hopefully fixing issue 49)
* Check free disk space before invoking create_action() of Files and Images prototypes
* Modified output of Membership.toString() method
* Fixed some linebreaks in Membership.skin
* Added option to set session.data.error for additonal information in $Root#error skin
* Slightly modified output of $Root#health skin
* Replaced Root.phaseOutInactiveSites and Root.phaseOutPrivateSites with Root.phaseOutMode
* Removed qualifyingDate property from Root
* Renamed Root.qualifyingPeriod property to Root.probationPeriod
* Removed autoCleanupEnabled and autoCleanupStartTime properties from Root
* Added replyTo property to Root
* Rewrote Root.getCreationPermission() method
* Added #notify_blocking and #notify_deletion skins to $Site.skin
* Replaced Site.notifiedOfBlocking and Site.notifiedOfDeletion properties with Site.notified
* Added Site.diskspace_macro() returning the free disk space in MB
* Fixed bug in Site.main_action() causing erroneous display of deletion warning
2010-01-15 21:32:11 +00:00
<% gettext 'Hello {0}.' <% membership.name %> %>
2014-07-04 15:10:47 +02:00
<% gettext 'The site {0} at {1} will be blocked in {2} because it is being
restricted for too long.' <% site.title %> <%site.href %>
2010-05-24 13:32:40 +00:00
<% ngettext '{0} day' '{0} days' <% root.phaseOutGracePeriod %> %> %>
* Refactored Admin prototype by reducing interface, eliminating lenghty help texts and leaving out meaningless features
* Moved SITENOTIFICATIONPERIOD constant, health property as well as getFormOptions(), commitEntries(), commitRequests(), purgeReferrers(), invokeCallbacks(), updateHealth(), exportImport(), updateDomains(), queue() and dequeue() methods from Root to Admin prototype
* Renamed Admin.purgeDatabase() method to Admin.purgeSites() and added code for automatic blocking/deletion of restricted/abandoned sites
* Renamed Root.getScopes() method to Admin.getNotificationScopes()
* Renamed User.getScopes() method to Admin.getCreationScopes()
* Added Admin.getPhaseOutModes() method
* Removed obsolete code
* Fixed and renamed Admin.privateSites to Admin.restrictedSites collection
* Finally added simple and reasonable quota implementation
* Fixed gettext_macro() and ngettext_macro() with check for necessary arguments
* Removed sender argument from global sendMail() method – instead, the root.replyTo property is used
* Fixed some i18n messages
* Moved code setting res.handlers.layout before permission check in HopObject.onRequest() to prevent broken layout in error screen
* Completely rewrote HopObject.notify() method (hopefully fixing issue 49)
* Check free disk space before invoking create_action() of Files and Images prototypes
* Modified output of Membership.toString() method
* Fixed some linebreaks in Membership.skin
* Added option to set session.data.error for additonal information in $Root#error skin
* Slightly modified output of $Root#health skin
* Replaced Root.phaseOutInactiveSites and Root.phaseOutPrivateSites with Root.phaseOutMode
* Removed qualifyingDate property from Root
* Renamed Root.qualifyingPeriod property to Root.probationPeriod
* Removed autoCleanupEnabled and autoCleanupStartTime properties from Root
* Added replyTo property to Root
* Rewrote Root.getCreationPermission() method
* Added #notify_blocking and #notify_deletion skins to $Site.skin
* Replaced Site.notifiedOfBlocking and Site.notifiedOfDeletion properties with Site.notified
* Added Site.diskspace_macro() returning the free disk space in MB
* Fixed bug in Site.main_action() causing erroneous display of deletion warning
2010-01-15 21:32:11 +00:00
<% gettext "Best regards." %>
<% gettext "The Management" %>
2010-05-24 13:32:40 +00:00
<% #notify_delete %>
* Refactored Admin prototype by reducing interface, eliminating lenghty help texts and leaving out meaningless features
* Moved SITENOTIFICATIONPERIOD constant, health property as well as getFormOptions(), commitEntries(), commitRequests(), purgeReferrers(), invokeCallbacks(), updateHealth(), exportImport(), updateDomains(), queue() and dequeue() methods from Root to Admin prototype
* Renamed Admin.purgeDatabase() method to Admin.purgeSites() and added code for automatic blocking/deletion of restricted/abandoned sites
* Renamed Root.getScopes() method to Admin.getNotificationScopes()
* Renamed User.getScopes() method to Admin.getCreationScopes()
* Added Admin.getPhaseOutModes() method
* Removed obsolete code
* Fixed and renamed Admin.privateSites to Admin.restrictedSites collection
* Finally added simple and reasonable quota implementation
* Fixed gettext_macro() and ngettext_macro() with check for necessary arguments
* Removed sender argument from global sendMail() method – instead, the root.replyTo property is used
* Fixed some i18n messages
* Moved code setting res.handlers.layout before permission check in HopObject.onRequest() to prevent broken layout in error screen
* Completely rewrote HopObject.notify() method (hopefully fixing issue 49)
* Check free disk space before invoking create_action() of Files and Images prototypes
* Modified output of Membership.toString() method
* Fixed some linebreaks in Membership.skin
* Added option to set session.data.error for additonal information in $Root#error skin
* Slightly modified output of $Root#health skin
* Replaced Root.phaseOutInactiveSites and Root.phaseOutPrivateSites with Root.phaseOutMode
* Removed qualifyingDate property from Root
* Renamed Root.qualifyingPeriod property to Root.probationPeriod
* Removed autoCleanupEnabled and autoCleanupStartTime properties from Root
* Added replyTo property to Root
* Rewrote Root.getCreationPermission() method
* Added #notify_blocking and #notify_deletion skins to $Site.skin
* Replaced Site.notifiedOfBlocking and Site.notifiedOfDeletion properties with Site.notified
* Added Site.diskspace_macro() returning the free disk space in MB
* Fixed bug in Site.main_action() causing erroneous display of deletion warning
2010-01-15 21:32:11 +00:00
<% gettext 'Hello {0}.' <% membership.name %> %>
2014-07-04 15:10:47 +02:00
<% gettext 'The site {0} at {1} will be deleted in {2} because it has been
considered as abandoned.' <% site.title %> <% site.href %>
2010-05-24 13:32:40 +00:00
<% ngettext '{0} day' '{0} days' <% root.phaseOutGracePeriod %> %> %>
* Refactored Admin prototype by reducing interface, eliminating lenghty help texts and leaving out meaningless features
* Moved SITENOTIFICATIONPERIOD constant, health property as well as getFormOptions(), commitEntries(), commitRequests(), purgeReferrers(), invokeCallbacks(), updateHealth(), exportImport(), updateDomains(), queue() and dequeue() methods from Root to Admin prototype
* Renamed Admin.purgeDatabase() method to Admin.purgeSites() and added code for automatic blocking/deletion of restricted/abandoned sites
* Renamed Root.getScopes() method to Admin.getNotificationScopes()
* Renamed User.getScopes() method to Admin.getCreationScopes()
* Added Admin.getPhaseOutModes() method
* Removed obsolete code
* Fixed and renamed Admin.privateSites to Admin.restrictedSites collection
* Finally added simple and reasonable quota implementation
* Fixed gettext_macro() and ngettext_macro() with check for necessary arguments
* Removed sender argument from global sendMail() method – instead, the root.replyTo property is used
* Fixed some i18n messages
* Moved code setting res.handlers.layout before permission check in HopObject.onRequest() to prevent broken layout in error screen
* Completely rewrote HopObject.notify() method (hopefully fixing issue 49)
* Check free disk space before invoking create_action() of Files and Images prototypes
* Modified output of Membership.toString() method
* Fixed some linebreaks in Membership.skin
* Added option to set session.data.error for additonal information in $Root#error skin
* Slightly modified output of $Root#health skin
* Replaced Root.phaseOutInactiveSites and Root.phaseOutPrivateSites with Root.phaseOutMode
* Removed qualifyingDate property from Root
* Renamed Root.qualifyingPeriod property to Root.probationPeriod
* Removed autoCleanupEnabled and autoCleanupStartTime properties from Root
* Added replyTo property to Root
* Rewrote Root.getCreationPermission() method
* Added #notify_blocking and #notify_deletion skins to $Site.skin
* Replaced Site.notifiedOfBlocking and Site.notifiedOfDeletion properties with Site.notified
* Added Site.diskspace_macro() returning the free disk space in MB
* Fixed bug in Site.main_action() causing erroneous display of deletion warning
2010-01-15 21:32:11 +00:00
<% gettext "Best regards." %>
<% gettext "The Management" %>
2015-01-01 21:03:26 +01:00
2015-01-11 20:12:01 +01:00
<% #noscript %>
<% gettext "To make spamming referrers and backlinks useless, they are displayed using client-side JavaScript. To see them, your browser needs to permit the execution of JavaScript." %>
2015-01-11 13:22:37 +01:00
<% #menuExt %>
<script type="text/javascript" defer="defer">
var win = external.menuArguments;
var url = "<% site.url %>stories/create?text=";
var link = escape('<a href="' + win.location.href + '">' +
win.document.title + "</a>: ");
var text = escape(win.document.selection.createRange().text);
win.location.href = url + link + text;
</script>
<% #menuExtRegistry %>
REGEDIT4
[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt\Post to <% site.title %>]
@="<% site.url %>menuext"
"contexts"=hex:31