diff --git a/boot.php b/boot.php
index 3a541a272..0de2b0afc 100644
--- a/boot.php
+++ b/boot.php
@@ -8,11 +8,12 @@ require_once('include/datetime.php');
require_once('include/pgettext.php');
require_once('include/nav.php');
require_once('include/cache.php');
+require_once('library/Mobile_Detect/Mobile_Detect.php');
define ( 'FRIENDICA_PLATFORM', 'Friendica');
-define ( 'FRIENDICA_VERSION', '3.0.1412' );
+define ( 'FRIENDICA_VERSION', '3.0.1415' );
define ( 'DFRN_PROTOCOL_VERSION', '2.23' );
-define ( 'DB_UPDATE_VERSION', 1153 );
+define ( 'DB_UPDATE_VERSION', 1154 );
define ( 'EOL', "
\r\n" );
define ( 'ATOM_TIME', 'Y-m-d\TH:i:s\Z' );
@@ -559,7 +560,7 @@ if(! class_exists('App')) {
$interval = 40000;
$this->page['title'] = $this->config['sitename'];
- $tpl = file_get_contents('view/head.tpl');
+ $tpl = get_markup_template('head.tpl');
$this->page['htmlhead'] = replace_macros($tpl,array(
'$baseurl' => $this->get_baseurl(), // FIXME for z_path!!!!
'$local_user' => local_user(),
@@ -747,9 +748,10 @@ if(! function_exists('check_config')) {
// If the update fails or times-out completely you may need to
// delete the config entry to try again.
- if(get_config('database','update_' . $x))
+ $t = get_config('database','update_' . $x);
+ if($t !== false)
break;
- set_config('database','update_' . $x, '1');
+ set_config('database','update_' . $x, time());
// call the specific update
@@ -772,13 +774,14 @@ if(! function_exists('check_config')) {
. 'Content-transfer-encoding: 8bit' );
//try the logger
logger('CRITICAL: Update Failed: '. $x);
+ break;
}
- else
+ else {
set_config('database','update_' . $x, 'success');
-
+ set_config('system','build', $x + 1);
+ }
}
}
- set_config('system','build', DB_UPDATE_VERSION);
}
}
}
@@ -1441,9 +1444,18 @@ if(! function_exists('current_theme')) {
$a = get_app();
- $system_theme = ((isset($a->config['system']['theme'])) ? $a->config['system']['theme'] : '');
- $theme_name = ((isset($_SESSION) && x($_SESSION,'theme')) ? $_SESSION['theme'] : $system_theme);
+ $mobile_detect = new Mobile_Detect();
+ $is_mobile = $mobile_detect->isMobile() || $mobile_detect->isTablet();
+ if($is_mobile) {
+ $system_theme = ((isset($a->config['system']['mobile-theme'])) ? $a->config['system']['mobile-theme'] : '');
+ $theme_name = ((isset($_SESSION) && x($_SESSION,'mobile-theme')) ? $_SESSION['mobile-theme'] : $system_theme);
+ }
+ if(!$is_mobile || ($system_theme === '' && $theme_name === '')) {
+ $system_theme = ((isset($a->config['system']['theme'])) ? $a->config['system']['theme'] : '');
+ $theme_name = ((isset($_SESSION) && x($_SESSION,'theme')) ? $_SESSION['theme'] : $system_theme);
+ }
+
if($theme_name &&
(file_exists('view/theme/' . $theme_name . '/style.css') ||
file_exists('view/theme/' . $theme_name . '/style.php')))
@@ -1579,18 +1591,21 @@ if(! function_exists('profile_tabs')){
'url' => $url,
'sel' => ((!isset($tab)&&$a->argv[0]=='profile')?'active':''),
'title' => t('Status Messages and Posts'),
+ 'id' => 'status-tab',
),
array(
'label' => t('Profile'),
'url' => $url.'/?tab=profile',
'sel' => ((isset($tab) && $tab=='profile')?'active':''),
'title' => t('Profile Details'),
+ 'id' => 'profile-tab',
),
array(
'label' => t('Photos'),
'url' => $a->get_baseurl() . '/photos/' . $nickname,
'sel' => ((!isset($tab)&&$a->argv[0]=='photos')?'active':''),
'title' => t('Photo Albums'),
+ 'id' => 'photo-tab',
),
);
@@ -1600,12 +1615,14 @@ if(! function_exists('profile_tabs')){
'url' => $a->get_baseurl() . '/events',
'sel' =>((!isset($tab)&&$a->argv[0]=='events')?'active':''),
'title' => t('Events and Calendar'),
+ 'id' => 'events-tab',
);
$tabs[] = array(
'label' => t('Personal Notes'),
'url' => $a->get_baseurl() . '/notes',
'sel' =>((!isset($tab)&&$a->argv[0]=='notes')?'active':''),
'title' => t('Only You Can See This'),
+ 'id' => 'notes-tab',
);
}
diff --git a/database.sql b/database.sql
index 1d0a32176..80ce05ba0 100644
--- a/database.sql
+++ b/database.sql
@@ -456,6 +456,7 @@ CREATE TABLE IF NOT EXISTS `hook` (
`hook` char(255) NOT NULL,
`file` char(255) NOT NULL,
`function` char(255) NOT NULL,
+ `priority` int(11) UNSIGNED NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
diff --git a/include/diaspora.php b/include/diaspora.php
index af9a91f02..a23c11bd2 100755
--- a/include/diaspora.php
+++ b/include/diaspora.php
@@ -2120,7 +2120,6 @@ function diaspora_unshare($me,$contact) {
}
-
function diaspora_send_status($item,$owner,$contact,$public_batch = false) {
$a = get_app();
@@ -2154,8 +2153,12 @@ function diaspora_send_status($item,$owner,$contact,$public_batch = false) {
}
}
*/
- // Removal of tags
- $body = preg_replace('/#\[url\=(\w+.*?)\](\w+.*?)\[\/url\]/i', '#$2', $body);
+ /**
+ * Transform #tags, strip off the [url] and replace spaces with underscore
+ */
+ $body = preg_replace_callback('/#\[url\=(\w+.*?)\](\w+.*?)\[\/url\]/i', create_function('$match',
+ 'return \'#\'. str_replace(\' \', \'_\', $match[2]);'
+ ), $body);
//if(strlen($title))
// $body = "[b]".html_entity_decode($title)."[/b]\n\n".$body;
diff --git a/include/items.php b/include/items.php
index fe729000c..701a7ada7 100755
--- a/include/items.php
+++ b/include/items.php
@@ -2107,6 +2107,118 @@ function local_delivery($importer,$data) {
$feed->enable_order_by_date(false);
$feed->init();
+
+ if($feed->error())
+ logger('local_delivery: Error parsing XML: ' . $feed->error());
+
+
+ // Check at the feed level for updated contact name and/or photo
+
+ $name_updated = '';
+ $new_name = '';
+ $photo_timestamp = '';
+ $photo_url = '';
+
+
+ $rawtags = $feed->get_feed_tags( NAMESPACE_DFRN, 'owner');
+ if(! $rawtags)
+ $rawtags = $feed->get_feed_tags( SIMPLEPIE_NAMESPACE_ATOM_10, 'author');
+ if($rawtags) {
+ $elems = $rawtags[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_10];
+ if($elems['name'][0]['attribs'][NAMESPACE_DFRN]['updated']) {
+ $name_updated = $elems['name'][0]['attribs'][NAMESPACE_DFRN]['updated'];
+ $new_name = $elems['name'][0]['data'];
+ }
+ if((x($elems,'link')) && ($elems['link'][0]['attribs']['']['rel'] === 'photo') && ($elems['link'][0]['attribs'][NAMESPACE_DFRN]['updated'])) {
+ $photo_timestamp = datetime_convert('UTC','UTC',$elems['link'][0]['attribs'][NAMESPACE_DFRN]['updated']);
+ $photo_url = $elems['link'][0]['attribs']['']['href'];
+ }
+ }
+
+ if((is_array($contact)) && ($photo_timestamp) && (strlen($photo_url)) && ($photo_timestamp > $importer['avatar-date'])) {
+ logger('local_delivery: Updating photo for ' . $importer['name']);
+ require_once("Photo.php");
+ $photo_failure = false;
+ $have_photo = false;
+
+ $r = q("SELECT `resource-id` FROM `photo` WHERE `contact-id` = %d AND `uid` = %d LIMIT 1",
+ intval($importer['id']),
+ intval($importer['importer_uid'])
+ );
+ if(count($r)) {
+ $resource_id = $r[0]['resource-id'];
+ $have_photo = true;
+ }
+ else {
+ $resource_id = photo_new_resource();
+ }
+
+ $img_str = fetch_url($photo_url,true);
+ // guess mimetype from headers or filename
+ $type = guess_image_type($photo_url,true);
+
+
+ $img = new Photo($img_str, $type);
+ if($img->is_valid()) {
+ if($have_photo) {
+ q("DELETE FROM `photo` WHERE `resource-id` = '%s' AND `contact-id` = %d AND `uid` = %d",
+ dbesc($resource_id),
+ intval($importer['id']),
+ intval($importer['importer_uid'])
+ );
+ }
+
+ $img->scaleImageSquare(175);
+
+ $hash = $resource_id;
+ $r = $img->store($importer['importer_uid'], $importer['id'], $hash, basename($photo_url), 'Contact Photos', 4);
+
+ $img->scaleImage(80);
+ $r = $img->store($importer['importer_uid'], $importer['id'], $hash, basename($photo_url), 'Contact Photos', 5);
+
+ $img->scaleImage(48);
+ $r = $img->store($importer['importer_uid'], $importer['id'], $hash, basename($photo_url), 'Contact Photos', 6);
+
+ $a = get_app();
+
+ q("UPDATE `contact` SET `avatar-date` = '%s', `photo` = '%s', `thumb` = '%s', `micro` = '%s'
+ WHERE `uid` = %d AND `id` = %d LIMIT 1",
+ dbesc(datetime_convert()),
+ dbesc($a->get_baseurl() . '/photo/' . $hash . '-4.'.$img->getExt()),
+ dbesc($a->get_baseurl() . '/photo/' . $hash . '-5.'.$img->getExt()),
+ dbesc($a->get_baseurl() . '/photo/' . $hash . '-6.'.$img->getExt()),
+ intval($importer['importer_uid']),
+ intval($importer['id'])
+ );
+ }
+ }
+
+ if((is_array($contact)) && ($name_updated) && (strlen($new_name)) && ($name_updated > $contact['name-date'])) {
+ $r = q("select * from contact where uid = %d and id = %d limit 1",
+ intval($importer['importer_uid']),
+ intval($importer['id'])
+ );
+
+ $x = q("UPDATE `contact` SET `name` = '%s', `name-date` = '%s' WHERE `uid` = %d AND `id` = %d LIMIT 1",
+ dbesc(notags(trim($new_name))),
+ dbesc(datetime_convert()),
+ intval($importer['importer_uid']),
+ intval($importer['id'])
+ );
+
+ // do our best to update the name on content items
+
+ if(count($r)) {
+ q("update item set `author-name` = '%s' where `author-name` = '%s' and `author-link` = '%s' and uid = %d",
+ dbesc(notags(trim($new_name))),
+ dbesc($r[0]['name']),
+ dbesc($r[0]['url']),
+ intval($importer['importer_uid'])
+ );
+ }
+ }
+
+
/*
// Currently unsupported - needs a lot of work
$reloc = $feed->get_feed_tags( NAMESPACE_DFRN, 'relocate' );
diff --git a/include/plugin.php b/include/plugin.php
index ffa562273..8f6d6ea98 100644
--- a/include/plugin.php
+++ b/include/plugin.php
@@ -111,7 +111,7 @@ function reload_plugins() {
if(! function_exists('register_hook')) {
-function register_hook($hook,$file,$function) {
+function register_hook($hook,$file,$function,$priority=0) {
$r = q("SELECT * FROM `hook` WHERE `hook` = '%s' AND `file` = '%s' AND `function` = '%s' LIMIT 1",
dbesc($hook),
@@ -121,10 +121,11 @@ function register_hook($hook,$file,$function) {
if(count($r))
return true;
- $r = q("INSERT INTO `hook` (`hook`, `file`, `function`) VALUES ( '%s', '%s', '%s' ) ",
+ $r = q("INSERT INTO `hook` (`hook`, `file`, `function`, `priority`) VALUES ( '%s', '%s', '%s', '%s' ) ",
dbesc($hook),
dbesc($file),
- dbesc($function)
+ dbesc($function),
+ dbesc($priority)
);
return $r;
}}
@@ -145,7 +146,7 @@ if(! function_exists('load_hooks')) {
function load_hooks() {
$a = get_app();
$a->hooks = array();
- $r = q("SELECT * FROM `hook` WHERE 1");
+ $r = q("SELECT * FROM `hook` WHERE 1 ORDER BY `priority` DESC");
if(count($r)) {
foreach($r as $rr) {
if(! array_key_exists($rr['hook'],$a->hooks))
@@ -255,6 +256,7 @@ function get_theme_info($theme){
'author' => array(),
'maintainer' => array(),
'version' => "",
+ 'credits' => "",
'experimental' => false,
'unsupported' => false
);
diff --git a/include/text.php b/include/text.php
index bfa832425..41030e677 100644
--- a/include/text.php
+++ b/include/text.php
@@ -403,7 +403,7 @@ function load_view_file($s) {
return file_get_contents("$d/$lang/$b");
$theme = current_theme();
-
+
if(file_exists("$d/theme/$theme/$b"))
return file_get_contents("$d/theme/$theme/$b");
diff --git a/js/main.js b/js/main.js
index a5ce89460..c7db9a069 100644
--- a/js/main.js
+++ b/js/main.js
@@ -641,7 +641,7 @@ Array.prototype.remove = function(item) {
function previewTheme(elm) {
theme = $(elm).val();
$.getJSON('pretheme?f=&theme=' + theme,function(data) {
- $('#theme-preview').html('
' + data.desc + '
');
+ $('#theme-preview').html('' + data.desc + '
' + data.version + '
' + data.credits + '
');
});
}
diff --git a/library/Mobile_Detect/Mobile_Detect.php b/library/Mobile_Detect/Mobile_Detect.php
new file mode 100644
index 000000000..4b8c9fecb
--- /dev/null
+++ b/library/Mobile_Detect/Mobile_Detect.php
@@ -0,0 +1,221 @@
+isMobile() or $detect->isTablet()
+ *
+ * For more specific usage see the documentation navigate to:
+ * http://code.google.com/p/php-mobile-detect/wiki/Mobile_Detect
+ *
+ * @license http://www.opensource.org/licenses/mit-license.php The MIT License
+ */
+
+class Mobile_Detect {
+
+ protected $detectionRules;
+ protected $userAgent = null;
+ protected $accept = null;
+ // Assume the visitor has a desktop environment.
+ protected $isMobile = false;
+ protected $isTablet = false;
+ protected $phoneDeviceName = null;
+ protected $tabletDevicename = null;
+ protected $operatingSystemName = null;
+ protected $userAgentName = null;
+ // List of mobile devices (phones)
+ protected $phoneDevices = array(
+ 'iPhone' => '(iPhone.*Mobile|iPod|iTunes)',
+ 'BlackBerry' => 'BlackBerry|rim[0-9]+',
+ 'HTC' => 'HTC|HTC.*(6800|8100|8900|A7272|S510e|C110e|Legend|Desire|T8282)|APX515CKT|Qtek9090|APA9292KT',
+ 'Nexus' => 'Nexus One|Nexus S|Galaxy.*Nexus|Android.*Nexus',
+ 'Dell' => 'Dell.*Streak|Dell.*Aero|Dell.*Venue|DELL.*Venue Pro|Dell Flash|Dell Smoke|Dell Mini 3iX|XCD28|XCD35',
+ 'Motorola' => '\bDroid\b.*Build|DROIDX|HRI39|MOT\-|A1260|A1680|A555|A853|A855|A953|A955|A956|Motorola.*ELECTRIFY|Motorola.*i1|i867|i940|MB200|MB300|MB501|MB502|MB508|MB511|MB520|MB525|MB526|MB611|MB612|MB632|MB810|MB855|MB860|MB861|MB865|MB870|ME501|ME502|ME511|ME525|ME600|ME632|ME722|ME811|ME860|ME863|ME865|MT620|MT710|MT716|MT720|MT810|MT870|MT917|Motorola.*TITANIUM|WX435|WX445|XT300|XT301|XT311|XT316|XT317|XT319|XT320|XT390|XT502|XT530|XT531|XT532|XT535|XT603|XT610|XT611|XT615|XT681|XT701|XT702|XT711|XT720|XT800|XT806|XT860|XT862|XT875|XT882|XT883|XT894|XT909|XT910|XT912|XT928',
+ 'Samsung' => 'Samsung|BGT-S5230|GT-B2100|GT-B2700|GT-B2710|GT-B3210|GT-B3310|GT-B3410|GT-B3730|GT-B3740|GT-B5510|GT-B5512|GT-B5722|GT-B6520|GT-B7300|GT-B7320|GT-B7330|GT-B7350|GT-B7510|GT-B7722|GT-B7800|GT-C3010|GT-C3011|GT-C3060|GT-C3200|GT-C3212|GT-C3212I|GT-C3222|GT-C3300|GT-C3300K|GT-C3303|GT-C3303K|GT-C3310|GT-C3322|GT-C3330|GT-C3350|GT-C3500|GT-C3510|GT-C3530|GT-C3630|GT-C3780|GT-C5010|GT-C5212|GT-C6620|GT-C6625|GT-C6712|GT-E1050|GT-E1070|GT-E1075|GT-E1080|GT-E1081|GT-E1085|GT-E1087|GT-E1100|GT-E1107|GT-E1110|GT-E1120|GT-E1125|GT-E1130|GT-E1160|GT-E1170|GT-E1175|GT-E1180|GT-E1182|GT-E1200|GT-E1210|GT-E1225|GT-E1230|GT-E1390|GT-E2100|GT-E2120|GT-E2121|GT-E2152|GT-E2220|GT-E2222|GT-E2230|GT-E2232|GT-E2250|GT-E2370|GT-E2550|GT-E2652|GT-E3210|GT-E3213|GT-I5500|GT-I5503|GT-I5700|GT-I5800|GT-I5801|GT-I6410|GT-I6420|GT-I7110|GT-I7410|GT-I7500|GT-I8000|GT-I8150|GT-I8160|GT-I8320|GT-I8330|GT-I8350|GT-I8530|GT-I8700|GT-I8703|GT-I8910|GT-I9000|GT-I9001|GT-I9003|GT-I9010|GT-I9020|GT-I9023|GT-I9070|GT-I9100|GT-I9103|GT-I9220|GT-I9250|GT-I9300|GT-I9300 |GT-M3510|GT-M5650|GT-M7500|GT-M7600|GT-M7603|GT-M8800|GT-M8910|GT-N7000|GT-P6810|GT-P7100|GT-S3110|GT-S3310|GT-S3350|GT-S3353|GT-S3370|GT-S3650|GT-S3653|GT-S3770|GT-S3850|GT-S5210|GT-S5220|GT-S5229|GT-S5230|GT-S5233|GT-S5250|GT-S5253|GT-S5260|GT-S5263|GT-S5270|GT-S5300|GT-S5330|GT-S5350|GT-S5360|GT-S5363|GT-S5369|GT-S5380|GT-S5380D|GT-S5560|GT-S5570|GT-S5600|GT-S5603|GT-S5610|GT-S5620|GT-S5660|GT-S5670|GT-S5690|GT-S5750|GT-S5780|GT-S5830|GT-S5839|GT-S6102|GT-S6500|GT-S7070|GT-S7200|GT-S7220|GT-S7230|GT-S7233|GT-S7250|GT-S7500|GT-S7530|GT-S7550|GT-S8000|GT-S8003|GT-S8500|GT-S8530|GT-S8600|SCH-A310|SCH-A530|SCH-A570|SCH-A610|SCH-A630|SCH-A650|SCH-A790|SCH-A795|SCH-A850|SCH-A870|SCH-A890|SCH-A930|SCH-A950|SCH-A970|SCH-A990|SCH-I100|SCH-I110|SCH-I400|SCH-I405|SCH-I500|SCH-I510|SCH-I515|SCH-I600|SCH-I730|SCH-I760|SCH-I770|SCH-I830|SCH-I910|SCH-I920|SCH-LC11|SCH-N150|SCH-N300|SCH-R100|SCH-R300|SCH-R351|SCH-R400|SCH-R410|SCH-T300|SCH-U310|SCH-U320|SCH-U350|SCH-U360|SCH-U365|SCH-U370|SCH-U380|SCH-U410|SCH-U430|SCH-U450|SCH-U460|SCH-U470|SCH-U490|SCH-U540|SCH-U550|SCH-U620|SCH-U640|SCH-U650|SCH-U660|SCH-U700|SCH-U740|SCH-U750|SCH-U810|SCH-U820|SCH-U900|SCH-U940|SCH-U960|SCS-26UC|SGH-A107|SGH-A117|SGH-A127|SGH-A137|SGH-A157|SGH-A167|SGH-A177|SGH-A187|SGH-A197|SGH-A227|SGH-A237|SGH-A257|SGH-A437|SGH-A517|SGH-A597|SGH-A637|SGH-A657|SGH-A667|SGH-A687|SGH-A697|SGH-A707|SGH-A717|SGH-A727|SGH-A737|SGH-A747|SGH-A767|SGH-A777|SGH-A797|SGH-A817|SGH-A827|SGH-A837|SGH-A847|SGH-A867|SGH-A877|SGH-A887|SGH-A897|SGH-A927|SGH-B100|SGH-B130|SGH-B200|SGH-B220|SGH-C100|SGH-C110|SGH-C120|SGH-C130|SGH-C140|SGH-C160|SGH-C170|SGH-C180|SGH-C200|SGH-C207|SGH-C210|SGH-C225|SGH-C230|SGH-C417|SGH-C450|SGH-D307|SGH-D347|SGH-D357|SGH-D407|SGH-D415|SGH-D780|SGH-D807|SGH-D980|SGH-E105|SGH-E200|SGH-E315|SGH-E316|SGH-E317|SGH-E335|SGH-E590|SGH-E635|SGH-E715|SGH-E890|SGH-F300|SGH-F480|SGH-I200|SGH-I300|SGH-I320|SGH-I550|SGH-I577|SGH-I600|SGH-I607|SGH-I617|SGH-I627|SGH-I637|SGH-I677|SGH-I700|SGH-I717|SGH-I727|SGH-I777|SGH-I780|SGH-I827|SGH-I847|SGH-I857|SGH-I896|SGH-I897|SGH-I900|SGH-I907|SGH-I917|SGH-I927|SGH-I937|SGH-I997|SGH-J150|SGH-J200|SGH-L170|SGH-L700|SGH-M110|SGH-M150|SGH-M200|SGH-N105|SGH-N500|SGH-N600|SGH-N620|SGH-N625|SGH-N700|SGH-N710|SGH-P107|SGH-P207|SGH-P300|SGH-P310|SGH-P520|SGH-P735|SGH-P777|SGH-Q105|SGH-R210|SGH-R220|SGH-R225|SGH-S105|SGH-S307|SGH-T109|SGH-T119|SGH-T139|SGH-T209|SGH-T219|SGH-T229|SGH-T239|SGH-T249|SGH-T259|SGH-T309|SGH-T319|SGH-T329|SGH-T339|SGH-T349|SGH-T359|SGH-T369|SGH-T379|SGH-T409|SGH-T429|SGH-T439|SGH-T459|SGH-T469|SGH-T479|SGH-T499|SGH-T509|SGH-T519|SGH-T539|SGH-T559|SGH-T589|SGH-T609|SGH-T619|SGH-T629|SGH-T639|SGH-T659|SGH-T669|SGH-T679|SGH-T709|SGH-T719|SGH-T729|SGH-T739|SGH-T746|SGH-T749|SGH-T759|SGH-T769|SGH-T809|SGH-T819|SGH-T839|SGH-T919|SGH-T929|SGH-T939|SGH-T959|SGH-T989|SGH-U100|SGH-U200|SGH-U800|SGH-V205|SGH-V206|SGH-X100|SGH-X105|SGH-X120|SGH-X140|SGH-X426|SGH-X427|SGH-X475|SGH-X495|SGH-X497|SGH-X507|SGH-X600|SGH-X610|SGH-X620|SGH-X630|SGH-X700|SGH-X820|SGH-X890|SGH-Z130|SGH-Z150|SGH-Z170|SGH-ZX10|SGH-ZX20|SHW-M110|SPH-A120|SPH-A400|SPH-A420|SPH-A460|SPH-A500|SPH-A560|SPH-A600|SPH-A620|SPH-A660|SPH-A700|SPH-A740|SPH-A760|SPH-A790|SPH-A800|SPH-A820|SPH-A840|SPH-A880|SPH-A900|SPH-A940|SPH-A960|SPH-D600|SPH-D700|SPH-D710|SPH-D720|SPH-I300|SPH-I325|SPH-I330|SPH-I350|SPH-I500|SPH-I600|SPH-I700|SPH-L700|SPH-M100|SPH-M220|SPH-M240|SPH-M300|SPH-M305|SPH-M320|SPH-M330|SPH-M350|SPH-M360|SPH-M370|SPH-M380|SPH-M510|SPH-M540|SPH-M550|SPH-M560|SPH-M570|SPH-M580|SPH-M610|SPH-M620|SPH-M630|SPH-M800|SPH-M810|SPH-M850|SPH-M900|SPH-M910|SPH-M920|SPH-M930|SPH-N100|SPH-N200|SPH-N240|SPH-N300|SPH-N400|SPH-Z400|SWC-E100',
+ 'Sony' => 'E10i|SonyEricsson|SonyEricssonLT15iv',
+ 'Asus' => 'Asus.*Galaxy',
+ 'Palm' => 'PalmSource|Palm', // avantgo|blazer|elaine|hiptop|plucker|xiino ; @todo - complete the regex.
+ 'Vertu' => 'Vertu|Vertu.*Ltd|Vertu.*Ascent|Vertu.*Ayxta|Vertu.*Constellation(F|Quest)?|Vertu.*Monika|Vertu.*Signature', // Just for fun ;)
+ 'GenericPhone' => '(mmp|pocket|psp|symbian|Smartphone|smartfon|treo|up.browser|up.link|vodafone|wap|nokia|Series40|Series60|S60|SonyEricsson|N900|PPC;|MAUI.*WAP.*Browser|LG-P500)'
+ );
+ // List of tablet devices.
+ protected $tabletDevices = array(
+ 'BlackBerryTablet' => 'PlayBook|RIM Tablet',
+ 'iPad' => 'iPad|iPad.*Mobile', // @todo: check for mobile friendly emails topic.
+ 'Kindle' => 'Kindle|Silk.*Accelerated',
+ 'SamsungTablet' => 'SAMSUNG.*Tablet|Galaxy.*Tab|GT-P1000|GT-P1010|GT-P6210|GT-P6800|GT-P6810|GT-P7100|GT-P7300|GT-P7310|GT-P7500|GT-P7510|SCH-I800|SCH-I815|SCH-I905|SGH-I957|SGH-I987|SGH-T849|SGH-T859|SGH-T869|SPH-P100|GT-P1000|GT-P3100|GT-P3110|GT-P5100|GT-P5110|GT-P6200|GT-P7300|GT-P7320|GT-P7500|GT-P7510|GT-P7511',
+ 'HTCtablet' => 'HTC Flyer|HTC Jetstream|HTC-P715a|HTC EVO View 4G|PG41200',
+ 'MotorolaTablet' => 'xoom|sholest|MZ615|MZ605|MZ505|MZ601|MZ602|MZ603|MZ604|MZ606|MZ607|MZ608|MZ609|MZ615|MZ616|MZ617',
+ 'AsusTablet' => 'Transformer|TF101',
+ 'NookTablet' => 'NookColor|nook browser|BNTV250A|LogicPD Zoom2',
+ 'AcerTablet' => 'Android.*\b(A100|A101|A200|A500|A501|A510|W500|W500P|W501|W501P)\b',
+ 'YarvikTablet' => 'Android.*(TAB210|TAB211|TAB224|TAB250|TAB260|TAB264|TAB310|TAB360|TAB364|TAB410|TAB411|TAB420|TAB424|TAB450|TAB460|TAB461|TAB464|TAB465|TAB467|TAB468)',
+ 'GenericTablet' => 'Tablet(?!.*PC)|ViewPad7|LG-V909|MID7015|BNTV250A|LogicPD Zoom2|\bA7EB\b|CatNova8|A1_07|CT704|CT1002|\bM721\b',
+ );
+ // List of mobile Operating Systems.
+ protected $operatingSystems = array(
+ 'AndroidOS' => '(android.*mobile|android(?!.*mobile))',
+ 'BlackBerryOS' => '(blackberry|rim tablet os)',
+ 'PalmOS' => '(avantgo|blazer|elaine|hiptop|palm|plucker|xiino)',
+ 'SymbianOS' => 'Symbian|SymbOS|Series60|Series40|\bS60\b',
+ 'WindowsMobileOS' => 'IEMobile|Windows Phone|Windows CE.*(PPC|Smartphone)|MSIEMobile|Window Mobile|XBLWP7',
+ 'iOS' => '(iphone|ipod|ipad)',
+ 'FlashLiteOS' => '',
+ 'JavaOS' => '',
+ 'NokiaOS' => '',
+ 'webOS' => '',
+ 'badaOS' => '\bBada\b',
+ 'BREWOS' => '',
+ );
+ // List of mobile User Agents.
+ protected $userAgents = array(
+ 'Chrome' => '\bCrMo\b|Chrome\/[.0-9]* Mobile',
+ 'Dolfin' => '\bDolfin\b',
+ 'Opera' => 'Opera.*Mini|Opera.*Mobi|Android.*Opera',
+ 'Skyfire' => 'skyfire',
+ 'IE' => 'IEMobile|MSIEMobile',
+ 'Firefox' => 'fennec|firefox.*maemo|(Mobile|Tablet).*Firefox|Firefox.*Mobile',
+ 'Bolt' => 'bolt',
+ 'TeaShark' => 'teashark',
+ 'Blazer' => 'Blazer',
+ 'Safari' => 'Mobile.*Safari|Safari.*Mobile',
+ 'Midori' => 'midori',
+ 'GenericBrowser' => 'NokiaBrowser|OviBrowser|SEMC.*Browser'
+ );
+
+ function __construct(){
+
+ // Merge all rules together.
+ $this->detectionRules = array_merge(
+ $this->phoneDevices,
+ $this->tabletDevices,
+ $this->operatingSystems,
+ $this->userAgents
+ );
+ $this->userAgent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : null;
+ $this->accept = isset($_SERVER['HTTP_ACCEPT']) ? $_SERVER['HTTP_ACCEPT'] : null;
+
+ if (
+ isset($_SERVER['HTTP_X_WAP_PROFILE']) ||
+ isset($_SERVER['HTTP_X_WAP_CLIENTID']) ||
+ isset($_SERVER['HTTP_WAP_CONNECTION']) ||
+ isset($_SERVER['HTTP_PROFILE']) ||
+ isset($_SERVER['HTTP_X_OPERAMINI_PHONE_UA']) || // Reported by Nokia devices (eg. C3)
+ isset($_SERVER['HTTP_X_NOKIA_IPADDRESS']) ||
+ isset($_SERVER['HTTP_X_NOKIA_GATEWAY_ID']) ||
+ isset($_SERVER['HTTP_X_ORANGE_ID']) ||
+ isset($_SERVER['HTTP_X_VODAFONE_3GPDPCONTEXT']) ||
+ isset($_SERVER['HTTP_X_HUAWEI_USERID']) ||
+ isset($_SERVER['HTTP_UA_OS']) || // Reported by Windows Smartphones
+ (isset($_SERVER['HTTP_UA_CPU']) && $_SERVER['HTTP_UA_CPU'] == 'ARM') // Seen this on a HTC
+ ) {
+ $this->isMobile = true;
+ } elseif (!empty($this->accept) && (strpos($this->accept, 'text/vnd.wap.wml') !== false || strpos($this->accept, 'application/vnd.wap.xhtml+xml') !== false)) {
+ $this->isMobile = true;
+ } else {
+ $this->_detect();
+ }
+
+ }
+
+ public function getRules()
+ {
+ return $this->detectionRules;
+ }
+
+ /**
+ * Magic overloading method.
+ *
+ * @method boolean is[...]()
+ * @param string $name
+ * @param array $arguments
+ * @return mixed
+ */
+ public function __call($name, $arguments)
+ {
+
+ $key = substr($name, 2);
+ return $this->_detect($key);
+
+ }
+
+ /**
+ * Private method that does the detection of the
+ * mobile devices.
+ *
+ * @param string $key
+ * @return boolean|null
+ */
+ private function _detect($key='')
+ {
+
+ if(empty($key)){
+
+ // Begin general search.
+ foreach($this->detectionRules as $_regex){
+ if(empty($_regex)){ continue; }
+ if(preg_match('/'.$_regex.'/is', $this->userAgent)){
+ $this->isMobile = true;
+ return true;
+ }
+ }
+ return false;
+
+ } else {
+
+ // Search for a certain key.
+ // Make the keys lowecase so we can match: isIphone(), isiPhone(), isiphone(), etc.
+ $key = strtolower($key);
+ $_rules = array_change_key_case($this->detectionRules);
+
+ if(array_key_exists($key, $_rules)){
+ if(empty($_rules[$key])){ return null; }
+ if(preg_match('/'.$_rules[$key].'/is', $this->userAgent)){
+ $this->isMobile = true;
+ return true;
+ } else {
+ return false;
+ }
+ } else {
+ trigger_error("Method $key is not defined", E_USER_WARNING);
+ }
+
+ return false;
+
+ }
+
+ }
+
+ /**
+ * Check if the device is mobile.
+ * Returns true if any type of mobile device detected, including special ones
+ * @return bool
+ */
+ public function isMobile()
+ {
+ return $this->isMobile;
+ }
+
+ /**
+ * Check if the device is a tablet.
+ * Return true if any type of tablet device is detected.
+ * @return boolean
+ */
+ public function isTablet()
+ {
+
+ foreach($this->tabletDevices as $_regex){
+ if(preg_match('/'.$_regex.'/is', $this->userAgent)){
+ $this->isTablet = true;
+ return true;
+ }
+ }
+
+ return false;
+
+ }
+
+
+}
\ No newline at end of file
diff --git a/mod/admin.php b/mod/admin.php
index c8ed7a53b..05af01aa4 100644
--- a/mod/admin.php
+++ b/mod/admin.php
@@ -471,6 +471,9 @@ function admin_page_dbsync(&$a) {
if($a->argc > 3 && intval($a->argv[3]) && $a->argv[2] === 'mark') {
set_config('database', 'update_' . intval($a->argv[3]), 'success');
+ $curr = get_config('system','build');
+ if(intval($curr) == intval($a->argv[3]))
+ set_config('system','build',intval($curr) + 1);
info( t('Update has been marked successful') . EOL);
goaway($a->get_baseurl(true) . '/admin/dbsync');
}
diff --git a/mod/photos.php b/mod/photos.php
index 624f0bdca..da33126bb 100644
--- a/mod/photos.php
+++ b/mod/photos.php
@@ -988,7 +988,7 @@ function photos_content(&$a) {
call_hooks('photo_upload_form',$ret);
- $default_upload = '
+ $default_upload = '
';
diff --git a/mod/pretheme.php b/mod/pretheme.php
index 0efa587d8..4584cb29e 100644
--- a/mod/pretheme.php
+++ b/mod/pretheme.php
@@ -7,10 +7,16 @@ function pretheme_init(&$a) {
$info = get_theme_info($theme);
if($info) {
// unfortunately there will be no translation for this string
- $desc = $info['description'] . ' ' . $info['version'];
+ $desc = $info['description'];
+ $version = $info['version'];
+ $credits = $info['credits'];
}
- else $desc = '';
- echo json_encode(array('img' => get_theme_screenshot($theme), 'desc' => $desc));
+ else {
+ $desc = '';
+ $version = '';
+ $credits = '';
+ }
+ echo json_encode(array('img' => get_theme_screenshot($theme), 'desc' => $desc, 'version' => $version, 'credits' => $credits));
}
killme();
}
diff --git a/update.php b/update.php
index d752eaa6d..9442f825b 100644
--- a/update.php
+++ b/update.php
@@ -1,6 +1,6 @@
\n"
"Language-Team: LANGUAGE
\n"
@@ -56,7 +56,7 @@ msgstr ""
#: ../../mod/suggest.php:28 ../../mod/invite.php:13 ../../mod/invite.php:81
#: ../../mod/dfrn_confirm.php:53 ../../addon/facebook/facebook.php:510
#: ../../addon/facebook/facebook.php:516 ../../addon/dav/layout.fnk.php:353
-#: ../../include/items.php:3701 ../../index.php:309
+#: ../../include/items.php:3813 ../../index.php:309
msgid "Permission denied."
msgstr ""
@@ -86,7 +86,7 @@ msgid "Return to contact editor"
msgstr ""
#: ../../mod/crepair.php:148 ../../mod/settings.php:559
-#: ../../mod/settings.php:585 ../../mod/admin.php:661 ../../mod/admin.php:670
+#: ../../mod/settings.php:585 ../../mod/admin.php:664 ../../mod/admin.php:673
msgid "Name"
msgstr ""
@@ -131,8 +131,8 @@ msgstr ""
#: ../../mod/contacts.php:343 ../../mod/settings.php:557
#: ../../mod/settings.php:711 ../../mod/settings.php:772
#: ../../mod/settings.php:973 ../../mod/group.php:85 ../../mod/message.php:294
-#: ../../mod/message.php:473 ../../mod/admin.php:422 ../../mod/admin.php:658
-#: ../../mod/admin.php:794 ../../mod/admin.php:993 ../../mod/admin.php:1080
+#: ../../mod/message.php:473 ../../mod/admin.php:422 ../../mod/admin.php:661
+#: ../../mod/admin.php:797 ../../mod/admin.php:996 ../../mod/admin.php:1083
#: ../../mod/profiles.php:577 ../../mod/invite.php:119
#: ../../addon/fromgplus/fromgplus.php:40
#: ../../addon/facebook/facebook.php:619
@@ -231,7 +231,7 @@ msgid "link to source"
msgstr ""
#: ../../mod/events.php:328 ../../view/theme/diabook/theme.php:131
-#: ../../include/nav.php:52 ../../boot.php:1599
+#: ../../include/nav.php:52 ../../boot.php:1614
msgid "Events"
msgstr ""
@@ -287,7 +287,7 @@ msgstr ""
#: ../../mod/events.php:429 ../../mod/directory.php:132
#: ../../include/event.php:40 ../../include/bb2diaspora.php:447
-#: ../../boot.php:1176
+#: ../../boot.php:1179
msgid "Location:"
msgstr ""
@@ -368,7 +368,7 @@ msgstr ""
msgid "No"
msgstr ""
-#: ../../mod/photos.php:46 ../../boot.php:1593
+#: ../../mod/photos.php:46 ../../boot.php:1607
msgid "Photo Albums"
msgstr ""
@@ -592,7 +592,7 @@ msgstr ""
#: ../../mod/photos.php:1348 ../../mod/photos.php:1388
#: ../../mod/photos.php:1419 ../../mod/content.php:690
-#: ../../include/conversation.php:695 ../../boot.php:568
+#: ../../include/conversation.php:695 ../../boot.php:569
msgid "Comment"
msgstr ""
@@ -604,7 +604,7 @@ msgstr ""
#: ../../mod/photos.php:1447 ../../mod/content.php:439
#: ../../mod/content.php:720 ../../mod/settings.php:620
-#: ../../mod/settings.php:709 ../../mod/group.php:168 ../../mod/admin.php:665
+#: ../../mod/settings.php:709 ../../mod/group.php:168 ../../mod/admin.php:668
#: ../../include/conversation.php:444 ../../include/conversation.php:725
msgid "Delete"
msgstr ""
@@ -857,7 +857,7 @@ msgstr ""
msgid "Confirm"
msgstr ""
-#: ../../mod/dfrn_request.php:715 ../../include/items.php:3092
+#: ../../mod/dfrn_request.php:715 ../../include/items.php:3204
msgid "[Name Withheld]"
msgstr ""
@@ -1249,7 +1249,7 @@ msgid "is interested in:"
msgstr ""
#: ../../mod/match.php:58 ../../mod/suggest.php:59
-#: ../../include/contact_widgets.php:9 ../../boot.php:1120
+#: ../../include/contact_widgets.php:9 ../../boot.php:1123
msgid "Connect"
msgstr ""
@@ -1307,9 +1307,9 @@ msgstr[0] ""
msgstr[1] ""
#: ../../mod/content.php:587 ../../addon/page/page.php:76
-#: ../../addon/page/page.php:110 ../../addon/showmore/showmore.php:87
+#: ../../addon/page/page.php:110 ../../addon/showmore/showmore.php:114
#: ../../include/contact_widgets.php:188 ../../include/conversation.php:592
-#: ../../boot.php:569
+#: ../../boot.php:570
msgid "show more"
msgstr ""
@@ -1478,7 +1478,7 @@ msgid "if applicable"
msgstr ""
#: ../../mod/notifications.php:157 ../../mod/notifications.php:204
-#: ../../mod/admin.php:663
+#: ../../mod/admin.php:666
msgid "Approve"
msgstr ""
@@ -1679,12 +1679,12 @@ msgid "View all contacts"
msgstr ""
#: ../../mod/contacts.php:310 ../../mod/contacts.php:369
-#: ../../mod/admin.php:667
+#: ../../mod/admin.php:670
msgid "Unblock"
msgstr ""
#: ../../mod/contacts.php:310 ../../mod/contacts.php:369
-#: ../../mod/admin.php:666
+#: ../../mod/admin.php:669
msgid "Block"
msgstr ""
@@ -1781,7 +1781,7 @@ msgstr ""
msgid "Update public posts"
msgstr ""
-#: ../../mod/contacts.php:366 ../../mod/admin.php:1138
+#: ../../mod/contacts.php:366 ../../mod/admin.php:1141
msgid "Update now"
msgstr ""
@@ -1911,8 +1911,8 @@ msgstr ""
#: ../../addon/facebook/facebook.php:702
#: ../../addon/facebook/facebook.php:1200
#: ../../addon/public_server/public_server.php:62
-#: ../../addon/testdrive/testdrive.php:67 ../../include/items.php:3101
-#: ../../boot.php:770
+#: ../../addon/testdrive/testdrive.php:67 ../../include/items.php:3213
+#: ../../boot.php:772
msgid "Administrator"
msgstr ""
@@ -1922,7 +1922,7 @@ msgid ""
"Password reset failed."
msgstr ""
-#: ../../mod/lostpass.php:83 ../../boot.php:902
+#: ../../mod/lostpass.php:83 ../../boot.php:905
msgid "Password Reset"
msgstr ""
@@ -1994,7 +1994,7 @@ msgstr ""
msgid "Remove account"
msgstr ""
-#: ../../mod/settings.php:89 ../../mod/admin.php:753 ../../mod/admin.php:958
+#: ../../mod/settings.php:89 ../../mod/admin.php:756 ../../mod/admin.php:961
#: ../../addon/dav/layout.fnk.php:116 ../../addon/mathjax/mathjax.php:36
#: ../../view/theme/diabook/theme.php:643
#: ../../view/theme/diabook/theme.php:773 ../../include/nav.php:137
@@ -2589,7 +2589,7 @@ msgstr ""
msgid "Invalid contact."
msgstr ""
-#: ../../mod/notes.php:44 ../../boot.php:1605
+#: ../../mod/notes.php:44 ../../boot.php:1621
msgid "Personal Notes"
msgstr ""
@@ -2840,7 +2840,7 @@ msgstr ""
#: ../../mod/profperm.php:103 ../../view/theme/diabook/theme.php:128
#: ../../include/profile_advanced.php:7 ../../include/profile_advanced.php:84
-#: ../../include/nav.php:50 ../../boot.php:1584
+#: ../../include/nav.php:50 ../../boot.php:1597
msgid "Profile"
msgstr ""
@@ -2944,7 +2944,7 @@ msgstr ""
msgid "Choose a nickname: "
msgstr ""
-#: ../../mod/register.php:269 ../../include/nav.php:81 ../../boot.php:868
+#: ../../mod/register.php:269 ../../include/nav.php:81 ../../boot.php:871
msgid "Register"
msgstr ""
@@ -2977,8 +2977,8 @@ msgid "%1$s doesn't like %2$s's %3$s"
msgstr ""
#: ../../mod/notice.php:15 ../../mod/viewsrc.php:15 ../../mod/admin.php:159
-#: ../../mod/admin.php:702 ../../mod/admin.php:901 ../../mod/display.php:37
-#: ../../mod/display.php:142 ../../include/items.php:3580
+#: ../../mod/admin.php:705 ../../mod/admin.php:904 ../../mod/display.php:37
+#: ../../mod/display.php:142 ../../include/items.php:3692
msgid "Item not found."
msgstr ""
@@ -2987,7 +2987,7 @@ msgid "Access denied."
msgstr ""
#: ../../mod/fbrowser.php:25 ../../view/theme/diabook/theme.php:130
-#: ../../include/nav.php:51 ../../boot.php:1590
+#: ../../include/nav.php:51 ../../boot.php:1604
msgid "Photos"
msgstr ""
@@ -3212,15 +3212,15 @@ msgstr ""
msgid "Site"
msgstr ""
-#: ../../mod/admin.php:97 ../../mod/admin.php:657 ../../mod/admin.php:669
+#: ../../mod/admin.php:97 ../../mod/admin.php:660 ../../mod/admin.php:672
msgid "Users"
msgstr ""
-#: ../../mod/admin.php:98 ../../mod/admin.php:751 ../../mod/admin.php:793
+#: ../../mod/admin.php:98 ../../mod/admin.php:754 ../../mod/admin.php:796
msgid "Plugins"
msgstr ""
-#: ../../mod/admin.php:99 ../../mod/admin.php:956 ../../mod/admin.php:992
+#: ../../mod/admin.php:99 ../../mod/admin.php:959 ../../mod/admin.php:995
msgid "Themes"
msgstr ""
@@ -3228,7 +3228,7 @@ msgstr ""
msgid "DB updates"
msgstr ""
-#: ../../mod/admin.php:115 ../../mod/admin.php:122 ../../mod/admin.php:1079
+#: ../../mod/admin.php:115 ../../mod/admin.php:122 ../../mod/admin.php:1082
msgid "Logs"
msgstr ""
@@ -3244,19 +3244,19 @@ msgstr ""
msgid "User registrations waiting for confirmation"
msgstr ""
-#: ../../mod/admin.php:183 ../../mod/admin.php:639
+#: ../../mod/admin.php:183 ../../mod/admin.php:642
msgid "Normal Account"
msgstr ""
-#: ../../mod/admin.php:184 ../../mod/admin.php:640
+#: ../../mod/admin.php:184 ../../mod/admin.php:643
msgid "Soapbox Account"
msgstr ""
-#: ../../mod/admin.php:185 ../../mod/admin.php:641
+#: ../../mod/admin.php:185 ../../mod/admin.php:644
msgid "Community/Celebrity Account"
msgstr ""
-#: ../../mod/admin.php:186 ../../mod/admin.php:642
+#: ../../mod/admin.php:186 ../../mod/admin.php:645
msgid "Automatic Friend Account"
msgstr ""
@@ -3272,9 +3272,9 @@ msgstr ""
msgid "Message queues"
msgstr ""
-#: ../../mod/admin.php:212 ../../mod/admin.php:420 ../../mod/admin.php:656
-#: ../../mod/admin.php:750 ../../mod/admin.php:792 ../../mod/admin.php:955
-#: ../../mod/admin.php:991 ../../mod/admin.php:1078
+#: ../../mod/admin.php:212 ../../mod/admin.php:420 ../../mod/admin.php:659
+#: ../../mod/admin.php:753 ../../mod/admin.php:795 ../../mod/admin.php:958
+#: ../../mod/admin.php:994 ../../mod/admin.php:1081
msgid "Administration"
msgstr ""
@@ -3579,226 +3579,226 @@ msgid ""
"default 50."
msgstr ""
-#: ../../mod/admin.php:474
+#: ../../mod/admin.php:477
msgid "Update has been marked successful"
msgstr ""
-#: ../../mod/admin.php:484
-#, php-format
-msgid "Executing %s failed. Check system logs."
-msgstr ""
-
#: ../../mod/admin.php:487
#, php-format
-msgid "Update %s was successfully applied."
+msgid "Executing %s failed. Check system logs."
msgstr ""
-#: ../../mod/admin.php:491
+#: ../../mod/admin.php:490
#, php-format
-msgid "Update %s did not return a status. Unknown if it succeeded."
+msgid "Update %s was successfully applied."
msgstr ""
#: ../../mod/admin.php:494
#, php-format
+msgid "Update %s did not return a status. Unknown if it succeeded."
+msgstr ""
+
+#: ../../mod/admin.php:497
+#, php-format
msgid "Update function %s could not be found."
msgstr ""
-#: ../../mod/admin.php:509
+#: ../../mod/admin.php:512
msgid "No failed updates."
msgstr ""
-#: ../../mod/admin.php:513
+#: ../../mod/admin.php:516
msgid "Failed Updates"
msgstr ""
-#: ../../mod/admin.php:514
+#: ../../mod/admin.php:517
msgid ""
"This does not include updates prior to 1139, which did not return a status."
msgstr ""
-#: ../../mod/admin.php:515
+#: ../../mod/admin.php:518
msgid "Mark success (if update was manually applied)"
msgstr ""
-#: ../../mod/admin.php:516
+#: ../../mod/admin.php:519
msgid "Attempt to execute this update step automatically"
msgstr ""
-#: ../../mod/admin.php:541
+#: ../../mod/admin.php:544
#, php-format
msgid "%s user blocked/unblocked"
msgid_plural "%s users blocked/unblocked"
msgstr[0] ""
msgstr[1] ""
-#: ../../mod/admin.php:548
+#: ../../mod/admin.php:551
#, php-format
msgid "%s user deleted"
msgid_plural "%s users deleted"
msgstr[0] ""
msgstr[1] ""
-#: ../../mod/admin.php:587
+#: ../../mod/admin.php:590
#, php-format
msgid "User '%s' deleted"
msgstr ""
-#: ../../mod/admin.php:595
+#: ../../mod/admin.php:598
#, php-format
msgid "User '%s' unblocked"
msgstr ""
-#: ../../mod/admin.php:595
+#: ../../mod/admin.php:598
#, php-format
msgid "User '%s' blocked"
msgstr ""
-#: ../../mod/admin.php:659
+#: ../../mod/admin.php:662
msgid "select all"
msgstr ""
-#: ../../mod/admin.php:660
+#: ../../mod/admin.php:663
msgid "User registrations waiting for confirm"
msgstr ""
-#: ../../mod/admin.php:661
+#: ../../mod/admin.php:664
msgid "Request date"
msgstr ""
-#: ../../mod/admin.php:661 ../../mod/admin.php:670
+#: ../../mod/admin.php:664 ../../mod/admin.php:673
#: ../../include/contact_selectors.php:79
msgid "Email"
msgstr ""
-#: ../../mod/admin.php:662
+#: ../../mod/admin.php:665
msgid "No registrations."
msgstr ""
-#: ../../mod/admin.php:664
+#: ../../mod/admin.php:667
msgid "Deny"
msgstr ""
-#: ../../mod/admin.php:670
+#: ../../mod/admin.php:673
msgid "Register date"
msgstr ""
-#: ../../mod/admin.php:670
+#: ../../mod/admin.php:673
msgid "Last login"
msgstr ""
-#: ../../mod/admin.php:670
+#: ../../mod/admin.php:673
msgid "Last item"
msgstr ""
-#: ../../mod/admin.php:670
+#: ../../mod/admin.php:673
msgid "Account"
msgstr ""
-#: ../../mod/admin.php:672
+#: ../../mod/admin.php:675
msgid ""
"Selected users will be deleted!\\n\\nEverything these users had posted on "
"this site will be permanently deleted!\\n\\nAre you sure?"
msgstr ""
-#: ../../mod/admin.php:673
+#: ../../mod/admin.php:676
msgid ""
"The user {0} will be deleted!\\n\\nEverything this user has posted on this "
"site will be permanently deleted!\\n\\nAre you sure?"
msgstr ""
-#: ../../mod/admin.php:714
+#: ../../mod/admin.php:717
#, php-format
msgid "Plugin %s disabled."
msgstr ""
-#: ../../mod/admin.php:718
+#: ../../mod/admin.php:721
#, php-format
msgid "Plugin %s enabled."
msgstr ""
-#: ../../mod/admin.php:728 ../../mod/admin.php:926
+#: ../../mod/admin.php:731 ../../mod/admin.php:929
msgid "Disable"
msgstr ""
-#: ../../mod/admin.php:730 ../../mod/admin.php:928
+#: ../../mod/admin.php:733 ../../mod/admin.php:931
msgid "Enable"
msgstr ""
-#: ../../mod/admin.php:752 ../../mod/admin.php:957
+#: ../../mod/admin.php:755 ../../mod/admin.php:960
msgid "Toggle"
msgstr ""
-#: ../../mod/admin.php:760 ../../mod/admin.php:967
+#: ../../mod/admin.php:763 ../../mod/admin.php:970
msgid "Author: "
msgstr ""
-#: ../../mod/admin.php:761 ../../mod/admin.php:968
+#: ../../mod/admin.php:764 ../../mod/admin.php:971
msgid "Maintainer: "
msgstr ""
-#: ../../mod/admin.php:890
+#: ../../mod/admin.php:893
msgid "No themes found."
msgstr ""
-#: ../../mod/admin.php:949
+#: ../../mod/admin.php:952
msgid "Screenshot"
msgstr ""
-#: ../../mod/admin.php:997
+#: ../../mod/admin.php:1000
msgid "[Experimental]"
msgstr ""
-#: ../../mod/admin.php:998
+#: ../../mod/admin.php:1001
msgid "[Unsupported]"
msgstr ""
-#: ../../mod/admin.php:1025
+#: ../../mod/admin.php:1028
msgid "Log settings updated."
msgstr ""
-#: ../../mod/admin.php:1081
+#: ../../mod/admin.php:1084
msgid "Clear"
msgstr ""
-#: ../../mod/admin.php:1087
+#: ../../mod/admin.php:1090
msgid "Debugging"
msgstr ""
-#: ../../mod/admin.php:1088
+#: ../../mod/admin.php:1091
msgid "Log file"
msgstr ""
-#: ../../mod/admin.php:1088
+#: ../../mod/admin.php:1091
msgid ""
"Must be writable by web server. Relative to your Friendica top-level "
"directory."
msgstr ""
-#: ../../mod/admin.php:1089
+#: ../../mod/admin.php:1092
msgid "Log level"
msgstr ""
-#: ../../mod/admin.php:1139
+#: ../../mod/admin.php:1142
msgid "Close"
msgstr ""
-#: ../../mod/admin.php:1145
+#: ../../mod/admin.php:1148
msgid "FTP Host"
msgstr ""
-#: ../../mod/admin.php:1146
+#: ../../mod/admin.php:1149
msgid "FTP Path"
msgstr ""
-#: ../../mod/admin.php:1147
+#: ../../mod/admin.php:1150
msgid "FTP User"
msgstr ""
-#: ../../mod/admin.php:1148
+#: ../../mod/admin.php:1151
msgid "FTP Password"
msgstr ""
-#: ../../mod/profile.php:21 ../../boot.php:1033
+#: ../../mod/profile.php:21 ../../boot.php:1036
msgid "Requested profile is not available."
msgstr ""
@@ -4193,23 +4193,23 @@ msgstr ""
msgid "Edit/Manage Profiles"
msgstr ""
-#: ../../mod/profiles.php:672 ../../boot.php:1142
+#: ../../mod/profiles.php:672 ../../boot.php:1145
msgid "Change profile photo"
msgstr ""
-#: ../../mod/profiles.php:673 ../../boot.php:1143
+#: ../../mod/profiles.php:673 ../../boot.php:1146
msgid "Create New Profile"
msgstr ""
-#: ../../mod/profiles.php:684 ../../boot.php:1153
+#: ../../mod/profiles.php:684 ../../boot.php:1156
msgid "Profile Image"
msgstr ""
-#: ../../mod/profiles.php:686 ../../boot.php:1156
+#: ../../mod/profiles.php:686 ../../boot.php:1159
msgid "visible to everybody"
msgstr ""
-#: ../../mod/profiles.php:687 ../../boot.php:1157
+#: ../../mod/profiles.php:687 ../../boot.php:1160
msgid "Edit visibility"
msgstr ""
@@ -4337,17 +4337,17 @@ msgid "Gender: "
msgstr ""
#: ../../mod/directory.php:134 ../../include/profile_advanced.php:17
-#: ../../boot.php:1178
+#: ../../boot.php:1181
msgid "Gender:"
msgstr ""
#: ../../mod/directory.php:136 ../../include/profile_advanced.php:37
-#: ../../boot.php:1181
+#: ../../boot.php:1184
msgid "Status:"
msgstr ""
#: ../../mod/directory.php:138 ../../include/profile_advanced.php:48
-#: ../../boot.php:1183
+#: ../../boot.php:1186
msgid "Homepage:"
msgstr ""
@@ -4955,7 +4955,7 @@ msgstr ""
#: ../../addon/communityhome/communityhome.php:34
#: ../../addon/communityhome/twillingham/communityhome.php:28
#: ../../addon/communityhome/twillingham/communityhome.php:34
-#: ../../include/nav.php:64 ../../boot.php:889
+#: ../../include/nav.php:64 ../../boot.php:892
msgid "Login"
msgstr ""
@@ -7064,7 +7064,7 @@ msgstr ""
msgid "Sharing notification from Diaspora network"
msgstr ""
-#: ../../include/diaspora.php:2174
+#: ../../include/diaspora.php:2177
msgid "Attachments:"
msgstr ""
@@ -7115,7 +7115,7 @@ msgstr ""
msgid "Contacts not in any group"
msgstr ""
-#: ../../include/nav.php:46 ../../boot.php:888
+#: ../../include/nav.php:46 ../../boot.php:891
msgid "Logout"
msgstr ""
@@ -7123,7 +7123,7 @@ msgstr ""
msgid "End this session"
msgstr ""
-#: ../../include/nav.php:49 ../../boot.php:1578
+#: ../../include/nav.php:49 ../../boot.php:1590
msgid "Status"
msgstr ""
@@ -7203,11 +7203,11 @@ msgstr ""
msgid "Manage other pages"
msgstr ""
-#: ../../include/nav.php:138 ../../boot.php:1136
+#: ../../include/nav.php:138 ../../boot.php:1139
msgid "Profiles"
msgstr ""
-#: ../../include/nav.php:138 ../../boot.php:1136
+#: ../../include/nav.php:138 ../../boot.php:1139
msgid "Manage/edit profiles"
msgstr ""
@@ -7644,15 +7644,15 @@ msgstr ""
msgid "following"
msgstr ""
-#: ../../include/items.php:3099
+#: ../../include/items.php:3211
msgid "A new person is sharing with you at "
msgstr ""
-#: ../../include/items.php:3099
+#: ../../include/items.php:3211
msgid "You have a new follower at "
msgstr ""
-#: ../../include/items.php:3768
+#: ../../include/items.php:3880
msgid "Archives"
msgstr ""
@@ -7894,108 +7894,108 @@ msgstr ""
msgid "permissions"
msgstr ""
-#: ../../include/plugin.php:388 ../../include/plugin.php:390
+#: ../../include/plugin.php:390 ../../include/plugin.php:392
msgid "Click here to upgrade."
msgstr ""
-#: ../../include/plugin.php:396
+#: ../../include/plugin.php:398
msgid "This action exceeds the limits set by your subscription plan."
msgstr ""
-#: ../../include/plugin.php:401
+#: ../../include/plugin.php:403
msgid "This action is not available under your subscription plan."
msgstr ""
-#: ../../boot.php:567
+#: ../../boot.php:568
msgid "Delete this item?"
msgstr ""
-#: ../../boot.php:570
+#: ../../boot.php:571
msgid "show fewer"
msgstr ""
-#: ../../boot.php:765
-#, php-format
-msgid "Update %s failed. See error logs."
-msgstr ""
-
#: ../../boot.php:767
#, php-format
+msgid "Update %s failed. See error logs."
+msgstr ""
+
+#: ../../boot.php:769
+#, php-format
msgid "Update Error at %s"
msgstr ""
-#: ../../boot.php:867
+#: ../../boot.php:870
msgid "Create a New Account"
msgstr ""
-#: ../../boot.php:891
+#: ../../boot.php:894
msgid "Nickname or Email address: "
msgstr ""
-#: ../../boot.php:892
+#: ../../boot.php:895
msgid "Password: "
msgstr ""
-#: ../../boot.php:895
+#: ../../boot.php:898
msgid "Or login using OpenID: "
msgstr ""
-#: ../../boot.php:901
+#: ../../boot.php:904
msgid "Forgot your password?"
msgstr ""
-#: ../../boot.php:1068
+#: ../../boot.php:1071
msgid "Edit profile"
msgstr ""
-#: ../../boot.php:1128
+#: ../../boot.php:1131
msgid "Message"
msgstr ""
-#: ../../boot.php:1244 ../../boot.php:1323
+#: ../../boot.php:1247 ../../boot.php:1326
msgid "g A l F d"
msgstr ""
-#: ../../boot.php:1245 ../../boot.php:1324
+#: ../../boot.php:1248 ../../boot.php:1327
msgid "F d"
msgstr ""
-#: ../../boot.php:1290 ../../boot.php:1364
+#: ../../boot.php:1293 ../../boot.php:1367
msgid "[today]"
msgstr ""
-#: ../../boot.php:1302
+#: ../../boot.php:1305
msgid "Birthday Reminders"
msgstr ""
-#: ../../boot.php:1303
+#: ../../boot.php:1306
msgid "Birthdays this week:"
msgstr ""
-#: ../../boot.php:1357
+#: ../../boot.php:1360
msgid "[No description]"
msgstr ""
-#: ../../boot.php:1375
+#: ../../boot.php:1378
msgid "Event Reminders"
msgstr ""
-#: ../../boot.php:1376
+#: ../../boot.php:1379
msgid "Events this week:"
msgstr ""
-#: ../../boot.php:1581
+#: ../../boot.php:1593
msgid "Status Messages and Posts"
msgstr ""
-#: ../../boot.php:1587
+#: ../../boot.php:1600
msgid "Profile Details"
msgstr ""
-#: ../../boot.php:1602
+#: ../../boot.php:1617
msgid "Events and Calendar"
msgstr ""
-#: ../../boot.php:1608
+#: ../../boot.php:1624
msgid "Only You Can See This"
msgstr ""
diff --git a/view/common_tabs.tpl b/view/common_tabs.tpl
index 22c33d6b1..f8ceff46a 100644
--- a/view/common_tabs.tpl
+++ b/view/common_tabs.tpl
@@ -1,5 +1,5 @@
diff --git a/view/jot-header.tpl b/view/jot-header.tpl
index f1c283470..64bcf27ca 100644
--- a/view/jot-header.tpl
+++ b/view/jot-header.tpl
@@ -283,9 +283,9 @@ function enableOnUser(){
if(reply && reply.length) {
commentBusy = true;
$('body').css('cursor', 'wait');
- $.get('filer/' + id + '?term=' + reply);
- if(timer) clearTimeout(timer);
- timer = setTimeout(NavUpdate,3000);
+ $.get('filer/' + id + '?term=' + reply, NavUpdate);
+// if(timer) clearTimeout(timer);
+// timer = setTimeout(NavUpdate,3000);
liking = 1;
$.fancybox.close();
} else {
diff --git a/view/photo_edit.tpl b/view/photo_edit.tpl
index 85d5fb8e2..53b69caae 100644
--- a/view/photo_edit.tpl
+++ b/view/photo_edit.tpl
@@ -28,7 +28,7 @@
-
+
$permissions
@@ -47,9 +47,4 @@
-
+
diff --git a/view/photos_upload.tpl b/view/photos_upload.tpl
index 706b3398d..33c48cbeb 100644
--- a/view/photos_upload.tpl
+++ b/view/photos_upload.tpl
@@ -23,7 +23,7 @@
-
+
$permissions
@@ -43,9 +43,3 @@
-
diff --git a/view/profile_edit.tpl b/view/profile_edit.tpl
index 64cd47324..bc342cc3b 100644
--- a/view/profile_edit.tpl
+++ b/view/profile_edit.tpl
@@ -172,7 +172,6 @@ $lbl_about
-
@@ -184,7 +183,6 @@ $lbl_hobbies
-
@@ -196,7 +194,6 @@ $lbl_likes
-
@@ -208,7 +205,6 @@ $lbl_dislikes
-
@@ -220,7 +216,6 @@ $lbl_social
-
@@ -238,7 +233,6 @@ $lbl_music
-
@@ -249,7 +243,6 @@ $lbl_book
-
@@ -262,7 +255,6 @@ $lbl_tv
-
@@ -275,7 +267,6 @@ $lbl_film
-
@@ -293,7 +284,6 @@ $lbl_love
-
@@ -306,7 +296,6 @@ $lbl_work
-
@@ -319,7 +308,6 @@ $lbl_school
-
@@ -331,4 +319,4 @@ $lbl_school
-
\ No newline at end of file
+
diff --git a/view/theme/dispy/head.tpl b/view/theme/dispy/head.tpl
index d42b19aef..a34df96be 100644
--- a/view/theme/dispy/head.tpl
+++ b/view/theme/dispy/head.tpl
@@ -25,6 +25,7 @@
+
+
+
+{{ if $admin.update }}
+
+{{ endif }}
+
+
+{{ if $admin.plugins_admin }}$plugadmtxt
{{ endif }}
+
+ {{ for $admin.plugins_admin as $l }}
+ - $l.1
+ {{ endfor }}
+
+
+
+$logtxt
+
+
diff --git a/view/theme/frost-mobile/admin_site.tpl b/view/theme/frost-mobile/admin_site.tpl
new file mode 100644
index 000000000..ff7c9bdb1
--- /dev/null
+++ b/view/theme/frost-mobile/admin_site.tpl
@@ -0,0 +1,91 @@
+
+
diff --git a/view/theme/frost-mobile/border.jpg b/view/theme/frost-mobile/border.jpg
new file mode 100644
index 000000000..034a1cb63
Binary files /dev/null and b/view/theme/frost-mobile/border.jpg differ
diff --git a/view/theme/frost-mobile/comment_item.tpl b/view/theme/frost-mobile/comment_item.tpl
new file mode 100755
index 000000000..9a9b8f6b6
--- /dev/null
+++ b/view/theme/frost-mobile/comment_item.tpl
@@ -0,0 +1,74 @@
+
+
+
diff --git a/view/theme/frost-mobile/contact_head.tpl b/view/theme/frost-mobile/contact_head.tpl
new file mode 100644
index 000000000..427f54158
--- /dev/null
+++ b/view/theme/frost-mobile/contact_head.tpl
@@ -0,0 +1,30 @@
+
diff --git a/view/theme/frost-mobile/contact_template.tpl b/view/theme/frost-mobile/contact_template.tpl
new file mode 100644
index 000000000..c27060bb3
--- /dev/null
+++ b/view/theme/frost-mobile/contact_template.tpl
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+ {{ if $contact.photo_menu }}
+
+
+ {{ endif }}
+
+
+
+
+
$contact.name
+{{ if $contact.alt_text }}
$contact.alt_text
{{ endif }}
+
$contact.network
+
+
+
diff --git a/view/theme/frost-mobile/contacts-template.tpl b/view/theme/frost-mobile/contacts-template.tpl
new file mode 100644
index 000000000..76254c1ca
--- /dev/null
+++ b/view/theme/frost-mobile/contacts-template.tpl
@@ -0,0 +1,28 @@
+$header{{ if $total }} ($total){{ endif }}
+
+{{ if $finding }}$finding
{{ endif }}
+
+
+
+
+
+
+$tabs
+
+
+
+{{ for $contacts as $contact }}
+ {{ inc contact_template.tpl }}{{ endinc }}
+{{ endfor }}
+
+
+
+$paginate
+
+
+
+
diff --git a/view/theme/frost-mobile/conversation.tpl b/view/theme/frost-mobile/conversation.tpl
new file mode 100644
index 000000000..43b4d63ff
--- /dev/null
+++ b/view/theme/frost-mobile/conversation.tpl
@@ -0,0 +1,27 @@
+{{ for $threads as $thread }}
+
+ {{ for $thread.items as $item }}
+ {{if $item.comment_firstcollapsed}}
+
+ {{endif}}
+
+ {{ inc $item.template }}{{ endinc }}
+
+
+ {{ endfor }}
+
+{{ endfor }}
+
+
+
+
+{{ endif }}
diff --git a/view/theme/frost-mobile/default.php b/view/theme/frost-mobile/default.php
new file mode 100644
index 000000000..c0f5de516
--- /dev/null
+++ b/view/theme/frost-mobile/default.php
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
+
+ module === 'home' ) { ?>
+
+
+
+ module === 'login' || $a->module === 'register' || $a->module === 'lostpass' ) {
+ ?>
+
+
+
+
+
+
+
+
+
+
+
diff --git a/view/theme/frost-mobile/editicons.png b/view/theme/frost-mobile/editicons.png
new file mode 100644
index 000000000..171a40876
Binary files /dev/null and b/view/theme/frost-mobile/editicons.png differ
diff --git a/view/theme/frost-mobile/event_head.tpl b/view/theme/frost-mobile/event_head.tpl
new file mode 100644
index 000000000..7636a4fd3
--- /dev/null
+++ b/view/theme/frost-mobile/event_head.tpl
@@ -0,0 +1,139 @@
+
+
+
+
+
+
+
+
+
diff --git a/view/theme/frost-mobile/experimental b/view/theme/frost-mobile/experimental
new file mode 100644
index 000000000..e69de29bb
diff --git a/view/theme/frost-mobile/field_input.tpl b/view/theme/frost-mobile/field_input.tpl
new file mode 100644
index 000000000..58e17406c
--- /dev/null
+++ b/view/theme/frost-mobile/field_input.tpl
@@ -0,0 +1,6 @@
+
+
+
+
+ $field.3
+
diff --git a/view/theme/frost-mobile/field_openid.tpl b/view/theme/frost-mobile/field_openid.tpl
new file mode 100644
index 000000000..8d330a30a
--- /dev/null
+++ b/view/theme/frost-mobile/field_openid.tpl
@@ -0,0 +1,6 @@
+
+
+
+
+ $field.3
+
diff --git a/view/theme/frost-mobile/field_password.tpl b/view/theme/frost-mobile/field_password.tpl
new file mode 100644
index 000000000..7a0d3fe9f
--- /dev/null
+++ b/view/theme/frost-mobile/field_password.tpl
@@ -0,0 +1,6 @@
+
+
+
+
+ $field.3
+
diff --git a/view/theme/frost-mobile/file.gif b/view/theme/frost-mobile/file.gif
new file mode 100644
index 000000000..7885b998d
Binary files /dev/null and b/view/theme/frost-mobile/file.gif differ
diff --git a/view/theme/frost-mobile/friendika-16.png b/view/theme/frost-mobile/friendika-16.png
new file mode 100644
index 000000000..1a742ecdc
Binary files /dev/null and b/view/theme/frost-mobile/friendika-16.png differ
diff --git a/view/theme/frost-mobile/head.jpg b/view/theme/frost-mobile/head.jpg
new file mode 100644
index 000000000..6210b76be
Binary files /dev/null and b/view/theme/frost-mobile/head.jpg differ
diff --git a/view/theme/frost-mobile/head.tpl b/view/theme/frost-mobile/head.tpl
new file mode 100644
index 000000000..a5bf0ac8b
--- /dev/null
+++ b/view/theme/frost-mobile/head.tpl
@@ -0,0 +1,105 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/view/theme/frost-mobile/images/approve-blue.png b/view/theme/frost-mobile/images/approve-blue.png
new file mode 100644
index 000000000..a13668a50
Binary files /dev/null and b/view/theme/frost-mobile/images/approve-blue.png differ
diff --git a/view/theme/frost-mobile/images/approve.png b/view/theme/frost-mobile/images/approve.png
new file mode 100644
index 000000000..473c646e5
Binary files /dev/null and b/view/theme/frost-mobile/images/approve.png differ
diff --git a/view/theme/frost-mobile/images/arrow-left.png b/view/theme/frost-mobile/images/arrow-left.png
new file mode 100644
index 000000000..a312cfa71
Binary files /dev/null and b/view/theme/frost-mobile/images/arrow-left.png differ
diff --git a/view/theme/frost-mobile/images/arrow-right.png b/view/theme/frost-mobile/images/arrow-right.png
new file mode 100644
index 000000000..2be9bd746
Binary files /dev/null and b/view/theme/frost-mobile/images/arrow-right.png differ
diff --git a/view/theme/frost-mobile/images/boldB-serif.png b/view/theme/frost-mobile/images/boldB-serif.png
new file mode 100644
index 000000000..78ce59a54
Binary files /dev/null and b/view/theme/frost-mobile/images/boldB-serif.png differ
diff --git a/view/theme/frost-mobile/images/camera.png b/view/theme/frost-mobile/images/camera.png
new file mode 100644
index 000000000..aa5935b7c
Binary files /dev/null and b/view/theme/frost-mobile/images/camera.png differ
diff --git a/view/theme/frost-mobile/images/code.png b/view/theme/frost-mobile/images/code.png
new file mode 100644
index 000000000..d490cea9d
Binary files /dev/null and b/view/theme/frost-mobile/images/code.png differ
diff --git a/view/theme/frost-mobile/images/contacts.png b/view/theme/frost-mobile/images/contacts.png
new file mode 100644
index 000000000..e870470d0
Binary files /dev/null and b/view/theme/frost-mobile/images/contacts.png differ
diff --git a/view/theme/frost-mobile/images/disapprove-blue.png b/view/theme/frost-mobile/images/disapprove-blue.png
new file mode 100644
index 000000000..ebbc7e4e6
Binary files /dev/null and b/view/theme/frost-mobile/images/disapprove-blue.png differ
diff --git a/view/theme/frost-mobile/images/disapprove.png b/view/theme/frost-mobile/images/disapprove.png
new file mode 100644
index 000000000..fa58d020e
Binary files /dev/null and b/view/theme/frost-mobile/images/disapprove.png differ
diff --git a/view/theme/frost-mobile/images/drop-blue.png b/view/theme/frost-mobile/images/drop-blue.png
new file mode 100644
index 000000000..a8b6c53c9
Binary files /dev/null and b/view/theme/frost-mobile/images/drop-blue.png differ
diff --git a/view/theme/frost-mobile/images/drop-darkred.png b/view/theme/frost-mobile/images/drop-darkred.png
new file mode 100644
index 000000000..9657d1138
Binary files /dev/null and b/view/theme/frost-mobile/images/drop-darkred.png differ
diff --git a/view/theme/frost-mobile/images/drop-red.png b/view/theme/frost-mobile/images/drop-red.png
new file mode 100644
index 000000000..91b0260ce
Binary files /dev/null and b/view/theme/frost-mobile/images/drop-red.png differ
diff --git a/view/theme/frost-mobile/images/drop.png b/view/theme/frost-mobile/images/drop.png
new file mode 100644
index 000000000..af38adf5e
Binary files /dev/null and b/view/theme/frost-mobile/images/drop.png differ
diff --git a/view/theme/frost-mobile/images/folder-blue.png b/view/theme/frost-mobile/images/folder-blue.png
new file mode 100644
index 000000000..6af9bbec0
Binary files /dev/null and b/view/theme/frost-mobile/images/folder-blue.png differ
diff --git a/view/theme/frost-mobile/images/folder.png b/view/theme/frost-mobile/images/folder.png
new file mode 100644
index 000000000..86dd21029
Binary files /dev/null and b/view/theme/frost-mobile/images/folder.png differ
diff --git a/view/theme/frost-mobile/images/globe.png b/view/theme/frost-mobile/images/globe.png
new file mode 100644
index 000000000..f84632bff
Binary files /dev/null and b/view/theme/frost-mobile/images/globe.png differ
diff --git a/view/theme/frost-mobile/images/italicI-serif.png b/view/theme/frost-mobile/images/italicI-serif.png
new file mode 100644
index 000000000..86fa40f9c
Binary files /dev/null and b/view/theme/frost-mobile/images/italicI-serif.png differ
diff --git a/view/theme/frost-mobile/images/lock.png b/view/theme/frost-mobile/images/lock.png
new file mode 100644
index 000000000..b8b8cd20e
Binary files /dev/null and b/view/theme/frost-mobile/images/lock.png differ
diff --git a/view/theme/frost-mobile/images/menu.png b/view/theme/frost-mobile/images/menu.png
new file mode 100644
index 000000000..44d5285fe
Binary files /dev/null and b/view/theme/frost-mobile/images/menu.png differ
diff --git a/view/theme/frost-mobile/images/message.png b/view/theme/frost-mobile/images/message.png
new file mode 100644
index 000000000..8f735aed0
Binary files /dev/null and b/view/theme/frost-mobile/images/message.png differ
diff --git a/view/theme/frost-mobile/images/network.png b/view/theme/frost-mobile/images/network.png
new file mode 100644
index 000000000..943e3252f
Binary files /dev/null and b/view/theme/frost-mobile/images/network.png differ
diff --git a/view/theme/frost-mobile/images/notifications.png b/view/theme/frost-mobile/images/notifications.png
new file mode 100644
index 000000000..27bacc672
Binary files /dev/null and b/view/theme/frost-mobile/images/notifications.png differ
diff --git a/view/theme/frost-mobile/images/paperclip.png b/view/theme/frost-mobile/images/paperclip.png
new file mode 100644
index 000000000..3a2ee2696
Binary files /dev/null and b/view/theme/frost-mobile/images/paperclip.png differ
diff --git a/view/theme/frost-mobile/images/pencil-blue.png b/view/theme/frost-mobile/images/pencil-blue.png
new file mode 100644
index 000000000..f51ddd4fe
Binary files /dev/null and b/view/theme/frost-mobile/images/pencil-blue.png differ
diff --git a/view/theme/frost-mobile/images/pencil.png b/view/theme/frost-mobile/images/pencil.png
new file mode 100644
index 000000000..8078d3083
Binary files /dev/null and b/view/theme/frost-mobile/images/pencil.png differ
diff --git a/view/theme/frost-mobile/images/quote.png b/view/theme/frost-mobile/images/quote.png
new file mode 100644
index 000000000..93127c5e7
Binary files /dev/null and b/view/theme/frost-mobile/images/quote.png differ
diff --git a/view/theme/frost-mobile/images/recycle-blue.png b/view/theme/frost-mobile/images/recycle-blue.png
new file mode 100644
index 000000000..4129f05cd
Binary files /dev/null and b/view/theme/frost-mobile/images/recycle-blue.png differ
diff --git a/view/theme/frost-mobile/images/recycle.png b/view/theme/frost-mobile/images/recycle.png
new file mode 100644
index 000000000..e5d8e1181
Binary files /dev/null and b/view/theme/frost-mobile/images/recycle.png differ
diff --git a/view/theme/frost-mobile/images/remote-link-blue.png b/view/theme/frost-mobile/images/remote-link-blue.png
new file mode 100644
index 000000000..de8d21db6
Binary files /dev/null and b/view/theme/frost-mobile/images/remote-link-blue.png differ
diff --git a/view/theme/frost-mobile/images/remote-link.png b/view/theme/frost-mobile/images/remote-link.png
new file mode 100644
index 000000000..1f657411a
Binary files /dev/null and b/view/theme/frost-mobile/images/remote-link.png differ
diff --git a/view/theme/frost-mobile/images/star-blue.png b/view/theme/frost-mobile/images/star-blue.png
new file mode 100644
index 000000000..f8783fcda
Binary files /dev/null and b/view/theme/frost-mobile/images/star-blue.png differ
diff --git a/view/theme/frost-mobile/images/star-yellow.png b/view/theme/frost-mobile/images/star-yellow.png
new file mode 100644
index 000000000..cc2b884b2
Binary files /dev/null and b/view/theme/frost-mobile/images/star-yellow.png differ
diff --git a/view/theme/frost-mobile/images/star.png b/view/theme/frost-mobile/images/star.png
new file mode 100644
index 000000000..f8a61a497
Binary files /dev/null and b/view/theme/frost-mobile/images/star.png differ
diff --git a/view/theme/frost-mobile/images/tag-blue.png b/view/theme/frost-mobile/images/tag-blue.png
new file mode 100644
index 000000000..6e5cec80e
Binary files /dev/null and b/view/theme/frost-mobile/images/tag-blue.png differ
diff --git a/view/theme/frost-mobile/images/tag.png b/view/theme/frost-mobile/images/tag.png
new file mode 100644
index 000000000..9c644b823
Binary files /dev/null and b/view/theme/frost-mobile/images/tag.png differ
diff --git a/view/theme/frost-mobile/images/underlineU-serif.png b/view/theme/frost-mobile/images/underlineU-serif.png
new file mode 100644
index 000000000..745ca2cd6
Binary files /dev/null and b/view/theme/frost-mobile/images/underlineU-serif.png differ
diff --git a/view/theme/frost-mobile/images/unlock.png b/view/theme/frost-mobile/images/unlock.png
new file mode 100644
index 000000000..81d9740e8
Binary files /dev/null and b/view/theme/frost-mobile/images/unlock.png differ
diff --git a/view/theme/frost-mobile/jot-header.tpl b/view/theme/frost-mobile/jot-header.tpl
new file mode 100644
index 000000000..b1762f169
--- /dev/null
+++ b/view/theme/frost-mobile/jot-header.tpl
@@ -0,0 +1,212 @@
+
+
+
+
+
diff --git a/view/theme/frost-mobile/jot.tpl b/view/theme/frost-mobile/jot.tpl
new file mode 100644
index 000000000..e39453ea0
--- /dev/null
+++ b/view/theme/frost-mobile/jot.tpl
@@ -0,0 +1,85 @@
+
+
+ {{ if $content }}{{ endif }}
diff --git a/view/theme/frost-mobile/js/acl.js b/view/theme/frost-mobile/js/acl.js
new file mode 100644
index 000000000..a2fb06262
--- /dev/null
+++ b/view/theme/frost-mobile/js/acl.js
@@ -0,0 +1,258 @@
+function ACL(backend_url, preset){
+ that = this;
+
+ that.url = backend_url;
+
+ that.kp_timer = null;
+
+ if (preset==undefined) preset = [];
+ that.allow_cid = (preset[0] || []);
+ that.allow_gid = (preset[1] || []);
+ that.deny_cid = (preset[2] || []);
+ that.deny_gid = (preset[3] || []);
+ that.group_uids = [];
+ that.nw = 2; //items per row. should be calulated from #acl-list.width
+
+ that.list_content = $("#acl-list-content");
+ that.item_tpl = unescape($(".acl-list-item[rel=acl-template]").html());
+ that.showall = $("#acl-showall");
+
+ if (preset.length==0) that.showall.addClass("selected");
+
+ /*events*/
+ that.showall.click(that.on_showall);
+ $(".acl-button-show").live('click', that.on_button_show);
+ $(".acl-button-hide").live('click', that.on_button_hide);
+ $("#acl-search").keypress(that.on_search);
+ $("#acl-wrapper").parents("form").submit(that.on_submit);
+
+ /* startup! */
+ that.get(0,100);
+}
+
+ACL.prototype.on_submit = function(){
+ aclfileds = $("#acl-fields").html("");
+ $(that.allow_gid).each(function(i,v){
+ aclfileds.append("");
+ });
+ $(that.allow_cid).each(function(i,v){
+ aclfileds.append("");
+ });
+ $(that.deny_gid).each(function(i,v){
+ aclfileds.append("");
+ });
+ $(that.deny_cid).each(function(i,v){
+ aclfileds.append("");
+ });
+}
+
+ACL.prototype.search = function(){
+ var srcstr = $("#acl-search").val();
+ that.list_content.html("");
+ that.get(0,100, srcstr);
+}
+
+ACL.prototype.on_search = function(event){
+ if (that.kp_timer) clearTimeout(that.kp_timer);
+ that.kp_timer = setTimeout( that.search, 1000);
+}
+
+ACL.prototype.on_showall = function(event){
+ event.preventDefault()
+ event.stopPropagation();
+
+ if (that.showall.hasClass("selected")){
+ return false;
+ }
+ that.showall.addClass("selected");
+
+ that.allow_cid = [];
+ that.allow_gid = [];
+ that.deny_cid = [];
+ that.deny_gid = [];
+
+ that.update_view();
+
+ return false;
+}
+
+ACL.prototype.on_button_show = function(event){
+ event.preventDefault()
+ event.stopImmediatePropagation()
+ event.stopPropagation();
+
+ /*that.showall.removeClass("selected");
+ $(this).siblings(".acl-button-hide").removeClass("selected");
+ $(this).toggleClass("selected");*/
+
+ that.set_allow($(this).parent().attr('id'));
+
+ return false;
+}
+ACL.prototype.on_button_hide = function(event){
+ event.preventDefault()
+ event.stopImmediatePropagation()
+ event.stopPropagation();
+
+ /*that.showall.removeClass("selected");
+ $(this).siblings(".acl-button-show").removeClass("selected");
+ $(this).toggleClass("selected");*/
+
+ that.set_deny($(this).parent().attr('id'));
+
+ return false;
+}
+
+ACL.prototype.set_allow = function(itemid){
+ type = itemid[0];
+ id = parseInt(itemid.substr(1));
+ switch(type){
+ case "g":
+ if (that.allow_gid.indexOf(id)<0){
+ that.allow_gid.push(id)
+ }else {
+ that.allow_gid.remove(id);
+ }
+ if (that.deny_gid.indexOf(id)>=0) that.deny_gid.remove(id);
+ break;
+ case "c":
+ if (that.allow_cid.indexOf(id)<0){
+ that.allow_cid.push(id)
+ } else {
+ that.allow_cid.remove(id);
+ }
+ if (that.deny_cid.indexOf(id)>=0) that.deny_cid.remove(id);
+ break;
+ }
+ that.update_view();
+}
+
+ACL.prototype.set_deny = function(itemid){
+ type = itemid[0];
+ id = parseInt(itemid.substr(1));
+ switch(type){
+ case "g":
+ if (that.deny_gid.indexOf(id)<0){
+ that.deny_gid.push(id)
+ } else {
+ that.deny_gid.remove(id);
+ }
+ if (that.allow_gid.indexOf(id)>=0) that.allow_gid.remove(id);
+ break;
+ case "c":
+ if (that.deny_cid.indexOf(id)<0){
+ that.deny_cid.push(id)
+ } else {
+ that.deny_cid.remove(id);
+ }
+ if (that.allow_cid.indexOf(id)>=0) that.allow_cid.remove(id);
+ break;
+ }
+ that.update_view();
+}
+
+ACL.prototype.update_view = function(){
+ if (that.allow_gid.length==0 && that.allow_cid.length==0 &&
+ that.deny_gid.length==0 && that.deny_cid.length==0){
+ that.showall.addClass("selected");
+ /* jot acl */
+ $('#jot-perms-icon').removeClass('lock').addClass('unlock');
+ $('#jot-public').show();
+ $('.profile-jot-net input').attr('disabled', false);
+ if(typeof editor != 'undefined' && editor != false) {
+ $('#profile-jot-desc').html(ispublic);
+ }
+
+ } else {
+ that.showall.removeClass("selected");
+ /* jot acl */
+ $('#jot-perms-icon').removeClass('unlock').addClass('lock');
+ $('#jot-public').hide();
+ $('.profile-jot-net input').attr('disabled', 'disabled');
+ $('#profile-jot-desc').html(' ');
+ }
+ $("#acl-list-content .acl-list-item").each(function(){
+ $(this).removeClass("groupshow grouphide");
+ });
+
+ $("#acl-list-content .acl-list-item").each(function(){
+ itemid = $(this).attr('id');
+ type = itemid[0];
+ id = parseInt(itemid.substr(1));
+
+ btshow = $(this).children(".acl-button-show").removeClass("selected");
+ bthide = $(this).children(".acl-button-hide").removeClass("selected");
+
+ switch(type){
+ case "g":
+ var uclass = "";
+ if (that.allow_gid.indexOf(id)>=0){
+ btshow.addClass("selected");
+ bthide.removeClass("selected");
+ uclass="groupshow";
+ }
+ if (that.deny_gid.indexOf(id)>=0){
+ btshow.removeClass("selected");
+ bthide.addClass("selected");
+ uclass="grouphide";
+ }
+
+ $(that.group_uids[id]).each(function(i,v) {
+ if(uclass == "grouphide")
+ $("#c"+v).removeClass("groupshow");
+ if(uclass != "") {
+ var cls = $("#c"+v).attr('class');
+ if( cls == undefined)
+ return true;
+ var hiding = cls.indexOf('grouphide');
+ if(hiding == -1)
+ $("#c"+v).addClass(uclass);
+ }
+ });
+
+ break;
+ case "c":
+ if (that.allow_cid.indexOf(id)>=0){
+ btshow.addClass("selected");
+ bthide.removeClass("selected");
+ }
+ if (that.deny_cid.indexOf(id)>=0){
+ btshow.removeClass("selected");
+ bthide.addClass("selected");
+ }
+ }
+
+ });
+
+}
+
+
+ACL.prototype.get = function(start,count, search){
+ var postdata = {
+ start:start,
+ count:count,
+ search:search,
+ }
+
+ $.ajax({
+ type:'POST',
+ url: that.url,
+ data: postdata,
+ dataType: 'json',
+ success:that.populate
+ });
+}
+
+ACL.prototype.populate = function(data){
+/* var height = Math.ceil(data.tot / that.nw) * 42;
+ that.list_content.height(height);*/
+ $(data.items).each(function(){
+ html = ""+that.item_tpl+"
";
+ html = html.format( this.photo, this.name, this.type, this.id, '', this.network, this.link );
+ if (this.uids!=undefined) that.group_uids[this.id] = this.uids;
+ //console.log(html);
+ that.list_content.append(html);
+ });
+ that.update_view();
+}
+
diff --git a/view/theme/frost-mobile/js/main.js b/view/theme/frost-mobile/js/main.js
new file mode 100644
index 000000000..a32d38ede
--- /dev/null
+++ b/view/theme/frost-mobile/js/main.js
@@ -0,0 +1,663 @@
+
+ function openClose(theID) {
+ if(document.getElementById(theID).style.display == "block") {
+ document.getElementById(theID).style.display = "none"
+ }
+ else {
+ document.getElementById(theID).style.display = "block"
+ }
+ }
+
+ function openMenu(theID) {
+ document.getElementById(theID).style.display = "block"
+ }
+
+ function closeMenu(theID) {
+ document.getElementById(theID).style.display = "none"
+ }
+
+
+
+ var src = null;
+ var prev = null;
+ var livetime = null;
+ var msie = false;
+ var stopped = false;
+ var totStopped = false;
+ var timer = null;
+ var pr = 0;
+ var liking = 0;
+ var in_progress = false;
+ var langSelect = false;
+ var commentBusy = false;
+ var last_popup_menu = null;
+ var last_popup_button = null;
+
+ $(function() {
+ $.ajaxSetup({cache: false});
+
+ msie = $.browser.msie ;
+
+ /* setup tooltips *//*
+ $("a,.tt").each(function(){
+ var e = $(this);
+ var pos="bottom";
+ if (e.hasClass("tttop")) pos="top";
+ if (e.hasClass("ttbottom")) pos="bottom";
+ if (e.hasClass("ttleft")) pos="left";
+ if (e.hasClass("ttright")) pos="right";
+ e.tipTip({defaultPosition: pos, edgeOffset: 8});
+ });*/
+
+
+
+ /* setup onoff widgets */
+ $(".onoff input").each(function(){
+ val = $(this).val();
+ id = $(this).attr("id");
+ $("#"+id+"_onoff ."+ (val==0?"on":"off")).addClass("hidden");
+
+ });
+ $(".onoff > a").click(function(event){
+ event.preventDefault();
+ var input = $(this).siblings("input");
+ var val = 1-input.val();
+ var id = input.attr("id");
+ $("#"+id+"_onoff ."+ (val==0?"on":"off")).addClass("hidden");
+ $("#"+id+"_onoff ."+ (val==1?"on":"off")).removeClass("hidden");
+ input.val(val);
+ //console.log(id);
+ });
+
+ /* setup field_richtext */
+ /*setupFieldRichtext();*/
+
+ /* popup menus */
+ function close_last_popup_menu(e) {
+
+ if( last_popup_menu ) {
+ if( '#' + last_popup_menu.attr('id') !== $(e.target).attr('rel')) {
+ last_popup_menu.hide();
+ if (last_popup_menu.attr('id') == "nav-notifications-menu" ) $('section').show();
+ last_popup_button.removeClass("selected");
+ last_popup_menu = null;
+ last_popup_button = null;
+ }
+ }
+ }
+ $('img[rel^=#]').click(function(e){
+
+ close_last_popup_menu(e);
+ menu = $( $(this).attr('rel') );
+ e.preventDefault();
+ e.stopPropagation();
+
+ if (menu.attr('popup')=="false") return false;
+
+// $(this).parent().toggleClass("selected");
+// menu.toggle();
+
+ if (menu.css("display") == "none") {
+ $(this).parent().addClass("selected");
+ menu.show();
+ if (menu.attr('id') == "nav-notifications-menu" ) $('section').hide();
+ last_popup_menu = menu;
+ last_popup_button = $(this).parent();
+ } else {
+ $(this).parent().removeClass("selected");
+ menu.hide();
+ if (menu.attr('id') == "nav-notifications-menu" ) $('section').show();
+ last_popup_menu = null;
+ last_popup_button = null;
+ }
+ return false;
+ });
+ $('html').click(function(e) {
+ close_last_popup_menu(e);
+ });
+
+ // fancyboxes
+ /*$("a.popupbox").fancybox({
+ 'transitionIn' : 'elastic',
+ 'transitionOut' : 'elastic'
+ });*/
+
+
+ /* notifications template */
+ var notifications_tpl= unescape($("#nav-notifications-template[rel=template]").html());
+ var notifications_all = unescape($('').append( $("#nav-notifications-see-all").clone() ).html()); //outerHtml hack
+ var notifications_mark = unescape($('
').append( $("#nav-notifications-mark-all").clone() ).html()); //outerHtml hack
+ var notifications_empty = unescape($("#nav-notifications-menu").html());
+
+ /* nav update event */
+ $('nav').bind('nav-update', function(e,data){;
+ var invalid = $(data).find('invalid').text();
+ if(invalid == 1) { window.location.href=window.location.href }
+
+ var net = $(data).find('net').text();
+ if(net == 0) { net = ''; $('#net-update').removeClass('show') } else { $('#net-update').addClass('show') }
+ $('#net-update').html(net);
+
+ var home = $(data).find('home').text();
+ if(home == 0) { home = ''; $('#home-update').removeClass('show') } else { $('#home-update').addClass('show') }
+ $('#home-update').html(home);
+
+ var intro = $(data).find('intro').text();
+ if(intro == 0) { intro = ''; $('#intro-update').removeClass('show') } else { $('#intro-update').addClass('show') }
+ $('#intro-update').html(intro);
+
+ var mail = $(data).find('mail').text();
+ if(mail == 0) { mail = ''; $('#mail-update').removeClass('show') } else { $('#mail-update').addClass('show') }
+ $('#mail-update').html(mail);
+
+ var intro = $(data).find('intro').text();
+ if(intro == 0) { intro = ''; $('#intro-update-li').removeClass('show') } else { $('#intro-update-li').addClass('show') }
+ $('#intro-update-li').html(intro);
+
+ var mail = $(data).find('mail').text();
+ if(mail == 0) { mail = ''; $('#mail-update-li').removeClass('show') } else { $('#mail-update-li').addClass('show') }
+ $('#mail-update-li').html(mail);
+
+ var eNotif = $(data).find('notif')
+
+ if (eNotif.children("note").length==0){
+ $("#nav-notifications-menu").html(notifications_empty);
+ } else {
+ nnm = $("#nav-notifications-menu");
+ nnm.html(notifications_all + notifications_mark);
+ //nnm.attr('popup','true');
+ eNotif.children("note").each(function(){
+ e = $(this);
+ text = e.text().format("
"+e.attr('name')+"");
+ html = notifications_tpl.format(e.attr('href'),e.attr('photo'), text, e.attr('date'), e.attr('seen'));
+ nnm.append(html);
+ });
+ }
+ notif = eNotif.attr('count');
+ if (notif>0){
+ $("#nav-notifications-linkmenu").addClass("on");
+ } else {
+ $("#nav-notifications-linkmenu").removeClass("on");
+ }
+ if(notif == 0) { notif = ''; $('#notify-update').removeClass('show') } else { $('#notify-update').addClass('show') }
+ $('#notify-update').html(notif);
+
+ var eSysmsg = $(data).find('sysmsgs');
+ eSysmsg.children("notice").each(function(){
+ text = $(this).text();
+ $.jGrowl(text, { sticky: true, theme: 'notice', life: 1000 });
+ });
+ eSysmsg.children("info").each(function(){
+ text = $(this).text();
+ $.jGrowl(text, { sticky: false, theme: 'info', life: 1000 });
+ });
+
+ });
+
+
+ NavUpdate();
+ // Allow folks to stop the ajax page updates with the pause/break key
+/* $(document).keydown(function(event) {
+ if(event.keyCode == '8') {
+ var target = event.target || event.srcElement;
+ if (!/input|textarea/i.test(target.nodeName)) {
+ return false;
+ }
+ }
+ if(event.keyCode == '19' || (event.ctrlKey && event.which == '32')) {
+ event.preventDefault();
+ if(stopped == false) {
+ stopped = true;
+ if (event.ctrlKey) {
+ totStopped = true;
+ }
+ $('#pause').html('
');
+ } else {
+ unpause();
+ }
+ } else {
+ if (!totStopped) {
+ unpause();
+ }
+ }
+ });*/
+
+
+ });
+
+ function NavUpdate() {
+
+ if(! stopped) {
+ var pingCmd = 'ping' + ((localUser != 0) ? '?f=&uid=' + localUser : '');
+ $.get(pingCmd,function(data) {
+ $(data).find('result').each(function() {
+ // send nav-update event
+ $('nav').trigger('nav-update', this);
+
+
+ // start live update
+
+
+
+ if($('#live-network').length) { src = 'network'; liveUpdate(); }
+ if($('#live-profile').length) { src = 'profile'; liveUpdate(); }
+ if($('#live-community').length) { src = 'community'; liveUpdate(); }
+ if($('#live-notes').length) { src = 'notes'; liveUpdate(); }
+ if($('#live-display').length) {
+ if(liking) {
+ liking = 0;
+ window.location.href=window.location.href
+ }
+ }
+ if($('#live-photos').length) {
+ if(liking) {
+ liking = 0;
+ window.location.href=window.location.href
+ }
+ }
+
+
+
+
+ });
+ }) ;
+ }
+ timer = setTimeout(NavUpdate,updateInterval);
+ }
+
+ function liveUpdate() {
+ if((src == null) || (stopped) || (! profile_uid)) { $('.like-rotator').hide(); return; }
+ if(($('.comment-edit-text-full').length) || (in_progress)) {
+ if(livetime) {
+ clearTimeout(livetime);
+ }
+ livetime = setTimeout(liveUpdate, 10000);
+ return;
+ }
+ if(livetime != null)
+ livetime = null;
+
+ prev = 'live-' + src;
+
+ in_progress = true;
+ var udargs = ((netargs.length) ? '/' + netargs : '');
+ var update_url = 'update_' + src + udargs + '&p=' + profile_uid + '&page=' + profile_page + '&msie=' + ((msie) ? 1 : 0);
+
+ $.get(update_url,function(data) {
+ in_progress = false;
+ // $('.collapsed-comments',data).each(function() {
+ // var ident = $(this).attr('id');
+ // var is_hidden = $('#' + ident).is(':hidden');
+ // if($('#' + ident).length) {
+ // $('#' + ident).replaceWith($(this));
+ // if(is_hidden)
+ // $('#' + ident).hide();
+ // }
+ //});
+
+ // add a new thread
+
+ $('.tread-wrapper',data).each(function() {
+ var ident = $(this).attr('id');
+
+ if($('#' + ident).length == 0 && profile_page == 1) {
+ $('img',this).each(function() {
+ $(this).attr('src',$(this).attr('dst'));
+ });
+ $('#' + prev).after($(this));
+ }
+ else {
+ $('img',this).each(function() {
+ $(this).attr('src',$(this).attr('dst'));
+ });
+ $('#' + ident).replaceWith($(this));
+ }
+ prev = ident;
+ });
+
+ // reset vars for inserting individual items
+
+ /*prev = 'live-' + src;
+
+ $('.wall-item-outside-wrapper',data).each(function() {
+ var ident = $(this).attr('id');
+
+ if($('#' + ident).length == 0 && prev != 'live-' + src) {
+ $('img',this).each(function() {
+ $(this).attr('src',$(this).attr('dst'));
+ });
+ $('#' + prev).after($(this));
+ }
+ else {
+ $('#' + ident + ' ' + '.wall-item-ago').replaceWith($(this).find('.wall-item-ago'));
+ if($('#' + ident + ' ' + '.comment-edit-text-empty').length)
+ $('#' + ident + ' ' + '.wall-item-comment-wrapper').replaceWith($(this).find('.wall-item-comment-wrapper'));
+ $('#' + ident + ' ' + '.hide-comments-total').replaceWith($(this).find('.hide-comments-total'));
+ $('#' + ident + ' ' + '.wall-item-like').replaceWith($(this).find('.wall-item-like'));
+ $('#' + ident + ' ' + '.wall-item-dislike').replaceWith($(this).find('.wall-item-dislike'));
+ $('#' + ident + ' ' + '.my-comment-photo').each(function() {
+ $(this).attr('src',$(this).attr('dst'));
+ });
+ }
+ prev = ident;
+ });*/
+
+ $('.like-rotator').hide();
+ if(commentBusy) {
+ commentBusy = false;
+ $('body').css('cursor', 'auto');
+ }
+ /* autocomplete @nicknames */
+ $(".comment-edit-form textarea").contact_autocomplete(baseurl+"/acl");
+ });
+ }
+
+ function imgbright(node) {
+ $(node).removeClass("drophide").addClass("drop");
+ }
+
+ function imgdull(node) {
+ $(node).removeClass("drop").addClass("drophide");
+ }
+
+ // Since our ajax calls are asynchronous, we will give a few
+ // seconds for the first ajax call (setting like/dislike), then
+ // run the updater to pick up any changes and display on the page.
+ // The updater will turn any rotators off when it's done.
+ // This function will have returned long before any of these
+ // events have completed and therefore there won't be any
+ // visible feedback that anything changed without all this
+ // trickery. This still could cause confusion if the "like" ajax call
+ // is delayed and NavUpdate runs before it completes.
+
+ function dolike(ident,verb) {
+ unpause();
+ $('#like-rotator-' + ident.toString()).show();
+ $.get('like/' + ident.toString() + '?verb=' + verb, NavUpdate );
+// if(timer) clearTimeout(timer);
+// timer = setTimeout(NavUpdate,3000);
+ liking = 1;
+ }
+
+ function dostar(ident) {
+ ident = ident.toString();
+ //$('#like-rotator-' + ident).show();
+ $.get('starred/' + ident, function(data) {
+ if(data.match(/1/)) {
+ $('#starred-' + ident).addClass('starred');
+ $('#starred-' + ident).removeClass('unstarred');
+ $('#star-' + ident).addClass('hidden');
+ $('#unstar-' + ident).removeClass('hidden');
+ }
+ else {
+ $('#starred-' + ident).addClass('unstarred');
+ $('#starred-' + ident).removeClass('starred');
+ $('#star-' + ident).removeClass('hidden');
+ $('#unstar-' + ident).addClass('hidden');
+ }
+ //$('#like-rotator-' + ident).hide();
+ });
+ }
+
+ function getPosition(e) {
+ var cursor = {x:0, y:0};
+ if ( e.pageX || e.pageY ) {
+ cursor.x = e.pageX;
+ cursor.y = e.pageY;
+ }
+ else {
+ if( e.clientX || e.clientY ) {
+ cursor.x = e.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft) - document.documentElement.clientLeft;
+ cursor.y = e.clientY + (document.documentElement.scrollTop || document.body.scrollTop) - document.documentElement.clientTop;
+ }
+ else {
+ if( e.x || e.y ) {
+ cursor.x = e.x;
+ cursor.y = e.y;
+ }
+ }
+ }
+ return cursor;
+ }
+
+ var lockvisible = false;
+
+ function lockview(event,id) {
+ event = event || window.event;
+ cursor = getPosition(event);
+ if(lockvisible) {
+ lockviewhide();
+ }
+ else {
+ lockvisible = true;
+ $.get('lockview/' + id, function(data) {
+ $('#panel').html(data);
+ $('#panel').css({ 'left': cursor.x + 5 , 'top': cursor.y + 5});
+ $('#panel').show();
+ });
+ }
+ }
+
+ function lockviewhide() {
+ lockvisible = false;
+ $('#panel').hide();
+ }
+
+ function post_comment(id) {
+ unpause();
+ commentBusy = true;
+ $('body').css('cursor', 'wait');
+ $("#comment-preview-inp-" + id).val("0");
+ $.post(
+ "item",
+ $("#comment-edit-form-" + id).serialize(),
+ function(data) {
+ if(data.success) {
+ $("#comment-edit-wrapper-" + id).hide();
+ $("#comment-edit-text-" + id).val('');
+ var tarea = document.getElementById("comment-edit-text-" + id);
+ if(tarea)
+ commentClose(tarea,id);
+ if(timer) clearTimeout(timer);
+ timer = setTimeout(NavUpdate,10);
+ }
+ if(data.reload) {
+ window.location.href=data.reload;
+ }
+ },
+ "json"
+ );
+ return false;
+ }
+
+
+ function preview_comment(id) {
+ $("#comment-preview-inp-" + id).val("1");
+ $("#comment-edit-preview-" + id).show();
+ $.post(
+ "item",
+ $("#comment-edit-form-" + id).serialize(),
+ function(data) {
+ if(data.preview) {
+
+ $("#comment-edit-preview-" + id).html(data.preview);
+ $("#comment-edit-preview-" + id + " a").click(function() { return false; });
+ }
+ },
+ "json"
+ );
+ return true;
+ }
+
+
+
+ function preview_post() {
+ $("#jot-preview").val("1");
+ $("#jot-preview-content").show();
+ tinyMCE.triggerSave();
+ $.post(
+ "item",
+ $("#profile-jot-form").serialize(),
+ function(data) {
+ if(data.preview) {
+ $("#jot-preview-content").html(data.preview);
+ $("#jot-preview-content" + " a").click(function() { return false; });
+ }
+ },
+ "json"
+ );
+ $("#jot-preview").val("0");
+ return true;
+ }
+
+
+ function unpause() {
+ // unpause auto reloads if they are currently stopped
+ totStopped = false;
+ stopped = false;
+ $('#pause').html('');
+ }
+
+
+ function bin2hex(s){
+ // Converts the binary representation of data to hex
+ //
+ // version: 812.316
+ // discuss at: http://phpjs.org/functions/bin2hex
+ // + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
+ // + bugfixed by: Onno Marsman
+ // + bugfixed by: Linuxworld
+ // * example 1: bin2hex('Kev');
+ // * returns 1: '4b6576'
+ // * example 2: bin2hex(String.fromCharCode(0x00));
+ // * returns 2: '00'
+ var v,i, f = 0, a = [];
+ s += '';
+ f = s.length;
+
+ for (i = 0; i
' + data.desc + '' + data.version + '
' + data.credits + '
');
+ });
+
+}
diff --git a/view/theme/frost-mobile/js/theme.js b/view/theme/frost-mobile/js/theme.js
new file mode 100644
index 000000000..d3298d345
--- /dev/null
+++ b/view/theme/frost-mobile/js/theme.js
@@ -0,0 +1,224 @@
+$(document).ready(function() {
+
+/*$('html').click(function() { $("#nav-notifications-menu" ).hide(); });*/
+
+ $('.group-edit-icon').hover(
+ function() {
+ $(this).addClass('icon'); $(this).removeClass('iconspacer');},
+ function() {
+ $(this).removeClass('icon'); $(this).addClass('iconspacer');}
+ );
+
+ $('.sidebar-group-element').hover(
+ function() {
+ id = $(this).attr('id');
+ $('#edit-' + id).addClass('icon'); $('#edit-' + id).removeClass('iconspacer');},
+
+ function() {
+ id = $(this).attr('id');
+ $('#edit-' + id).removeClass('icon');$('#edit-' + id).addClass('iconspacer');}
+ );
+
+
+ $('.savedsearchdrop').hover(
+ function() {
+ $(this).addClass('drop'); $(this).addClass('icon'); $(this).removeClass('iconspacer');},
+ function() {
+ $(this).removeClass('drop'); $(this).removeClass('icon'); $(this).addClass('iconspacer');}
+ );
+
+ $('.savedsearchterm').hover(
+ function() {
+ id = $(this).attr('id');
+ $('#drop-' + id).addClass('icon'); $('#drop-' + id).addClass('drophide'); $('#drop-' + id).removeClass('iconspacer');},
+
+ function() {
+ id = $(this).attr('id');
+ $('#drop-' + id).removeClass('icon');$('#drop-' + id).removeClass('drophide'); $('#drop-' + id).addClass('iconspacer');}
+ );
+
+ $(".popupbox").click(function () {
+ var parent = $( $(this).attr('href') ).parent();
+ if (parent.css('display') == 'none') {
+ parent.show();
+ } else {
+ parent.hide();
+ }
+ return false;
+ });
+
+});
+
+
+function insertFormatting(comment,BBcode,id) {
+
+ var tmpStr = $("#comment-edit-text-" + id).val();
+ if(tmpStr == comment) {
+ tmpStr = "";
+ $("#comment-edit-text-" + id).addClass("comment-edit-text-full");
+ $("#comment-edit-text-" + id).removeClass("comment-edit-text-empty");
+ openMenu("comment-edit-submit-wrapper-" + id);
+ $("#comment-edit-text-" + id).val(tmpStr);
+ }
+
+ textarea = document.getElementById("comment-edit-text-" +id);
+ if (document.selection) {
+ textarea.focus();
+ selected = document.selection.createRange();
+ if (BBcode == "url"){
+ 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);
+ } else
+ textarea.value = textarea.value.substring(0, start) + "["+BBcode+"]" + textarea.value.substring(start, end) + "[/"+BBcode+"]" + textarea.value.substring(end, textarea.value.length);
+ }
+ return true;
+}
+
+function cmtBbOpen(id) {
+ $(".comment-edit-bb-" + id).show();
+}
+function cmtBbClose(id) {
+ $(".comment-edit-bb-" + id).hide();
+}
+
+
+
+
+// TinyMCE stuff
+// Needs to be in "jot-header.tpl" if the "$editselect" variable is used
+
+var editor=false;
+var textlen = 0;
+var plaintext = 'none';//'$editselect';
+
+function initEditor(cb){
+ if (editor==false){
+// $("#profile-jot-text-loading").show();
+ if(plaintext == 'none') {
+// $("#profile-jot-text-loading").hide();
+ $("#profile-jot-text").css({ 'height': 200, 'color': '#000' });
+ $("#profile-jot-text").contact_autocomplete(baseurl+"/acl");
+ editor = true;
+/* $("a#jot-perms-icon").fancybox({
+ 'transitionIn' : 'none',
+ 'transitionOut' : 'none'
+ });*/
+ $("a#jot-perms-icon, a#settings-default-perms-menu").click(function () {
+ var parent = $("#profile-jot-acl-wrapper").parent();
+ if (parent.css('display') == 'none') {
+ parent.show();
+ } else {
+ parent.hide();
+ }
+// $("#profile-jot-acl-wrapper").parent().toggle();
+ return false;
+ });
+ $(".jothidden").show();
+ if (typeof cb!="undefined") cb();
+ return;
+ }
+/* tinyMCE.init({
+ theme : "advanced",
+ mode : "specific_textareas",
+ editor_selector: $editselect,
+ auto_focus: "profile-jot-text",
+ plugins : "bbcode,paste,autoresize, inlinepopups",
+ theme_advanced_buttons1 : "bold,italic,underline,undo,redo,link,unlink,image,forecolor,formatselect,code",
+ theme_advanced_buttons2 : "",
+ theme_advanced_buttons3 : "",
+ theme_advanced_toolbar_location : "top",
+ theme_advanced_toolbar_align : "center",
+ theme_advanced_blockformats : "blockquote,code",
+ gecko_spellcheck : true,
+ paste_text_sticky : true,
+ entity_encoding : "raw",
+ add_unload_trigger : false,
+ remove_linebreaks : false,
+ force_p_newlines : false,
+ force_br_newlines : true,
+ forced_root_block : '',
+ convert_urls: false,
+ content_css: "$baseurl/view/custom_tinymce.css",
+ theme_advanced_path : false,
+ file_browser_callback : "fcFileBrowser",
+ setup : function(ed) {
+ cPopup = null;
+ ed.onKeyDown.add(function(ed,e) {
+ if(cPopup !== null)
+ cPopup.onkey(e);
+ });
+
+ ed.onKeyUp.add(function(ed, e) {
+ var txt = tinyMCE.activeEditor.getContent();
+ match = txt.match(/@([^ \n]+)$/);
+ if(match!==null) {
+ if(cPopup === null) {
+ cPopup = new ACPopup(this,baseurl+"/acl");
+ }
+ if(cPopup.ready && match[1]!==cPopup.searchText) cPopup.search(match[1]);
+ if(! cPopup.ready) cPopup = null;
+ }
+ else {
+ if(cPopup !== null) { cPopup.close(); cPopup = null; }
+ }
+
+ textlen = txt.length;
+ if(textlen != 0 && $('#jot-perms-icon').is('.unlock')) {
+ $('#profile-jot-desc').html(ispublic);
+ }
+ else {
+ $('#profile-jot-desc').html(' ');
+ }
+
+ //Character count
+
+ if(textlen <= 140) {
+ $('#character-counter').removeClass('red');
+ $('#character-counter').removeClass('orange');
+ $('#character-counter').addClass('grey');
+ }
+ if((textlen > 140) && (textlen <= 420)) {
+ $('#character-counter').removeClass('grey');
+ $('#character-counter').removeClass('red');
+ $('#character-counter').addClass('orange');
+ }
+ if(textlen > 420) {
+ $('#character-counter').removeClass('grey');
+ $('#character-counter').removeClass('orange');
+ $('#character-counter').addClass('red');
+ }
+ $('#character-counter').text(textlen);
+ });
+
+ ed.onInit.add(function(ed) {
+ ed.pasteAsPlainText = true;
+ $("#profile-jot-text-loading").hide();
+ $(".jothidden").show();
+ if (typeof cb!="undefined") cb();
+ });
+
+ }
+ });
+ editor = true;
+ // setup acl popup
+ $("a#jot-perms-icon").fancybox({
+ 'transitionIn' : 'elastic',
+ 'transitionOut' : 'elastic'
+ }); */
+ } else {
+ if (typeof cb!="undefined") cb();
+ }
+}
+
+function enableOnUser(){
+ if (editor) return;
+ $(this).val("");
+ initEditor();
+}
+
diff --git a/view/theme/frost-mobile/js/theme.js.old b/view/theme/frost-mobile/js/theme.js.old
new file mode 100644
index 000000000..03ee67622
--- /dev/null
+++ b/view/theme/frost-mobile/js/theme.js.old
@@ -0,0 +1,121 @@
+$(document).ready(function() {
+
+ $.ajaxSetup({
+ cache: false
+ });
+
+
+ $('.system-menu-link').click(function() {
+ handleNavMenu('#system-menu-list');
+ return false;
+ });
+
+ $('.contacts-menu-link').click(function() {
+ handleNavMenu('#contacts-menu-list');
+ return false;
+ });
+
+ $('.network-menu-link').click(function() {
+ handleNavMenu('#network-menu-list');
+ return false;
+ });
+
+/* $('.nav-load-page-link').click(function() {
+ getPageContent( $(this).attr('href') );
+ hideNavMenu( '#' + $(this).closest('ul').attr('id') );
+ return false;
+ });*/
+
+/* $('#nav-network-link').click(function() {
+ getPageContent('/network', '#network-menu-list');
+ return false;
+ });
+
+ $('#nav-home-link').click(function() {
+
+ var username = $('#site-location').text();
+ username = username.substring(0, username.indexOf('@'));
+
+ getPageContent('/profile/' + username, '#network-menu-list');
+
+ return false;
+ });
+
+ $('#nav-community-link').click(function() {
+ getPageContent('/community', '#network-menu-list');
+ return false;
+ });
+
+ $('#nav-messages-link').click(function() {
+ getPageContent('/message');
+ return false;
+ });
+
+ $('#nav-contacts-link').click(function() {
+ getPageContent('/contacts', '#contacts-menu-list');
+ return false;
+ });*/
+
+});
+
+$(document).mouseup(function (clickPos) {
+
+ var sysMenu = $("#system-menu-list");
+ var sysMenuLink = $(".system-menu-link");
+ var contactsMenu = $("#contacts-menu-list");
+ var contactsMenuLink = $(".contacts-menu-link");
+ var networkMenu = $("#network-menu-list");
+ var networkMenuLink = $(".network-menu-link");
+
+ if( !sysMenu.is(clickPos.target) && !sysMenuLink.is(clickPos.target) && sysMenu.has(clickPos.target).length === 0) {
+ hideNavMenu("#system-menu-list");
+ }
+ if( !contactsMenu.is(clickPos.target) && !contactsMenuLink.is(clickPos.target) && contactsMenu.has(clickPos.target).length === 0) {
+ hideNavMenu("#contacts-menu-list");
+ }
+ if( !networkMenu.is(clickPos.target) && !networkMenuLink.is(clickPos.target) && networkMenu.has(clickPos.target).length === 0) {
+ hideNavMenu("#network-menu-list");
+ }
+});
+
+
+function getPageContent(url) {
+
+ var pos = $('.main-container').position();
+
+ $('.main-container').css('margin-left', pos.left);
+ $('.main-content-container').hide(0, function () {
+ $('.main-content-loading').show(0);
+ });
+
+ $.get(url, function(html) {
+ console.log($('.main-content-container').html());
+ $('.main-content-container').html( $('.main-content-container', html).html() );
+ console.log($('.main-content-container').html());
+ $('.main-content-loading').hide(function() {
+ $('.main-content-container').fadeIn(800,function() {
+ $('.main-container').css('margin-left', 'auto'); // This sucks -- if the CSS specification changes, this will be wrong
+ });
+ });
+ });
+}
+
+function handleNavMenu(menuID) {
+ if( $(menuID).hasClass('menu-visible') ) {
+ hideNavMenu(menuID);
+ }
+ else {
+ showNavMenu(menuID);
+ }
+}
+
+function showNavMenu(menuID) {
+ $(menuID).show();
+ $(menuID).addClass('menu-visible');
+}
+
+function hideNavMenu(menuID) {
+ $(menuID).hide();
+ $(menuID).removeClass('menu-visible');
+}
+
diff --git a/view/theme/frost-mobile/lang_selector.tpl b/view/theme/frost-mobile/lang_selector.tpl
new file mode 100644
index 000000000..e777a0a86
--- /dev/null
+++ b/view/theme/frost-mobile/lang_selector.tpl
@@ -0,0 +1,10 @@
+
+
+
+
diff --git a/view/theme/frost-mobile/lock.cur b/view/theme/frost-mobile/lock.cur
new file mode 100644
index 000000000..892c5e851
Binary files /dev/null and b/view/theme/frost-mobile/lock.cur differ
diff --git a/view/theme/frost-mobile/login-bg.gif b/view/theme/frost-mobile/login-bg.gif
new file mode 100644
index 000000000..cde836c89
Binary files /dev/null and b/view/theme/frost-mobile/login-bg.gif differ
diff --git a/view/theme/frost-mobile/login-style.css b/view/theme/frost-mobile/login-style.css
new file mode 100644
index 000000000..5283c584b
--- /dev/null
+++ b/view/theme/frost-mobile/login-style.css
@@ -0,0 +1,131 @@
+html {
+ width: 100%;
+}
+
+body {
+ font-family: helvetica,arial,freesans,clean,sans-serif;
+ font-size: 16px;
+ background-color: #ffffff;
+ color: #505050;/* ZP Change*/
+ margin: 0px;
+}
+
+a, a:visited, a:link { color: #3465a4; text-decoration: none; }
+a:hover {text-decoration: underline; }
+
+img { border :0px; }
+
+.login-button {
+ margin-top: 90px;
+ margin-left: auto;
+ margin-right: auto;
+
+}
+
+img.login-button-image {
+ max-width: 300px;
+}
+
+.section-wrapper {
+ position: relative;
+ width: 300px;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+.login-form {
+ margin-top: 40px;
+}
+
+.field {
+ position: relative;
+ margin-bottom: 15px;
+}
+
+.field label {
+ margin-left: 25px;
+ font-weight: 700;
+}
+
+.field input {
+ font-size: 18px;
+ width: 200px;
+ margin-left: 50px;
+}
+
+#login_openid {
+ margin-top: 50px;
+}
+
+#login_openid input {
+ background: url(login-bg.gif) no-repeat;
+ background-position: 0 50%;
+ width: 182px;
+ padding-left: 18px;
+}
+
+#login-footer {
+ margin-top: 10px;
+ text-align: center;
+}
+
+.login-extra-links, .agreement {
+ font-size: 14px;
+}
+
+#login-submit-button, #register-submit-button, #lostpass-submit-button {
+ font-size: 20px;
+ padding: 0.5em 1em;
+}
+
+#register-link {
+ margin-right: 100px;
+}
+
+.register-form {
+ margin-top: 15px;
+}
+
+.register-form h2, .lostpass-form h2 {
+ text-align: center;
+}
+
+.error-message {
+ width: 270px;
+ color: #FF0000;
+ font-size: 1.1em;
+ text-align: justify;
+ border: 1px solid #FF8888;
+ background-color: #FFEEEE;
+ padding: 10px;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+.register-explain-wrapper {
+ width: 290px;
+ text-align: justify;
+ font-size: 14px;
+ margin-left: 5px;
+}
+
+#register-footer {
+ margin-top: 60px;
+ text-align: center;
+}
+
+.lostpass-form {
+ margin-top: 100px;
+}
+
+#lostpass-desc {
+ width: 290px;
+ margin-left: 5px;
+ margin-bottom: 30px;
+ text-align: justify;
+ font-size: 14px;
+}
+
+#login-submit-wrapper {
+ text-align: center;
+}
diff --git a/view/theme/frost-mobile/login.tpl b/view/theme/frost-mobile/login.tpl
new file mode 100644
index 000000000..c611989df
--- /dev/null
+++ b/view/theme/frost-mobile/login.tpl
@@ -0,0 +1,43 @@
+
+
+
+
diff --git a/view/theme/frost-mobile/lostpass.tpl b/view/theme/frost-mobile/lostpass.tpl
new file mode 100644
index 000000000..583e3dbaf
--- /dev/null
+++ b/view/theme/frost-mobile/lostpass.tpl
@@ -0,0 +1,21 @@
+
diff --git a/view/theme/frost-mobile/moderated_comment.tpl b/view/theme/frost-mobile/moderated_comment.tpl
new file mode 100755
index 000000000..b0451c8c6
--- /dev/null
+++ b/view/theme/frost-mobile/moderated_comment.tpl
@@ -0,0 +1,61 @@
+
diff --git a/view/theme/frost-mobile/msg-header.tpl b/view/theme/frost-mobile/msg-header.tpl
new file mode 100644
index 000000000..003c86922
--- /dev/null
+++ b/view/theme/frost-mobile/msg-header.tpl
@@ -0,0 +1,97 @@
+
+
+
+
+
+
diff --git a/view/theme/frost-mobile/nav.tpl b/view/theme/frost-mobile/nav.tpl
new file mode 100644
index 000000000..8b5fd8911
--- /dev/null
+++ b/view/theme/frost-mobile/nav.tpl
@@ -0,0 +1,131 @@
+
+
+
diff --git a/view/theme/frost-mobile/photo_edit.tpl b/view/theme/frost-mobile/photo_edit.tpl
new file mode 100644
index 000000000..5631b2eba
--- /dev/null
+++ b/view/theme/frost-mobile/photo_edit.tpl
@@ -0,0 +1,53 @@
+
+
+
+
diff --git a/view/theme/frost-mobile/photo_view.tpl b/view/theme/frost-mobile/photo_view.tpl
new file mode 100644
index 000000000..92e115487
--- /dev/null
+++ b/view/theme/frost-mobile/photo_view.tpl
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+ {{ if $prevlink }}
{{ endif }}
+ {{ if $nextlink }}
{{ endif }}
+
+
+
+
$desc
+{{ if $tags }}
+
$tags.0
+
$tags.1
+{{ endif }}
+{{ if $tags.2 }}
{{ endif }}
+
+{{ if $edit }}
+$edit
+{{ else }}
+
+{{ if $likebuttons }}
+
+ $likebuttons
+ $like
+ $dislike
+
+{{ endif }}
+
+$comments
+
+$paginate
+{{ endif }}
+
diff --git a/view/theme/frost-mobile/photos_upload.tpl b/view/theme/frost-mobile/photos_upload.tpl
new file mode 100644
index 000000000..4b8bd90d2
--- /dev/null
+++ b/view/theme/frost-mobile/photos_upload.tpl
@@ -0,0 +1,50 @@
+
$pagename
+
+
$usage
+
+