Merge pull request #527 from fermionic/20121106-frost-updates

frost updates
This commit is contained in:
fermionic 2012-11-07 07:41:17 -08:00
commit cbbd68563b
32 changed files with 603 additions and 276 deletions

View file

@ -361,17 +361,26 @@ if(! class_exists('App')) {
// Allow themes to control internal parameters
// by changing App values in theme.php
//
// Possibly should make these part of the plugin
// system, but it seems like overkill to invoke
// all the plugin machinery just to change a couple
// of values
public $sourcename = '';
public $videowidth = 425;
public $videoheight = 350;
public $force_max_items = 0;
public $theme_thread_allow = true;
// An array for all theme-controllable parameters
// Mostly unimplemented yet. Only options 'stylesheet' and
// beyond are used.
public $theme = array(
'sourcename' => '',
'videowidth' => 425,
'videoheight' => 350,
'force_max_items' => 0,
'thread_allow' => true,
'stylesheet' => ''
);
private $scheme;
private $hostname;
private $baseurl;
@ -580,6 +589,13 @@ if(! class_exists('App')) {
$interval = 40000;
$this->page['title'] = $this->config['sitename'];
/* put the head template at the beginning of page['htmlhead']
* since the code added by the modules frequently depends on it
* being first
*/
if(!isset($this->page['htmlhead']))
$this->page['htmlhead'] = '';
$tpl = get_markup_template('head.tpl');
$this->page['htmlhead'] = replace_macros($tpl,array(
'$baseurl' => $this->get_baseurl(), // FIXME for z_path!!!!
@ -590,14 +606,16 @@ if(! class_exists('App')) {
'$showmore' => t('show more'),
'$showfewer' => t('show fewer'),
'$update_interval' => $interval
));
)) . $this->page['htmlhead'];
}
function init_page_end() {
if(!isset($this->page['end']))
$this->page['end'] = '';
$tpl = get_markup_template('end.tpl');
$this->page['end'] = replace_macros($tpl,array(
'$baseurl' => $this->get_baseurl() // FIXME for z_path!!!!
));
)) . $this->page['end'];
}
function set_curl_code($code) {
@ -917,6 +935,7 @@ if(! function_exists('login')) {
$tpl = get_markup_template("login.tpl");
$_SESSION['return_url'] = $a->query_string;
$a->module = 'login';
}

View file

@ -865,11 +865,15 @@ function format_like($cnt,$arr,$type,$id) {
$total = count($arr);
if($total >= MAX_LIKERS)
$arr = array_slice($arr, 0, MAX_LIKERS - 1);
if($total < MAX_LIKERS)
$arr[count($arr)-1] = t('and') . ' ' . $arr[count($arr)-1];
if($total < MAX_LIKERS) {
$last = t('and') . ' ' . $arr[count($arr)-1];
$arr2 = array_slice($arr, 0, -1);
$str = implode(', ', $arr2) . ' ' . $last;
}
if($total >= MAX_LIKERS) {
$str = implode(', ', $arr);
if($total >= MAX_LIKERS)
$str .= sprintf( t(', and %d other people'), $total - MAX_LIKERS );
}
$str = (($type === 'like') ? sprintf( t('%s like this.'), $str) : sprintf( t('%s don\'t like this.'), $str));
$o .= "\t" . '<div id="' . $type . 'list-' . $id . '" style="display: none;" >' . $str . '</div>';
}

View file

@ -294,16 +294,16 @@ function onepoll_run(&$argv, &$argc){
$metas = email_msg_meta($mbox,implode(',',$msgs));
if(count($metas) != count($msgs)) {
logger("onepoll: for " . $mailconf[0]['user'] . " there are ". count($msgs) . " messages but received " . count($metas) . " metas", LOGGER_DEBUG);
break;
}
else {
$msgs = array_combine($msgs, $metas);
foreach($msgs as $msg_uid => $meta) {
logger("Mail: Parsing mail ".$msg_uid, LOGGER_DATA);
$datarray = array();
// $meta = email_msg_meta($mbox,$msg_uid);
// $headers = email_msg_headers($mbox,$msg_uid);
// $meta = email_msg_meta($mbox,$msg_uid);
// $headers = email_msg_headers($mbox,$msg_uid);
$datarray['uri'] = msgid2iri(trim($meta->message_id,'<>'));
@ -346,7 +346,7 @@ function onepoll_run(&$argv, &$argc){
// look for a 'references' or an 'in-reply-to' header and try to match with a parent item we have locally.
// $raw_refs = ((x($headers,'references')) ? str_replace("\t",'',$headers['references']) : '');
// $raw_refs = ((x($headers,'references')) ? str_replace("\t",'',$headers['references']) : '');
$raw_refs = ((property_exists($meta,'references')) ? str_replace("\t",'',$meta->references) : '');
if(! trim($raw_refs))
$raw_refs = ((property_exists($meta,'in_reply_to')) ? str_replace("\t",'',$meta->in_reply_to) : '');
@ -364,7 +364,7 @@ function onepoll_run(&$argv, &$argc){
);
if(count($r))
$datarray['parent-uri'] = $r[0]['parent-uri']; // Set the parent as the top-level item
// $datarray['parent-uri'] = $r[0]['uri'];
// $datarray['parent-uri'] = $r[0]['uri'];
}
@ -455,6 +455,7 @@ function onepoll_run(&$argv, &$argc){
}
}
}
}
imap_close($mbox);
}
}

View file

@ -115,19 +115,9 @@ if(! x($_SESSION,'authenticated'))
header('X-Account-Management-Status: none');
/*
* Create the page head after setting the language
* and getting any auth credentials
*/
$a->init_pagehead();
/**
* Build the page ending -- this is stuff that goes right before
* the closing </body> tag
*/
$a->init_page_end();
/* set up page['htmlhead'] and page['end'] for the modules to use */
$a->page['htmlhead'] = '';
$a->page['end'] = '';
if(! x($_SESSION,'sysmsg'))
@ -300,8 +290,32 @@ if($a->module_loaded) {
$a->page['content'] .= $arr['content'];
}
if(function_exists(str_replace('-','_',current_theme()) . '_content_loaded')) {
$func = str_replace('-','_',current_theme()) . '_content_loaded';
$func($a);
}
}
/*
* Create the page head after setting the language
* and getting any auth credentials
*
* Moved init_pagehead() and init_page_end() to after
* all the module functions have executed so that all
* theme choices made by the modules can take effect
*/
$a->init_pagehead();
/**
* Build the page ending -- this is stuff that goes right before
* the closing </body> tag
*/
$a->init_page_end();
// If you're just visiting, let javascript take you home
if(x($_SESSION,'visitor_home'))
@ -366,7 +380,11 @@ if($a->module != 'install') {
* Build the page - now that we have all the components
*/
$a->page['htmlhead'] = replace_macros($a->page['htmlhead'], array('$stylesheet' => current_theme_url()));
if(!$a->theme['stylesheet'])
$stylesheet = current_theme_url();
else
$stylesheet = $a->theme['stylesheet'];
$a->page['htmlhead'] = replace_macros($a->page['htmlhead'], array('$stylesheet' => $stylesheet));
if($a->is_mobile || $a->is_tablet) {
if(isset($_SESSION['show-mobile']) && !$_SESSION['show-mobile']) {

View file

@ -4,6 +4,8 @@ require_once('Photo.php');
function wall_upload_post(&$a) {
logger("wall upload: starting new upload", LOGGER_DEBUG);
if($a->argc > 1) {
if(! x($_FILES,'media')) {
$nick = $a->argv[1];
@ -160,10 +162,12 @@ function wall_upload_post(&$a) {
if ($_REQUEST['hush']!='yeah') {
/*existing code*/
if(local_user() && intval(get_pconfig(local_user(),'system','plaintext')))
if(local_user() && (intval(get_pconfig(local_user(),'system','plaintext')) || x($_REQUEST['nomce'])) ) {
echo "\n\n" . '[url=' . $a->get_baseurl() . '/photos/' . $page_owner_nick . '/image/' . $hash . '][img]' . $a->get_baseurl() . "/photo/{$hash}-{$smallest}.".$ph->getExt()."[/img][/url]\n\n";
else
}
else {
echo '<br /><br /><a href="' . $a->get_baseurl() . '/photos/' . $page_owner_nick . '/image/' . $hash . '" ><img src="' . $a->get_baseurl() . "/photo/{$hash}-{$smallest}.".$ph->getExt()."\" alt=\"$basename\" /></a><br /><br />";
}
/*existing code*/
} else {

View file

@ -1,5 +1,5 @@
<div class='field checkbox'>
<div class='field checkbox' id='div_id_$field.0'>
<label for='id_$field.0'>$field.1</label>
<input type="checkbox" name='$field.0' id='id_$field.0' value="1" {{ if $field.2 }}checked="checked"{{ endif }}>
<span class='field_help'>$field.3</span>

View file

@ -5,7 +5,7 @@
<script type="text/javascript">
tinyMCE.init({ mode : "none"});
</script>-->
<script type="text/javascript" src="$baseurl/view/theme/frost/js/jquery.divgrow-1.3.1.min.js" ></script>
<script type="text/javascript" src="$baseurl/view/theme/frost-mobile/js/main.min.js" ></script>
<script type="text/javascript" src="$baseurl/js/jquery.textinputs.js" ></script>
<script type="text/javascript" src="$baseurl/view/theme/frost-mobile/js/fk.autocomplete.min.js" ></script>
<!--<script type="text/javascript" src="$baseurl/library/fancybox/jquery.fancybox-1.3.4.pack.js"></script>-->

View file

@ -1,5 +1,5 @@
<div class='field checkbox'>
<div class='field checkbox' id='div_id_$field.0'>
<label id='label_id_$field.0' for='id_$field.0'>$field.1</label>
<input type="checkbox" name='$field.0' id='id_$field.0' value="1" {{ if $field.2 }}checked="checked"{{ endif }}><br />
<span class='field_help' id='help_id_$field.0'>$field.3</span>

View file

@ -29,5 +29,5 @@
</script>
<script type="text/javascript" src="$baseurl/js/jquery.js" ></script>
<script type="text/javascript">var $j = jQuery.noConflict();</script>
<script type="text/javascript" src="$baseurl/view/theme/frost-mobile/js/main.min.js" ></script>
<script type="text/javascript" src="$baseurl/view/theme/frost-mobile/js/jquery.divgrow-1.3.1.f1.min.js" ></script>

View file

@ -0,0 +1,92 @@
/*
* Copyright (c) 2010 Simon Hibbard
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use,
* copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following
* conditions:
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
*/
/*
* Version: V1.3.1-f1
* Release: 22-12-2010
* Based on jQuery 1.4.2
*
* 2012-10-29: Modified by Zach Prezkuta to allow dynamic full heights
*/
(function ($) {
var divgrowid = 0;
$.fn.divgrow = function (options) {
var options = $.extend({}, { initialHeight: 100, moreText: "+ Show More", lessText: "- Show Less", speed: 1000, showBrackets: true }, options);
return this.each(function () {
divgrowid++;
obj = $(this);
//var fullHeight = obj.height() + 10;
obj.css('height', options.initialHeight).css('overflow', 'hidden');
if (options.showBrackets) {
obj.after('<p class="divgrow-brackets">[&hellip;]</p><a href="#" class="divgrow-showmore' + " divgrow-obj-" + divgrowid + '"' + '></a>');
}
else {
obj.after('<a href="#" class="divgrow-showmore' + " divgrow-obj-" + divgrowid + '"' + '></a>');
}
$("a.divgrow-showmore").html(options.moreText);
$("." + "divgrow-obj-" + divgrowid).toggle(function () {
//alert(obj.attr('class'));
// Set the height from the elements rel value
//var height = $(this).prevAll("div:first").attr('rel');
var fullHeight = $(this).prevAll("div:first")[0].scrollHeight + 10;
$(this).prevAll("div:first").animate({ height: fullHeight + "px" }, options.speed, function () { // Animation complete.
// Hide the overlay text when expanded, change the link text
if (options.showBrackets) {
$(this).nextAll("p.divgrow-brackets:first").fadeOut();
}
$(this).nextAll("a.divgrow-showmore:first").html(options.lessText);
});
}, function () {
$(this).prevAll("div:first").stop(true, false).animate({ height: options.initialHeight }, options.speed, function () { // Animation complete.
// show the overlay text while closed, change the link text
if (options.showBrackets) {
$(this).nextAll("p.divgrow-brackets:first").stop(true, false).fadeIn();
}
$(this).nextAll("a.divgrow-showmore:first").stop(true, false).html(options.moreText);
});
});
});
};
})(jQuery);

View file

@ -0,0 +1,30 @@
/*
* Copyright (c) 2010 Simon Hibbard
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use,
* copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following
* conditions:
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
*//*
* Version: V1.3.1-f1
* Release: 22-12-2010
* Based on jQuery 1.4.2
*
* 2012-10-29: Modified by Zach Prezkuta to allow dynamic full heights
*/(function(e){var t=0;e.fn.divgrow=function(n){var n=e.extend({},{initialHeight:100,moreText:"+ Show More",lessText:"- Show Less",speed:1e3,showBrackets:!0},n);return this.each(function(){t++,obj=e(this),obj.css("height",n.initialHeight).css("overflow","hidden"),n.showBrackets?obj.after('<p class="divgrow-brackets">[&hellip;]</p><a href="#" class="divgrow-showmore divgrow-obj-'+t+'"'+"></a>"):obj.after('<a href="#" class="divgrow-showmore divgrow-obj-'+t+'"'+"></a>"),e("a.divgrow-showmore").html(n.moreText),e(".divgrow-obj-"+t).toggle(function(){var t=e(this).prevAll("div:first")[0].scrollHeight+10;e(this).prevAll("div:first").animate({height:t+"px"},n.speed,function(){n.showBrackets&&e(this).nextAll("p.divgrow-brackets:first").fadeOut(),e(this).nextAll("a.divgrow-showmore:first").html(n.lessText)})},function(){e(this).prevAll("div:first").stop(!0,!1).animate({height:n.initialHeight},n.speed,function(){n.showBrackets&&e(this).nextAll("p.divgrow-brackets:first").stop(!0,!1).fadeIn(),e(this).nextAll("a.divgrow-showmore:first").stop(!0,!1).html(n.moreText)})})})}})(jQuery);

View file

@ -38,6 +38,8 @@
msie = $j.browser.msie ;
collapseHeight();
/* setup tooltips *//*
$j("a,.tt").each(function(){
var e = $j(this);
@ -333,21 +335,8 @@
});
var bimgs = $j(".wall-item-body > img").not(function() { return this.complete; });
var bimgcount = bimgs.length;
if (bimgcount) {
bimgs.load(function() {
bimgcount--;
if (! bimgcount) {
collapseHeight();
}
});
} else {
collapseHeight();
}
// reset vars for inserting individual items
/*prev = 'live-' + src;
@ -385,13 +374,17 @@
});
}
function collapseHeight() {
$j(".wall-item-body").each(function() {
if($j(this).height() > 310) {
if(! $j(this).hasClass('divmore')) {
function collapseHeight(elems) {
var elemName = '.wall-item-body:not(.divmore)';
if(typeof elems != 'undefined') {
elemName = elems + ' ' + elemName;
}
$j(elemName).each(function() {
if($j(this).height() > 350) {
$j('html').height($j('html').height());
$j(this).divgrow({ initialHeight: 300, showBrackets: false, speed: 0 });
$j(this).addClass('divmore');
}
$j('html').height('auto');
}
});
}
@ -542,6 +535,7 @@
else {
$j("#collapsed-comments-" + id).show();
$j("#hide-comments-" + id).html(window.showFewer);
collapseHeight("#collapsed-comments-" + id);
}
}

File diff suppressed because one or more lines are too long

View file

@ -9,7 +9,7 @@ $j(document).ready(function() {
case 'jot-header':
var uploader = new window.AjaxUpload(
'wall-image-upload',
{ action: 'wall_upload/'+window.nickname,
{ action: 'wall_upload/'+window.nickname+'?nomce=1',
name: 'userfile',
onSubmit: function(file,ext) { $j('#profile-rotator').show(); },
onComplete: function(file,response) {
@ -21,7 +21,7 @@ $j(document).ready(function() {
var file_uploader = new window.AjaxUpload(
'wall-file-upload',
{ action: 'wall_attach/'+window.nickname,
{ action: 'wall_attach/'+window.nickname+'?nomce=1',
name: 'userfile',
onSubmit: function(file,ext) { $j('#profile-rotator').show(); },
onComplete: function(file,response) {
@ -34,7 +34,7 @@ $j(document).ready(function() {
case 'msg-header':
var uploader = new window.AjaxUpload(
'prvmail-upload',
{ action: 'wall_upload/' + window.nickname,
{ action: 'wall_upload/'+window.nickname+'?nomce=1',
name: 'userfile',
onSubmit: function(file,ext) { $j('#profile-rotator').show(); },
onComplete: function(file,response) {
@ -251,14 +251,14 @@ function insertFormatting(comment,BBcode,id) {
textarea.focus();
selected = document.selection.createRange();
if (BBcode == "url"){
selected.text = "["+BBcode+"]" + "http://" + selected.text + "[/"+BBcode+"]";
selected.text = "["+BBcode+"=http://]" + selected.text + "[/"+BBcode+"]";
} else
selected.text = "["+BBcode+"]" + selected.text + "[/"+BBcode+"]";
} else if (textarea.selectionStart || textarea.selectionStart == "0") {
var start = textarea.selectionStart;
var end = textarea.selectionEnd;
if (BBcode == "url"){
textarea.value = textarea.value.substring(0, start) + "["+BBcode+"]" + "http://" + textarea.value.substring(start, end) + "[/"+BBcode+"]" + textarea.value.substring(end, textarea.value.length);
textarea.value = textarea.value.substring(0, start) + "["+BBcode+"=http://]" + textarea.value.substring(start, end) + "[/"+BBcode+"]" + textarea.value.substring(end, textarea.value.length);
} else
textarea.value = textarea.value.substring(0, start) + "["+BBcode+"]" + textarea.value.substring(start, end) + "[/"+BBcode+"]" + textarea.value.substring(end, textarea.value.length);
}

File diff suppressed because one or more lines are too long

View file

@ -24,15 +24,17 @@ div.jGrowl div.notice {
background: #511919 url("../../../images/icons/48/notice.png") no-repeat 5px center;
color: #ffffff;
padding-left: 58px;
margin: 0px;
}
div.jGrowl div.info {
background: #364e59 url("../../../images/icons/48/info.png") no-repeat 5px center;
color: #ffffff;
padding-left: 58px;
margin: 0px;
}
#jGrowl.top-right {
top: 15px;
right: 15px;
right: 10px;
}
.login-button {
@ -75,6 +77,16 @@ div.section-wrapper {
margin-left: 50px;
}
.field.checkbox label {
margin-left: auto;
float: auto;
/*margin-left: 100px;*/
}
.field.checkbox input {
width: auto;
margin-left: 30px;
}
#login_openid {
margin-top: 50px;
}

View file

@ -1,2 +1,2 @@
<link rel="stylesheet" href="$baseurl/view/theme/frost-mobile/login-style.css" type="text/css" media="all" />
<!--<link rel="stylesheet" href="$baseurl/view/theme/frost-mobile/login-style.css" type="text/css" media="all" />-->

View file

@ -65,7 +65,7 @@ img { border :0px; }
width: 384px;
}*/
code {
/*code {
font-family: Courier, monospace;
white-space: pre;
display: block;
@ -85,6 +85,24 @@ blockquote {
margin-right: 0px;
width: 260px;
overflow: hidden;
}*/
code {
font-family: Courier, monospace;
white-space: pre;
display: block;
overflow: auto;
border: 1px solid #444;
background: #EEE;
color: #444;
padding: 10px;
margin-top: 20px;
}
blockquote {
background-color: #f4f8f9;
border-left: 4px solid #dae4ee;
padding: 0.4em;
}
.icollapse-wrapper, .ccollapse-wrapper {
@ -1368,10 +1386,19 @@ input#dfrn-url {
-webkit-border-radius: 0;
}
.wall-item-content blockquote {
margin-left: 0px;
margin-right: 0px;
}
.comment .wall-item-content img {
max-width: 280px;
}
.comment .wall-item-content ul {
padding-left: 1.5em;
}
.divgrow-showmore {
display: block;
clear: both;
@ -1411,7 +1438,6 @@ input#dfrn-url {
}
.wall-item-body code {
width: 260px;
overflow: hidden;
}
@ -1421,12 +1447,6 @@ input#dfrn-url {
/* width: 280px;*/
}
.comment .wall-item-body blockquote {
margin-left: 0px;
margin-right: 0px;
width: 260px;
}
.wall-item-tools {
clear: both;
/* background-image: url("head.jpg");
@ -3404,6 +3424,7 @@ aside input[type='text'] {
}
.field .onoff {
float: left;
width: 80px;
@ -3714,6 +3735,7 @@ aside input[type='text'] {
background-size: 100% 100%;
background-image: url('images/star.png');
background-repeat: no-repeat;
opacity: 0.5;
}
/*.tagged { background-position: -48px -48px; }*/
@ -3863,15 +3885,17 @@ div.jGrowl div.notice {
background: #511919 url("../../../images/icons/48/notice.png") no-repeat 5px center;
color: #ffffff;
padding-left: 58px;
margin: 0px;
}
div.jGrowl div.info {
background: #364e59 url("../../../images/icons/48/info.png") no-repeat 5px center;
color: #ffffff;
padding-left: 58px;
margin: 0px;
}
#jGrowl.top-right {
top: 15px;
right: 15px;
right: 10px;
}
.qcomment {
border: 1px solid #EEE;
@ -4009,7 +4033,7 @@ width:650px;
}
}*/
@media only screen and (min-device-width: 768px)
/*@media only screen and (min-device-width: 768px)
{
.wall-item-body code {
width: 700px;
@ -4023,5 +4047,5 @@ width:650px;
width: 700px;
}
}
}*/

View file

@ -4,29 +4,27 @@
* Name: Frost--mobile version
* Description: Like frosted glass
* Credits: Navigation icons taken from http://iconza.com. Other icons taken from http://thenounproject.com, including: Like, Dislike, Black Lock, Unlock, Pencil, Tag, Camera, Paperclip (Marie Coons), Folder (Sergio Calcara), Chain-link (Andrew Fortnum), Speaker (Harold Kim), Quotes (Henry Ryder), Video Camera (Anas Ramadan), and Left Arrow, Right Arrow, and Delete X (all three P.J. Onori). All under Attribution (CC BY 3.0). Others from The Noun Project are public domain or No Rights Reserved (CC0).
* Version: Version 0.2.15
* Version: Version 0.2.16
* Author: Zach P <techcity@f.shmuz.in>
* Maintainer: Zach P <techcity@f.shmuz.in>
*/
$a->theme_info = array();
$a->sourcename = 'Friendica mobile web';
$a->videowidth = 250;
$a->videoheight = 200;
$a->theme_thread_allow = false;
$a->force_max_items = 10;
function frost_mobile_init(&$a) {
function frost_mobile_content_loaded(&$a) {
// I could do this in style.php, but by having the CSS in a file the browser will cache it,
// making pages load faster
if( $a->module === 'home' || $a->module === 'login' || $a->module === 'register' || $a->module === 'lostpass' ) {
$a->page['htmlhead'] = str_replace('$stylesheet', $a->get_baseurl() . '/view/theme/frost-mobile/login-style.css', $a->page['htmlhead']);
// $a->page['htmlhead'] = str_replace('$stylesheet', $a->get_baseurl() . '/view/theme/frost-mobile/login-style.css', $a->page['htmlhead']);
$a->theme['stylesheet'] = $a->get_baseurl() . '/view/theme/frost-mobile/login-style.css';
}
if( $a->module === 'login' )
$a->page['end'] .= '<script type="text/javascript"> $j(document).ready(function() { $j("#id_" + window.loginName).focus();} );</script>';
$a->sourcename = 'Friendica mobile web';
$a->videowidth = 250;
$a->videoheight = 200;
$a->theme_thread_allow = false;
$a->force_max_items = 10;
}

View file

@ -12,7 +12,8 @@
{{ if $item.owner_url }}
<div class="wall-item-photo-wrapper wwto" id="wall-item-ownerphoto-wrapper-$item.id" >
<a href="$item.owner_url" target="redir" title="$item.olinktitle" class="wall-item-photo-link" id="wall-item-ownerphoto-link-$item.id">
<img src="$item.owner_photo" class="wall-item-photo$item.osparkle" id="wall-item-ownerphoto-$item.id" style="height: 80px; width: 80px;" alt="$item.owner_name" /></a>
<img src="$item.owner_photo" class="wall-item-photo$item.osparkle" id="wall-item-ownerphoto-$item.id" style="height: 80px; width: 80px;" alt="$item.owner_name" onError="this.src='../../../images/person-48.jpg';" />
</a>
</div>
<div class="wall-item-arrowphoto-wrapper" ><img src="images/larrow.gif" alt="$item.wall" /></div>
{{ endif }}
@ -21,7 +22,8 @@
onmouseout="t$item.id=setTimeout('closeMenu(\'wall-item-photo-menu-button-$item.id\'); closeMenu(\'wall-item-photo-menu-$item.id\');',200)">-->
<div class="wall-item-photo-wrapper{{ if $item.owner_url }} wwfrom{{ endif }}" id="wall-item-photo-wrapper-$item.id">
<a href="$item.profile_url" target="redir" title="$item.linktitle" class="wall-item-photo-link" id="wall-item-photo-link-$item.id">
<img src="$item.thumb" class="wall-item-photo$item.sparkle" id="wall-item-photo-$item.id" style="height: 80px; width: 80px;" alt="$item.name" /></a>
<img src="$item.thumb" class="wall-item-photo$item.sparkle" id="wall-item-photo-$item.id" style="height: 80px; width: 80px;" alt="$item.name" onError="this.src='../../../images/person-48.jpg';" />
</a>
<!--<span onclick="openClose('wall-item-photo-menu-$item.id');" class="fakelink wall-item-photo-menu-button" id="wall-item-photo-menu-button-$item.id">menu</span>
<div class="wall-item-photo-menu" id="wall-item-photo-menu-$item.id">
<ul class="wall-item-photo-menu" id="wall-item-photo-menu-$item.id">

View file

@ -7,7 +7,7 @@
</script>
<script type="text/javascript" src="$baseurl/js/jquery.js" ></script>
<script type="text/javascript">var $j = jQuery.noConflict();</script>
<script type="text/javascript" src="$baseurl/view/theme/frost/js/jquery.divgrow-1.3.1.min.js" ></script>
<script type="text/javascript" src="$baseurl/view/theme/frost/js/jquery.divgrow-1.3.1.f1.min.js" ></script>
<script type="text/javascript" src="$baseurl/js/jquery.textinputs.js" ></script>
<script type="text/javascript" src="$baseurl/view/theme/frost/js/fk.autocomplete.min.js" ></script>
<script type="text/javascript" src="$baseurl/library/fancybox/jquery.fancybox-1.3.4.pack.js"></script>
@ -15,6 +15,6 @@
<script type="text/javascript" src="$baseurl/library/jgrowl/jquery.jgrowl_minimized.js"></script>
<script type="text/javascript" src="$baseurl/view/theme/frost/js/acl.min.js" ></script>
<script type="text/javascript" src="$baseurl/js/webtoolkit.base64.min.js" ></script>
<script type="text/javascript" src="$baseurl/view/theme/frost/js/theme.min.js"></script>
<script type="text/javascript" src="$baseurl/view/theme/frost/js/main.min.js" ></script>
<script type="text/javascript" src="$baseurl/view/theme/frost/js/theme.min.js"></script>

View file

@ -0,0 +1,92 @@
/*
* Copyright (c) 2010 Simon Hibbard
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use,
* copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following
* conditions:
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
*/
/*
* Version: V1.3.1-f1
* Release: 22-12-2010
* Based on jQuery 1.4.2
*
* 2012-10-29: Modified by Zach Prezkuta to allow dynamic full heights
*/
(function ($) {
var divgrowid = 0;
$.fn.divgrow = function (options) {
var options = $.extend({}, { initialHeight: 100, moreText: "+ Show More", lessText: "- Show Less", speed: 1000, showBrackets: true }, options);
return this.each(function () {
divgrowid++;
obj = $(this);
//var fullHeight = obj.height() + 10;
obj.css('height', options.initialHeight).css('overflow', 'hidden');
if (options.showBrackets) {
obj.after('<p class="divgrow-brackets">[&hellip;]</p><a href="#" class="divgrow-showmore' + " divgrow-obj-" + divgrowid + '"' + '></a>');
}
else {
obj.after('<a href="#" class="divgrow-showmore' + " divgrow-obj-" + divgrowid + '"' + '></a>');
}
$("a.divgrow-showmore").html(options.moreText);
$("." + "divgrow-obj-" + divgrowid).toggle(function () {
//alert(obj.attr('class'));
// Set the height from the elements rel value
//var height = $(this).prevAll("div:first").attr('rel');
var fullHeight = $(this).prevAll("div:first")[0].scrollHeight + 10;
$(this).prevAll("div:first").animate({ height: fullHeight + "px" }, options.speed, function () { // Animation complete.
// Hide the overlay text when expanded, change the link text
if (options.showBrackets) {
$(this).nextAll("p.divgrow-brackets:first").fadeOut();
}
$(this).nextAll("a.divgrow-showmore:first").html(options.lessText);
});
}, function () {
$(this).prevAll("div:first").stop(true, false).animate({ height: options.initialHeight }, options.speed, function () { // Animation complete.
// show the overlay text while closed, change the link text
if (options.showBrackets) {
$(this).nextAll("p.divgrow-brackets:first").stop(true, false).fadeIn();
}
$(this).nextAll("a.divgrow-showmore:first").stop(true, false).html(options.moreText);
});
});
});
};
})(jQuery);

View file

@ -0,0 +1,30 @@
/*
* Copyright (c) 2010 Simon Hibbard
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use,
* copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following
* conditions:
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
*//*
* Version: V1.3.1-f1
* Release: 22-12-2010
* Based on jQuery 1.4.2
*
* 2012-10-29: Modified by Zach Prezkuta to allow dynamic full heights
*/(function(e){var t=0;e.fn.divgrow=function(n){var n=e.extend({},{initialHeight:100,moreText:"+ Show More",lessText:"- Show Less",speed:1e3,showBrackets:!0},n);return this.each(function(){t++,obj=e(this),obj.css("height",n.initialHeight).css("overflow","hidden"),n.showBrackets?obj.after('<p class="divgrow-brackets">[&hellip;]</p><a href="#" class="divgrow-showmore divgrow-obj-'+t+'"'+"></a>"):obj.after('<a href="#" class="divgrow-showmore divgrow-obj-'+t+'"'+"></a>"),e("a.divgrow-showmore").html(n.moreText),e(".divgrow-obj-"+t).toggle(function(){var t=e(this).prevAll("div:first")[0].scrollHeight+10;e(this).prevAll("div:first").animate({height:t+"px"},n.speed,function(){n.showBrackets&&e(this).nextAll("p.divgrow-brackets:first").fadeOut(),e(this).nextAll("a.divgrow-showmore:first").html(n.lessText)})},function(){e(this).prevAll("div:first").stop(!0,!1).animate({height:n.initialHeight},n.speed,function(){n.showBrackets&&e(this).nextAll("p.divgrow-brackets:first").stop(!0,!1).fadeIn(),e(this).nextAll("a.divgrow-showmore:first").stop(!0,!1).html(n.moreText)})})})}})(jQuery);

View file

@ -38,6 +38,8 @@
msie = $j.browser.msie ;
collapseHeight();
/* setup tooltips *//*
$j("a,.tt").each(function(){
var e = $j(this);
@ -360,31 +362,22 @@
/* autocomplete @nicknames */
$j(".comment-edit-form textarea").contact_autocomplete(baseurl+"/acl");
var bimgs = $j(".wall-item-body > img").not(function() { return this.complete; });
var bimgcount = bimgs.length;
if (bimgcount) {
bimgs.load(function() {
bimgcount--;
if (! bimgcount) {
collapseHeight();
}
});
} else {
collapseHeight();
}
});
}
function collapseHeight() {
$j(".wall-item-body").each(function() {
if($j(this).height() > 410) {
if(! $j(this).hasClass('divmore')) {
$j(this).divgrow({ initialHeight: 400, showBrackets: false, speed: 300 });
function collapseHeight(elems) {
var elemName = '.wall-item-body:not(.divmore)';
if(typeof elems != 'undefined') {
elemName = elems + ' ' + elemName;
}
$j(elemName).each(function() {
if($j(this).height() > 450) {
$j('html').height($j('html').height());
$j(this).divgrow({ initialHeight: 400, showBrackets: false, speed: 0 });
$j(this).addClass('divmore');
}
$j('html').height('auto');
}
});
}
@ -535,6 +528,7 @@
else {
$j("#collapsed-comments-" + id).show();
$j("#hide-comments-" + id).html(window.showFewer);
collapseHeight("#collapsed-comments-" + id);
}
}

File diff suppressed because one or more lines are too long

View file

@ -508,14 +508,14 @@ function insertFormatting(comment,BBcode,id) {
textarea.focus();
selected = document.selection.createRange();
if (BBcode == "url"){
selected.text = "["+BBcode+"]" + "http://" + selected.text + "[/"+BBcode+"]";
selected.text = "["+BBcode+"=http://]" + selected.text + "[/"+BBcode+"]";
} else
selected.text = "["+BBcode+"]" + selected.text + "[/"+BBcode+"]";
} else if (textarea.selectionStart || textarea.selectionStart == "0") {
var start = textarea.selectionStart;
var end = textarea.selectionEnd;
if (BBcode == "url"){
textarea.value = textarea.value.substring(0, start) + "["+BBcode+"]" + "http://" + textarea.value.substring(start, end) + "[/"+BBcode+"]" + textarea.value.substring(end, textarea.value.length);
textarea.value = textarea.value.substring(0, start) + "["+BBcode+"=http://]" + textarea.value.substring(start, end) + "[/"+BBcode+"]" + textarea.value.substring(end, textarea.value.length);
} else
textarea.value = textarea.value.substring(0, start) + "["+BBcode+"]" + textarea.value.substring(start, end) + "[/"+BBcode+"]" + textarea.value.substring(end, textarea.value.length);
}

File diff suppressed because one or more lines are too long

View file

@ -78,6 +78,15 @@ div.section-wrapper {
width: 200px;
}
.field.checkbox label {
position: auto;
/*margin-left: 100px;*/
}
.field.checkbox input {
width: auto;
margin-left: 140px;
}
/*.openid input {*/
#id_openid_url, .openid input {
background: url(login-bg.gif) no-repeat;

View file

@ -1,2 +1,2 @@
<link rel="stylesheet" href="$baseurl/view/theme/frost/login-style.css" type="text/css" media="all" />
<!--<link rel="stylesheet" href="$baseurl/view/theme/frost/login-style.css" type="text/css" media="all" />-->

View file

@ -85,6 +85,7 @@ blockquote {
}
.hide-comments-outer:hover {
opacity: 1.0;
border-bottom: 1px solid #DDD; /* manually prevent the border from changing color */
}
.hide-comments {
margin-left: 5px;
@ -3418,18 +3419,18 @@ aside input[type='text'] {
background-repeat: no-repeat;
}
/*.dislike { background-position: -112px 0px;}*/
.icon.dislike {
.tool.dislike {
display: block; width: 15px; height: 16px;/* 23 24*/
background-size: 100% 100%;
background-image: url('images/disapprove-16.png');
background-repeat: no-repeat;
opacity: 0.4;
}
.icon.dislike:hover {
.tool.dislike:hover {
opacity: 1.0;
}
/*.like { background-position: -128px 0px;}*/
.icon.like {
.tool.like {
display: block; width: 15px; height: 16px;/* 23 24*/
margin-right: 6px;
background-size: 100% 100%;
@ -3437,7 +3438,7 @@ aside input[type='text'] {
background-repeat: no-repeat;
opacity: 0.4;
}
.icon.like:hover {
.tool.like:hover {
opacity: 1.0;
}
/*.link { background-position: -144px 0px;}*/
@ -3466,14 +3467,14 @@ aside input[type='text'] {
.pause { background-position: -48px -16px;}
.play { background-position: -64px -16px;}
/*.pencil { background-position: -80px -16px;}*/
.icon.pencil {
.tool.pencil {
display: block; width: 16px; height: 16px;
background-size: 100% 100%;
background-image: url('images/pencil-16.png');
background-repeat: no-repeat;
opacity: 0.4;
}
.icon.pencil:hover {
.tool.pencil:hover {
opacity: 1.0;
}
/*.small-pencil { background-position: -96px -16px;}*/
@ -3488,14 +3489,14 @@ aside input[type='text'] {
opacity: 1.0;
}
/*.recycle { background-position: -112px -16px;}*/
.icon.recycle {
.tool.recycle {
display: block; width: 16px; height: 16px;/*24 23*/
background-size: 100% 100%;
background-image: url('images/recycle-16.png');
background-repeat: no-repeat;
opacity: 0.4;
}
.icon.recycle:hover {
.tool.recycle:hover {
opacity: 1.0;
}
/*.remote-link { background-position: -128px -16px;}*/
@ -3556,32 +3557,32 @@ aside input[type='text'] {
.off { background-position: 0px -48px; }
/*.starred { background-position: -16px -48px; }*/
.icon.starred {
.tool.starred {
display: block; width: 16px; height: 16px;
background-size: 100% 100%;
background-image: url('images/star-yellow-16.png');
background-repeat: no-repeat;
}
/*.unstarred { background-position: -32px -48px; }*/
.icon.unstarred {
.tool.unstarred {
display: block; width: 16px; height: 16px;
background-size: 100% 100%;
background-image: url('images/star-16.png');
background-repeat: no-repeat;
opacity: 0.4;
}
.icon.unstarred:hover {
.tool.unstarred:hover {
opacity: 1.0;
}
/*.tagged { background-position: -48px -48px; }*/
.icon.tagged {
.tool.tagged {
display: block; width: 16px; height: 16px;
background-size: 100% 100%;
background-image: url('images/tag-16.png');
background-repeat: no-repeat;
opacity: 0.4;
}
.icon.tagged:hover {
.tool.tagged:hover {
opacity: 1.0;
}
.yellow { background-position: -64px -48px; }

View file

@ -4,25 +4,26 @@
* Name: Frost
* Description: Like frosted glass
* Credits: Navigation icons taken from http://iconza.com. Other icons taken from http://thenounproject.com, including: Like, Dislike, Black Lock, Unlock, Pencil, Tag, Camera, Paperclip (Marie Coons), Folder (Sergio Calcara), Chain-link (Andrew Fortnum), Speaker (Harold Kim), Quotes (Henry Ryder), Video Camera (Anas Ramadan), and Left Arrow, Right Arrow, and Delete X (all three P.J. Onori). All under Attribution (CC BY 3.0). Others from The Noun Project are public domain or No Rights Reserved (CC0).
* Version: Version 0.3
* Version: Version 0.3.1
* Author: Zach P <techcity@f.shmuz.in>
* Maintainer: Zach P <techcity@f.shmuz.in>
*/
$a->theme_info = array();
$a->videowidth = 400;
$a->videoheight = 330;
$a->theme_thread_allow = false;
function frost_init(&$a) {
function frost_content_loaded(&$a) {
// I could do this in style.php, but by having the CSS in a file the browser will cache it,
// making pages load faster
if( $a->module === 'home' || $a->module === 'login' || $a->module === 'register' || $a->module === 'lostpass' ) {
$a->page['htmlhead'] = str_replace('$stylesheet', $a->get_baseurl() . '/view/theme/frost/login-style.css', $a->page['htmlhead']);
//$a->page['htmlhead'] = str_replace('$stylesheet', $a->get_baseurl() . '/view/theme/frost/login-style.css', $a->page['htmlhead']);
$a->theme['stylesheet'] = $a->get_baseurl() . '/view/theme/frost/login-style.css';
}
if( $a->module === 'login' )
$a->page['end'] .= '<script type="text/javascript"> $j(document).ready(function() { $j("#id_" + window.loginName).focus();} );</script>';
$a->videowidth = 400;
$a->videoheight = 330;
$a->theme_thread_allow = false;
}

View file

@ -12,7 +12,8 @@
{{ if $item.owner_url }}
<div class="wall-item-photo-wrapper wwto" id="wall-item-ownerphoto-wrapper-$item.id" >
<a href="$item.owner_url" target="redir" title="$item.olinktitle" class="wall-item-photo-link" id="wall-item-ownerphoto-link-$item.id">
<img src="$item.owner_photo" class="wall-item-photo$item.osparkle" id="wall-item-ownerphoto-$item.id" style="height: 80px; width: 80px;" alt="$item.owner_name" /></a>
<img src="$item.owner_photo" class="wall-item-photo$item.osparkle" id="wall-item-ownerphoto-$item.id" style="height: 80px; width: 80px;" alt="$item.owner_name" onError="this.src='../../../images/person-48.jpg';" />
</a>
</div>
<div class="wall-item-arrowphoto-wrapper" ><img src="images/larrow.gif" alt="$item.wall" /></div>
{{ endif }}
@ -20,7 +21,8 @@
onmouseover="if (typeof t$item.id != 'undefined') clearTimeout(t$item.id); openMenu('wall-item-photo-menu-button-$item.id')"
onmouseout="t$item.id=setTimeout('closeMenu(\'wall-item-photo-menu-button-$item.id\'); closeMenu(\'wall-item-photo-menu-$item.id\');',200)">
<a href="$item.profile_url" target="redir" title="$item.linktitle" class="wall-item-photo-link" id="wall-item-photo-link-$item.id">
<img src="$item.thumb" class="wall-item-photo$item.sparkle" id="wall-item-photo-$item.id" style="height: 80px; width: 80px;" alt="$item.name" /></a>
<img src="$item.thumb" class="wall-item-photo$item.sparkle" id="wall-item-photo-$item.id" style="height: 80px; width: 80px;" alt="$item.name" onError="this.src='../../../images/person-48.jpg';" />
</a>
<span onclick="openClose('wall-item-photo-menu-$item.id');" class="fakelink wall-item-photo-menu-button" id="wall-item-photo-menu-button-$item.id">menu</span>
<!-- <div class="wall-item-photo-menu" id="wall-item-photo-menu-$item.id">-->
<ul class="wall-item-photo-menu" id="wall-item-photo-menu-$item.id">
@ -63,9 +65,9 @@
<div class="wall-item-tools" id="wall-item-tools-$item.id">
{{ if $item.vote }}
<div class="wall-item-like-buttons" id="wall-item-like-buttons-$item.id">
<a href="#" class="icon like" title="$item.vote.like.0" onclick="dolike($item.id,'like'); return false"></a>
<a href="#" class="icon dislike" title="$item.vote.dislike.0" onclick="dolike($item.id,'dislike'); return false"></a>
{{ if $item.vote.share }}<a href="#" class="icon recycle wall-item-share-buttons" title="$item.vote.share.0" onclick="jotShare($item.id); return false"></a>{{ endif }}
<a href="#" class="tool like" title="$item.vote.like.0" onclick="dolike($item.id,'like'); return false"></a>
<a href="#" class="tool dislike" title="$item.vote.dislike.0" onclick="dolike($item.id,'dislike'); return false"></a>
{{ if $item.vote.share }}<a href="#" class="tool recycle wall-item-share-buttons" title="$item.vote.share.0" onclick="jotShare($item.id); return false"></a>{{ endif }}
<img id="like-rotator-$item.id" class="like-rotator" src="images/rotator.gif" alt="$item.wait" title="$item.wait" style="display: none;" />
</div>
{{ endif }}
@ -73,12 +75,12 @@
<!--<div class="wall-item-links-wrapper">--><a href="$item.plink.href" title="$item.plink.title" target="external-link" class="wall-item-links-wrapper icon remote-link$item.sparkle"></a><!--</div>-->
{{ endif }}
{{ if $item.edpost }}
<a class="editpost icon pencil" href="$item.edpost.0" title="$item.edpost.1"></a>
<a class="editpost tool pencil" href="$item.edpost.0" title="$item.edpost.1"></a>
{{ endif }}
{{ if $item.star }}
<a href="#" id="starred-$item.id" onclick="dostar($item.id); return false;" class="star-item icon $item.isstarred" title="$item.star.toggle"></a>
<a href="#" id="tagger-$item.id" onclick="itemTag($item.id); return false;" class="tag-item icon tagged" title="$item.star.tagger"></a>
<a href="#" id="starred-$item.id" onclick="dostar($item.id); return false;" class="star-item tool $item.isstarred" title="$item.star.toggle"></a>
<a href="#" id="tagger-$item.id" onclick="itemTag($item.id); return false;" class="tag-item tool tagged" title="$item.star.tagger"></a>
{{ endif }}
{{ if $item.filer }}
<a href="#" id="filer-$item.id" onclick="itemFiler($item.id); return false;" class="filer-item filer-icon" title="$item.filer"></a>