diff options
-rw-r--r-- | .htaccess | 2 | ||||
-rw-r--r-- | doc/To-Do-Code.md | 4 | ||||
-rw-r--r-- | doc/Widgets.md | 3 | ||||
-rw-r--r-- | doc/to_do_code.bb | 4 | ||||
-rw-r--r-- | include/directory.php | 5 | ||||
-rw-r--r-- | include/identity.php | 15 | ||||
-rwxr-xr-x | include/items.php | 2 | ||||
-rw-r--r-- | include/network.php | 42 | ||||
-rw-r--r-- | include/notifier.php | 6 | ||||
-rw-r--r-- | include/queue.php | 8 | ||||
-rw-r--r-- | include/socgraph.php | 5 | ||||
-rw-r--r-- | include/widgets.php | 2 | ||||
-rw-r--r-- | include/zot.php | 5 | ||||
-rw-r--r-- | mod/authtest.php | 4 | ||||
-rw-r--r-- | mod/lockview.php | 14 | ||||
-rw-r--r-- | mod/photos.php | 3 | ||||
-rw-r--r-- | mod/probe.php | 4 | ||||
-rwxr-xr-x | mod/setup.php | 3 | ||||
-rw-r--r-- | version.inc | 2 | ||||
-rw-r--r-- | view/css/conversation.css | 19 | ||||
-rw-r--r-- | view/en/htconfig.tpl | 7 | ||||
-rw-r--r-- | view/js/main.js | 26 | ||||
-rw-r--r-- | view/theme/redbasic/css/style.css | 11 | ||||
-rw-r--r-- | view/theme/redbasic/js/redbasic.js | 3 | ||||
-rwxr-xr-x | view/tpl/conv_item.tpl | 4 | ||||
-rw-r--r-- | view/tpl/hdr.tpl | 2 | ||||
-rwxr-xr-x | view/tpl/head.tpl | 2 | ||||
-rwxr-xr-x | view/tpl/posted_date_widget.tpl | 10 |
28 files changed, 131 insertions, 86 deletions
@@ -1,7 +1,7 @@ Options -Indexes AddType application/x-java-archive .jar AddType audio/ogg .oga -#SSLCipherSuite ECDHE-RSA-AES128-SHA256:AES128-GCM-SHA256:RC4:HIGH:!MD5:!aNULL:!EDH +#SSLCipherSuite HIGH:AES256-SHA:AES128-SHA:RC4:!aNULL:!eNULL:!EDH # don't allow any web access to logfiles, even after rotation/compression <FilesMatch "\.(out|log|gz)$"> diff --git a/doc/To-Do-Code.md b/doc/To-Do-Code.md index 58ecd18c6..fe5ec1842 100644 --- a/doc/To-Do-Code.md +++ b/doc/To-Do-Code.md @@ -23,6 +23,10 @@ We need much more than this, but here are areas where developers can help. Pleas * (Advanced) create a UI for building Comanche pages +* External post connectors - create standard interface + +* External post connectors, add popular services + * templatise and translate the Web interface to webDAV * Extend WebDAV to provide desktop access to photo albums diff --git a/doc/Widgets.md b/doc/Widgets.md index dc7093f8a..0f8d948ff 100644 --- a/doc/Widgets.md +++ b/doc/Widgets.md @@ -33,6 +33,9 @@ Some/many of these widgets have restrictions which may restrict the type of page * filer - select filed items from network/matrix stream - must be logged in * archive - date range selector for network and channel pages + * args: 'wall' - 1 or 0, limit to wall posts or network/matrix posts (default) + * 'style': 'list' or 'select' - presentation format, a select form element or a list, default 'select' + * * fullprofile - same as profile currently diff --git a/doc/to_do_code.bb b/doc/to_do_code.bb index ac337e5d8..fc2c2082d 100644 --- a/doc/to_do_code.bb +++ b/doc/to_do_code.bb @@ -28,7 +28,9 @@ We need much more than this, but here are areas where developers can help. Pleas [li]Extend WebDAV to provide desktop access to photo albums]/li]
-[li]Create a module PDL editor (separate from but integrated with the page layout editor) as a separate module. This will allow folks to view and alter the pre-defined layouts for any module in the system. If the custom module is removed or empty, revert to the system layout.
+[li]External post connectors - create standard interface[/li]
+
+[li]External post connectors, add popular services[/li]
[li]service classes - provide a pluggable subscription payment gateway for premium accounts[/li]
diff --git a/include/directory.php b/include/directory.php index 794420b6f..c69fb1f4b 100644 --- a/include/directory.php +++ b/include/directory.php @@ -69,11 +69,12 @@ function directory_run($argv, $argc){ // the directory packet. That means we'll try again on the next poll run. $hash = random_string(); - q("insert into outq ( outq_hash, outq_account, outq_channel, outq_posturl, outq_async, outq_created, outq_updated, outq_notify, outq_msg ) - values ( '%s', %d, %d, '%s', %d, '%s', '%s', '%s', '%s' )", + q("insert into outq ( outq_hash, outq_account, outq_channel, outq_driver, outq_posturl, outq_async, outq_created, outq_updated, outq_notify, outq_msg ) + values ( '%s', %d, %d, '%s', '%s', %d, '%s', '%s', '%s', '%s' )", dbesc($hash), intval($channel['channel_account_id']), intval($channel['channel_id']), + dbesc('zot'), dbesc($url), intval(1), dbesc(datetime_convert()), diff --git a/include/identity.php b/include/identity.php index efc0d7d87..c8a925dac 100644 --- a/include/identity.php +++ b/include/identity.php @@ -80,6 +80,16 @@ function validate_channelname($name) { function create_sys_channel() { if(get_sys_channel()) return; + + // Ensure that there is a host keypair. + + if((! get_config('system','pubkey')) && (! get_config('system','prvkey'))) { + require_once('include/crypto.php'); + $hostkey = new_keypair(4096); + set_config('system','pubkey',$hostkey['pubkey']); + set_config('system','prvkey',$hostkey['prvkey']); + } + create_identity(array( 'account_id' => 'xxx', // This will create an identity with an (integer) account_id of 0, but account_id is required 'nickname' => 'sys', @@ -167,6 +177,11 @@ function create_identity($arr) { return $ret; } + if($nick === 'sys' && (! ($pageflags & PAGE_SYSTEM))) { + $ret['message'] = t('Reserved nickname. Please choose another.'); + return $ret; + } + if(check_webbie(array($nick)) !== $nick) { $ret['message'] = t('Nickname has unsupported characters or is already being used on this site.'); return $ret; diff --git a/include/items.php b/include/items.php index 6788ac3da..428767676 100755 --- a/include/items.php +++ b/include/items.php @@ -859,7 +859,7 @@ function encode_item($item) { if($item['term']) $x['tags'] = encode_item_terms($item['term']); - logger('encode_item: ' . print_r($x,true)); + logger('encode_item: ' . print_r($x,true), LOGGER_DATA); return $x; diff --git a/include/network.php b/include/network.php index 1fb4beaa7..14771d88f 100644 --- a/include/network.php +++ b/include/network.php @@ -43,8 +43,14 @@ function z_fetch_url($url, $binary = false, $redirects = 0, $opts = array()) { @curl_setopt($ch, CURLOPT_RETURNTRANSFER,true); @curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (compatible; Red)"); + $ciphers = @get_config('system','curl_ssl_ciphers'); + if(! $ciphers) + $ciphers = 'ALL:!eNULL'; + + @curl_setopt($ch, CURLOPT_SSL_CIPHER_LIST, $ciphers); + if (x($opts,'accept_content')){ - curl_setopt($ch,CURLOPT_HTTPHEADER, array ( + @curl_setopt($ch,CURLOPT_HTTPHEADER, array ( "Accept: " . $opts['accept_content'] )); } @@ -115,7 +121,9 @@ function z_fetch_url($url, $binary = false, $redirects = 0, $opts = array()) { $ret['return_code'] = $rc; $ret['success'] = (($rc >= 200 && $rc <= 299) ? true : false); if(! $ret['success']) { + $ret['error'] = curl_error($ch); $ret['debug'] = $curl_info; + logger('z_fetch_url: error:' . $ret['error'], LOGGER_DEBUG); logger('z_fetch_url: debug:' . print_r($curl_info,true), LOGGER_DATA); } $ret['body'] = substr($s,strlen($header)); @@ -136,21 +144,27 @@ function z_post_url($url,$params, $redirects = 0, $opts = array()) { if(($redirects > 8) || (! $ch)) return ret; - curl_setopt($ch, CURLOPT_HEADER, true); + @curl_setopt($ch, CURLOPT_HEADER, true); @curl_setopt($ch, CURLOPT_CAINFO, get_capath()); - curl_setopt($ch, CURLOPT_RETURNTRANSFER,true); - curl_setopt($ch, CURLOPT_POST,1); - curl_setopt($ch, CURLOPT_POSTFIELDS,$params); - curl_setopt($ch, CURLOPT_USERAGENT, "Red"); + @curl_setopt($ch, CURLOPT_RETURNTRANSFER,true); + @curl_setopt($ch, CURLOPT_POST,1); + @curl_setopt($ch, CURLOPT_POSTFIELDS,$params); + @curl_setopt($ch, CURLOPT_USERAGENT, "Red"); + + $ciphers = @get_config('system','curl_ssl_ciphers'); + if(! $ciphers) + $ciphers = 'ALL:!eNULL'; + + @curl_setopt($ch, CURLOPT_SSL_CIPHER_LIST, $ciphers); if (x($opts,'accept_content')){ - curl_setopt($ch,CURLOPT_HTTPHEADER, array ( + @curl_setopt($ch,CURLOPT_HTTPHEADER, array ( "Accept: " . $opts['accept_content'] )); } if(x($opts,'headers')) - curl_setopt($ch, CURLOPT_HTTPHEADER, $opts['headers']); + @curl_setopt($ch, CURLOPT_HTTPHEADER, $opts['headers']); if(x($opts,'timeout') && intval($opts['timeout'])) { @curl_setopt($ch, CURLOPT_TIMEOUT, $opts['timeout']); @@ -170,11 +184,11 @@ function z_post_url($url,$params, $redirects = 0, $opts = array()) { $prx = get_config('system','proxy'); if(strlen($prx)) { - curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1); - curl_setopt($ch, CURLOPT_PROXY, $prx); + @curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1); + @curl_setopt($ch, CURLOPT_PROXY, $prx); $prxusr = get_config('system','proxyuser'); if(strlen($prxusr)) - curl_setopt($ch, CURLOPT_PROXYUSERPWD, $prxusr); + @curl_setopt($ch, CURLOPT_PROXYUSERPWD, $prxusr); } // don't let curl abort the entire application @@ -183,7 +197,7 @@ function z_post_url($url,$params, $redirects = 0, $opts = array()) { $s = @curl_exec($ch); $base = $s; - $curl_info = curl_getinfo($ch); + $curl_info = @curl_getinfo($ch); $http_code = $curl_info['http_code']; $header = ''; @@ -217,8 +231,10 @@ function z_post_url($url,$params, $redirects = 0, $opts = array()) { $ret['return_code'] = $rc; $ret['success'] = (($rc >= 200 && $rc <= 299) ? true : false); if(! $ret['success']) { + $ret['error'] = curl_error($ch); $ret['debug'] = $curl_info; - logger('z_fetch_url: debug:' . print_r($curl_info,true), LOGGER_DATA); + logger('z_post_url: error:' . $ret['error'], LOGGER_DEBUG); + logger('z_post_url: debug:' . print_r($curl_info,true), LOGGER_DATA); } $ret['body'] = substr($s,strlen($header)); diff --git a/include/notifier.php b/include/notifier.php index a4a9051c3..4bf2ac153 100644 --- a/include/notifier.php +++ b/include/notifier.php @@ -486,10 +486,11 @@ function notifier_run($argv, $argc){ $hash = random_string(); if($packet_type === 'refresh' || $packet_type === 'purge') { $n = zot_build_packet($channel,$packet_type); - q("insert into outq ( outq_hash, outq_account, outq_channel, outq_posturl, outq_async, outq_created, outq_updated, outq_notify, outq_msg ) values ( '%s', %d, %d, '%s', %d, '%s', '%s', '%s', '%s' )", + q("insert into outq ( outq_hash, outq_account, outq_channel, outq_driver, outq_posturl, outq_async, outq_created, outq_updated, outq_notify, outq_msg ) values ( '%s', %d, %d, '%s', '%s', %d, '%s', '%s', '%s', '%s' )", dbesc($hash), intval($channel['channel_account_id']), intval($channel['channel_id']), + dbesc('zot'), dbesc($hub['hubloc_callback']), intval(1), dbesc(datetime_convert()), @@ -500,10 +501,11 @@ function notifier_run($argv, $argc){ } else { $n = zot_build_packet($channel,'notify',$env_recips,(($private) ? $hub['hubloc_sitekey'] : null),$hash); - q("insert into outq ( outq_hash, outq_account, outq_channel, outq_posturl, outq_async, outq_created, outq_updated, outq_notify, outq_msg ) values ( '%s', %d, %d, '%s', %d, '%s', '%s', '%s', '%s' )", + q("insert into outq ( outq_hash, outq_account, outq_channel, outq_driver, outq_posturl, outq_async, outq_created, outq_updated, outq_notify, outq_msg ) values ( '%s', %d, %d, '%s', '%s', %d, '%s', '%s', '%s', '%s' )", dbesc($hash), intval($target_item['aid']), intval($target_item['uid']), + dbesc('zot'), dbesc($hub['hubloc_callback']), intval(1), dbesc(datetime_convert()), diff --git a/include/queue.php b/include/queue.php index ec7246cb2..239d61fc0 100644 --- a/include/queue.php +++ b/include/queue.php @@ -33,8 +33,12 @@ function queue_run($argv, $argc){ // For the first 12 hours we'll try to deliver every 15 minutes // After that, we'll only attempt delivery once per hour. - - $r = q("SELECT * FROM outq WHERE outq_delivered = 0 and (( outq_created > UTC_TIMESTAMP() - INTERVAL 12 HOUR and outq_updated < UTC_TIMESTAMP() - INTERVAL 15 MINUTE ) OR ( outq_updated < UTC_TIMESTAMP() - INTERVAL 1 HOUR ))"); + // This currently only handles the default queue drivers ('zot' or '') which we will group by posturl + // so that we don't start off a thousand deliveries for a couple of dead hubs. + // The zot driver will deliver everything destined for a single hub once contact is made (*if* contact is made). + // Other drivers will have to do something different here and may need their own query. + + $r = q("SELECT * FROM outq WHERE outq_delivered = 0 and (( outq_created > UTC_TIMESTAMP() - INTERVAL 12 HOUR and outq_updated < UTC_TIMESTAMP() - INTERVAL 15 MINUTE ) OR ( outq_updated < UTC_TIMESTAMP() - INTERVAL 1 HOUR )) and outq_driver in ('','zot') group by outq_posturl"); } if(! $r) return; diff --git a/include/socgraph.php b/include/socgraph.php index 10d52da66..65e23f9df 100644 --- a/include/socgraph.php +++ b/include/socgraph.php @@ -62,6 +62,11 @@ function poco_load($xchan = '',$url = null) { $j = json_decode($s['body'],true); + if(! $j) { + logger('poco_load: unable to json_decode returned data.'); + return; + } + logger('poco_load: ' . print_r($j,true),LOGGER_DATA); if($xchan) { diff --git a/include/widgets.php b/include/widgets.php index 90586397f..82769d925 100644 --- a/include/widgets.php +++ b/include/widgets.php @@ -306,6 +306,7 @@ function widget_archive($arr) { $wall = ((array_key_exists('wall', $arr)) ? intval($arr['wall']) : 0); + $style = ((array_key_exists('style', $arr)) ? $arr['style'] : 'select'); $url = z_root() . '/' . $a->cmd; @@ -318,6 +319,7 @@ function widget_archive($arr) { '$title' => t('Archives'), '$size' => ((count($ret) > 6) ? 6 : count($ret)), '$url' => $url, + '$style' => $style, '$dates' => $ret )); return $o; diff --git a/include/zot.php b/include/zot.php index 35b322b54..c82918b3a 100644 --- a/include/zot.php +++ b/include/zot.php @@ -943,6 +943,8 @@ function import_xchan($arr,$ud_flags = UPDATE_FLAGS_UPDATED) { $ret['hash'] = $xchan_hash; } + + logger('import_xchan: result: ' . print_r($ret,true), LOGGER_DATA); return $ret; } @@ -2072,10 +2074,11 @@ function build_sync_packet($uid = 0, $packet = null) { foreach($synchubs as $hub) { $hash = random_string(); $n = zot_build_packet($channel,'notify',$env_recips,$hub['hubloc_sitekey'],$hash); - q("insert into outq ( outq_hash, outq_account, outq_channel, outq_posturl, outq_async, outq_created, outq_updated, outq_notify, outq_msg ) values ( '%s', %d, %d, '%s', %d, '%s', '%s', '%s', '%s' )", + q("insert into outq ( outq_hash, outq_account, outq_channel, outq_driver, outq_posturl, outq_async, outq_created, outq_updated, outq_notify, outq_msg ) values ( '%s', %d, %d, '%s', '%s', %d, '%s', '%s', '%s', '%s' )", dbesc($hash), intval($channel['channel_account']), intval($channel['channel_id']), + dbesc('zot'), dbesc($hub['hubloc_callback']), intval(1), dbesc(datetime_convert()), diff --git a/mod/authtest.php b/mod/authtest.php index 3044a880b..b6d940db2 100644 --- a/mod/authtest.php +++ b/mod/authtest.php @@ -21,6 +21,10 @@ function authtest_content(&$a) { $o .= '<br /><br />'; if(x($_GET,'dest')) { + if(strpos($_GET['dest'],'@')) { + $_GET['dest'] = $_REQUEST['dest'] = 'https://' . substr($_GET['dest'],strpos($_GET['dest'],'@')+1) . '/channel/' . substr($_GET['dest'],0,strpos($_GET['dest'],'@')); + } + $_REQUEST['test'] = 1; $x = magic_init($a); $o .= 'Local Setup returns: ' . print_r($x,true); diff --git a/mod/lockview.php b/mod/lockview.php index 32e7a3afb..b4a00dd81 100644 --- a/mod/lockview.php +++ b/mod/lockview.php @@ -31,7 +31,7 @@ function lockview_content(&$a) { if(($item['item_private'] == 1) && (! strlen($item['allow_cid'])) && (! strlen($item['allow_gid'])) && (! strlen($item['deny_cid'])) && (! strlen($item['deny_gid']))) { - echo t('Remote privacy information not available.') . '<br />'; + echo '<li>' . t('Remote privacy information not available.') . '</li>'; killme(); } @@ -40,7 +40,7 @@ function lockview_content(&$a) { $deny_users = expand_acl($item['deny_cid']); $deny_groups = expand_acl($item['deny_gid']); - $o = t('Visible to:') . '<br />'; + $o = '<li>' . t('Visible to:') . '</li>'; $l = array(); stringify_array_elms($allowed_groups,true); @@ -52,28 +52,28 @@ function lockview_content(&$a) { $r = q("SELECT name FROM `groups` WHERE hash IN ( " . implode(', ', $allowed_groups) . " )"); if($r) foreach($r as $rr) - $l[] = '<b>' . $rr['name'] . '</b>'; + $l[] = '<li><b>' . $rr['name'] . '</b></li>'; } if(count($allowed_users)) { $r = q("SELECT xchan_name FROM xchan WHERE xchan_hash IN ( " . implode(', ',$allowed_users) . " )"); if($r) foreach($r as $rr) - $l[] = $rr['xchan_name']; + $l[] = '<li>' . $rr['xchan_name'] . '</li>'; } if(count($deny_groups)) { $r = q("SELECT name FROM `groups` WHERE hash IN ( " . implode(', ', $deny_groups) . " )"); if($r) foreach($r as $rr) - $l[] = '<b><strike>' . $rr['name'] . '</strike></b>'; + $l[] = '<li><b><strike>' . $rr['name'] . '</strike></b></li>'; } if(count($deny_users)) { $r = q("SELECT xchan_name FROM xchan WHERE xchan_hash IN ( " . implode(', ', $deny_users) . " )"); if($r) foreach($r as $rr) - $l[] = '<strike>' . $rr['xchan_name'] . '</strike>'; + $l[] = '<li><strike>' . $rr['xchan_name'] . '</strike></li>'; } - echo $o . implode(', ', $l); + echo $o . implode($l); killme(); } diff --git a/mod/photos.php b/mod/photos.php index e2279188a..2740f91f9 100644 --- a/mod/photos.php +++ b/mod/photos.php @@ -535,14 +535,13 @@ function photos_content(&$a) { $albums = photos_albums_list($a->data['channel'],$a->data['observer']); - $selname = (($datum) ? hex2bin($datum) : ''); $albumselect = '<select id="photos-upload-album-select" name="album" size="4">'; $albumselect .= '<option value="" ' . ((! $selname) ? ' selected="selected" ' : '') . '> </option>'; if(count($albums)) { foreach($albums as $album) { - if($album['text'] === '') + if(! $album['text']) continue; $selected = (($selname === $album['text']) ? ' selected="selected" ' : ''); $albumselect .= '<option value="' . $album['text'] . '"' . $selected . '>' . $album['text'] . '</option>'; diff --git a/mod/probe.php b/mod/probe.php index e2dd4ef77..8e0b60dcc 100644 --- a/mod/probe.php +++ b/mod/probe.php @@ -20,10 +20,14 @@ function probe_content(&$a) { if($res['success']) $j = json_decode($res['body'],true); else { + $o .= sprintf( t('Fetching URL returns error: %1$s'),$res['error'] . "\r\n\r\n"); $o .= "<strong>https connection failed. Trying again with auto failover to http.</strong>\r\n\r\n"; $res = zot_finger($addr,$channel,true); if($res['success']) $j = json_decode($res['body'],true); + else + $o .= sprintf( t('Fetching URL returns error: %1$s'),$res['error'] . "\r\n\r\n"); + } if($j && $j['permissions'] && $j['permissions']['iv']) $j['permissions'] = json_decode(crypto_unencapsulate($j['permissions'],$channel['channel_prvkey']),true); diff --git a/mod/setup.php b/mod/setup.php index d12627e84..83317dc4c 100755 --- a/mod/setup.php +++ b/mod/setup.php @@ -103,6 +103,7 @@ function setup_post(&$a) { $test = z_fetch_url($siteurl."/setup/testrewrite"); if((! $test['success']) || ($test['body'] != 'ok')) { $a->data['url_fail'] = true; + $a->data['url_error'] = $test['error']; return; } } @@ -169,6 +170,8 @@ function setup_content(&$a) { if(x($a->data,'url_fail')) { $install_wizard_pass = 3; $wizard_status = t('Could not connect to specified site URL. Possible SSL certificate or DNS issue.'); + if($a->data['url_error']) + $wizard_status .= ' ' . $a->data['url_error']; } if(x($a->data,'db_create_failed')) { diff --git a/version.inc b/version.inc index 01e476a78..a63c71f59 100644 --- a/version.inc +++ b/version.inc @@ -1 +1 @@ -2014-03-21.623 +2014-03-24.626 diff --git a/view/css/conversation.css b/view/css/conversation.css index 8d7404b5d..46e1ed436 100644 --- a/view/css/conversation.css +++ b/view/css/conversation.css @@ -204,25 +204,14 @@ } -/* -.wall-item-lock { - position: absolute; - left: 105px; - top: 1px; -} - -.comment .wall-item-lock { - left: 65px; -} - -.wall-item-lock { - -} -*/ .lockview { cursor: pointer; } +.lockview-panel { + padding: 3px 20px; +} + .wall-item-location { text-overflow: ellipsis; max-width: 30%; diff --git a/view/en/htconfig.tpl b/view/en/htconfig.tpl index 840e7a124..8e2d32433 100644 --- a/view/en/htconfig.tpl +++ b/view/en/htconfig.tpl @@ -85,6 +85,13 @@ $a->config['system']['php_path'] = '{{$phpath}}'; $a->config['system']['directory_mode'] = DIRECTORY_MODE_NORMAL; + +// libcurl default ciphers - Redhat and NSS based systems may use a different +// syntax. This indicates the ciphers we will accept when connecting to any +// https site. We want this to be as liberal as possible. + +$a->config['system']['curl_ssl_ciphers'] = 'ALL:!eNULL'; + // default system theme $a->config['system']['theme'] = 'redbasic'; diff --git a/view/js/main.js b/view/js/main.js index 5f88ea9ca..38cde749c 100644 --- a/view/js/main.js +++ b/view/js/main.js @@ -728,27 +728,10 @@ function updateConvItems(mode,data) { 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(); + $.get('lockview/' + id, function(data) { + $('#panel-' + id).html(data); + }); } function post_comment(id) { @@ -1022,7 +1005,7 @@ $(window).scroll(function () { $('#more').show(); } - if($(window).scrollTop() + $(window).height() == $(document).height()) { + if($(window).scrollTop() + $(window).height() > $(document).height() - 100) { if((pageHasMoreContent) && (! loadingPage)) { $('#more').hide(); $('#no-more').hide(); @@ -1032,7 +1015,6 @@ $(window).scroll(function () { loadingPage = true; liveUpdate(); } - } } }); diff --git a/view/theme/redbasic/css/style.css b/view/theme/redbasic/css/style.css index ecb9352ec..edc8eebbb 100644 --- a/view/theme/redbasic/css/style.css +++ b/view/theme/redbasic/css/style.css @@ -113,15 +113,6 @@ blockquote { padding: 5px; } -#panel { - background-color: ivory; - position: absolute; - z-index: 2; - width: 30%; - padding: 25px; - border: 1px solid #444; -} - .heart { color: #FF0000; font-size: 100%; @@ -2114,7 +2105,7 @@ img.mail-list-sender-photo { list-style-type: none; } -#sidebar-group-list ul { +#sidebar-group-list ul, #posted-date-selector { list-style-type: none; } diff --git a/view/theme/redbasic/js/redbasic.js b/view/theme/redbasic/js/redbasic.js index c58711e94..70869f44b 100644 --- a/view/theme/redbasic/js/redbasic.js +++ b/view/theme/redbasic/js/redbasic.js @@ -30,6 +30,9 @@ if ($('aside').html().length == 0) { } $('#expand-tabs').click(function() { + if(!$('#tabs-collapse-1').hasClass('in')){ + $('html, body').animate({ scrollTop: 0 }, 'slow'); + } $('#expand-tabs-icon').toggleClass('icon-circle-arrow-down').toggleClass('icon-circle-arrow-up'); }); diff --git a/view/tpl/conv_item.tpl b/view/tpl/conv_item.tpl index 8d59951e7..dcf82e765 100755 --- a/view/tpl/conv_item.tpl +++ b/view/tpl/conv_item.tpl @@ -34,8 +34,8 @@ <div class="wall-item-photo-end"></div> </div> - <div class="wall-item-author"> - {{if $item.lock}}<i class="wall-item-lock icon-lock lockview" title="{{$item.lock}}" onclick="lockview(event,{{$item.id}});" ></i> {{/if}}<a href="{{$item.profile_url}}" title="{{$item.linktitle}}" class="wall-item-name-link"><span class="wall-item-name{{$item.sparkle}}" id="wall-item-name-{{$item.id}}" >{{$item.name}}</span></a>{{if $item.owner_url}} {{$item.via}} <a href="{{$item.owner_url}}" title="{{$item.olinktitle}}" class="wall-item-name-link"><span class="wall-item-name{{$item.osparkle}}" id="wall-item-ownername-{{$item.id}}">{{$item.owner_name}}</span></a>{{/if}}<br /> + <div class="wall-item-author dropdown"> + {{if $item.lock}}<i class="icon-lock lockview dropdown-toggle" data-toggle="dropdown" title="{{$item.lock}}" onclick="lockview(event,{{$item.id}});" ></i><ul id="panel-{{$item.id}}" class="lockview-panel dropdown-menu"></ul> {{/if}}<a href="{{$item.profile_url}}" title="{{$item.linktitle}}" class="wall-item-name-link"><span class="wall-item-name{{$item.sparkle}}" id="wall-item-name-{{$item.id}}" >{{$item.name}}</span></a>{{if $item.owner_url}} {{$item.via}} <a href="{{$item.owner_url}}" title="{{$item.olinktitle}}" class="wall-item-name-link"><span class="wall-item-name{{$item.osparkle}}" id="wall-item-ownername-{{$item.id}}">{{$item.owner_name}}</span></a>{{/if}}<br /> <div class="wall-item-ago" id="wall-item-ago-{{$item.id}}">{{if $item.verified}}<i class="icon-ok" title="{{$item.verified}}"></i> {{/if}}{{if $item.location}}<span class="wall-item-location" id="wall-item-location-{{$item.id}}">{{$item.location}}, </span>{{/if}}<span class="autotime" title="{{$item.isotime}}">{{$item.localtime}}{{if $item.editedtime}} {{$item.editedtime}}{{/if}}{{if $item.expiretime}} {{$item.expiretime}}{{/if}}</span>{{if $item.app}}<span class="item.app">{{$item.str_app}}</span>{{/if}}</div> </div> <div class="wall-item-content" id="wall-item-content-{{$item.id}}" > diff --git a/view/tpl/hdr.tpl b/view/tpl/hdr.tpl index f1e78b897..efb43224c 100644 --- a/view/tpl/hdr.tpl +++ b/view/tpl/hdr.tpl @@ -3,5 +3,3 @@ <ul id="nav-notifications-template" style="display:none;" rel="template"> <li class="{5}"><a href="{0}" title="{2} {3}"><img src="{1}"><span class='contactname'>{2}</span>{3}<br><span class="notif-when">{4}</span></a></li> </ul> - -<div id="panel" style="display: none;"></div> diff --git a/view/tpl/head.tpl b/view/tpl/head.tpl index c676cd773..e7b41523f 100755 --- a/view/tpl/head.tpl +++ b/view/tpl/head.tpl @@ -1,6 +1,6 @@ <meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <base href="{{$baseurl}}/" /> -<meta name="viewport" content="width=device-width, initial-scale=1"> +<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, user-scalable=0"> <meta name="generator" content="{{$generator}}" /> <!--[if IE]> diff --git a/view/tpl/posted_date_widget.tpl b/view/tpl/posted_date_widget.tpl index 6720d3628..1a8323926 100755 --- a/view/tpl/posted_date_widget.tpl +++ b/view/tpl/posted_date_widget.tpl @@ -1,9 +1,17 @@ <div id="datebrowse-sidebar" class="widget"> <h3>{{$title}}</h3> <script>function dateSubmit(dateurl) { window.location.href = dateurl; } </script> +{{if $style == 'list'}} +<ul id="posted-date-selector"> +{{foreach $dates as $d}} +<li class="posted-date-li"><a href="#" onclick="dateSubmit('{{$url}}?f=&dend={{$d.1}}&dbegin={{$d.2}}'); return false;">{{$d.0}}</a></li> +{{/foreach}} +</ul> +{{else}} <select id="posted-date-selector" name="posted-date-select" onchange="dateSubmit($(this).val());" size="{{$size}}"> {{foreach $dates as $d}} -<option value="{{$url}}?dend={{$d.1}}&dbegin={{$d.2}}" >{{$d.0}}</option> +<option value="{{$url}}?f=&dend={{$d.1}}&dbegin={{$d.2}}" >{{$d.0}}</option> {{/foreach}} </select> +{{/if}} </div> |