Compare commits

..

26 Commits

Author SHA1 Message Date
Richard van der Hoff
00a92452e8 0.5.0 2016-03-30 13:31:09 +01:00
Richard van der Hoff
32576e97d5 Prepare changelog for v0.5.0 2016-03-30 13:31:09 +01:00
Richard van der Hoff
20f93e761b Bump to react-sdk 0.4.0 and js-sdk 0.5.1. 2016-03-30 13:27:55 +01:00
Matthew Hodgson
bdf8f655fb tweak animation and comment it out for now as it maxes out a whole core on my top-of-the-line MBP... 2016-03-30 01:36:44 +01:00
Matthew Hodgson
8603dd4bb4 Merge pull request #1292 from aviraldg/feature-pretty-placeholder
Prettier, animated placeholder :D
2016-03-30 01:28:34 +01:00
Matthew Hodgson
212a070a02 add a github issues graphing script 2016-03-30 01:23:44 +01:00
Richard van der Hoff
e15358f77e Merge pull request #1307 from vector-im/rav/SimpleRoomHeader
RoomDirectory: use SimpleRoomHeader instead of RoomHeader
2016-03-29 23:26:09 +01:00
Richard van der Hoff
851b601d2c Pass SimpleRoomHeader topic in as a named prop 2016-03-29 23:25:26 +01:00
Richard van der Hoff
f52a1cf311 Merge pull request #1277 from vector-im/rav/no_parse_languages
Tell webpack not to parse the highlight.js languages
2016-03-29 22:48:58 +01:00
Matthew Hodgson
0ddb2cf183 fix action vertical spacing 2016-03-29 17:10:11 +01:00
Richard van der Hoff
cf0340c1c7 RoomDirectory: use SimpleRoomHeader instead of RoomHeader
SimpleRoomHeader and RoomHeader are now separate things
(https://github.com/matrix-org/matrix-react-sdk/pull/252), so update Vector
accordingly.
2016-03-29 16:45:24 +01:00
Aviral Dasgupta
6c5b4a298b Prettier, animated placeholder :D 2016-03-28 19:32:04 +05:30
Richard van der Hoff
c5c5e6d811 Tell webpack not to parse the highlight.js languages
Hopefully, this fixes https://github.com/vector-im/vector-web/issues/1046
without any side-effects.

It relies on the fact that the languages files are pretty simple - in
particular, they don't require any other modules. So we can tell webpack just
to suck them in as they are, rather than parsing them and causing an explosm.
2016-03-24 22:51:50 +00:00
Richard van der Hoff
2462ede539 Switch to dev versions of react-sdk and js-sdk 2016-03-24 17:39:49 +00:00
Richard van der Hoff
b6e4c59877 Merge pull request #1249 from vector-im/dbkr/disable_composer_if_no_permission
CSS for https://github.com/matrix-org/matrix-react-sdk/pull/247
2016-03-24 11:44:16 +00:00
Matthew Hodgson
0bc1624d4e make senderprofile smaller 2016-03-24 01:19:55 +00:00
Matthew Hodgson
f81f7db6cd fix layout problems exposed by #cats 2016-03-24 01:12:27 +00:00
Matthew Hodgson
9e95d2e4ac make image event bodies display as blocks to avoid auto sizing, so we can measure their width to explicitly set their height 2016-03-24 00:13:03 +00:00
Richard van der Hoff
95a46ae201 Merge pull request #1254 from vector-im/rav/uridecode_fragment
URI-decode the hash-fragment
2016-03-23 22:59:46 +00:00
David Baker
8764b44325 Un-commit config change 2016-03-23 16:41:17 +00:00
Richard van der Hoff
090db5490b URI-decode the hash-fragment
It looks like % characters in the hash-fragment are meant to be interpreted as
a URI-encoding, so we should decode them.
2016-03-23 15:58:00 +00:00
David Baker
cfcb050822 Add composer controls wrapper to set correct width on the composer controls wrapper div 2016-03-23 15:21:37 +00:00
David Baker
66e36e9d40 CSS for https://github.com/matrix-org/matrix-react-sdk/pull/247 2016-03-23 15:15:38 +00:00
Richard van der Hoff
4507117f89 0.4.1 2016-03-23 14:58:30 +00:00
Richard van der Hoff
cad48b62e4 Prepare changelog for v0.4.1 2016-03-23 14:58:30 +00:00
Richard van der Hoff
5138dc9fd8 Bump to react-sdk 0.3.1
Disables ScrollPanel debug.
2016-03-23 14:56:22 +00:00
11 changed files with 217 additions and 20 deletions

View File

@@ -1,3 +1,26 @@
Changes in [0.5.0](https://github.com/vector-im/vector-web/releases/tag/v0.5.0) (2016-03-30)
============================================================================================
[Full Changelog](https://github.com/vector-im/vector-web/compare/v0.4.1...v0.5.0)
* Prettier, animated placeholder :D
[\#1292](https://github.com/vector-im/vector-web/pull/1292)
(Disabled for now due to high CPU usage)
* RoomDirectory: use SimpleRoomHeader instead of RoomHeader
[\#1307](https://github.com/vector-im/vector-web/pull/1307)
* Tell webpack not to parse the highlight.js languages
[\#1277](https://github.com/vector-im/vector-web/pull/1277)
* CSS for https://github.com/matrix-org/matrix-react-sdk/pull/247
[\#1249](https://github.com/vector-im/vector-web/pull/1249)
* URI-decode the hash-fragment
[\#1254](https://github.com/vector-im/vector-web/pull/1254)
Changes in [0.4.1](https://github.com/vector-im/vector-web/releases/tag/v0.4.1) (2016-03-23)
============================================================================================
[Full Changelog](https://github.com/vector-im/vector-web/compare/v0.4.0...v0.4.1)
* Update to matrix-react-sdk 0.3.1; see
https://github.com/matrix-org/matrix-react-sdk/blob/v0.3.1/CHANGELOG.md
(Disables debug logging)
Changes in [0.4.0](https://github.com/vector-im/vector-web/releases/tag/v0.4.0) (2016-03-23)
============================================================================================
[Full Changelog](https://github.com/vector-im/vector-web/compare/v0.3.0...v0.4.0)

View File

@@ -1,6 +1,6 @@
{
"name": "vector-web",
"version": "0.4.0",
"version": "0.5.0",
"description": "Vector webapp",
"author": "matrix.org",
"repository": {
@@ -37,8 +37,8 @@
"gfm.css": "^1.1.1",
"highlight.js": "^9.0.0",
"linkifyjs": "^2.0.0-beta.4",
"matrix-js-sdk": "^0.5.0",
"matrix-react-sdk": "^0.3.0",
"matrix-js-sdk": "^0.5.1",
"matrix-react-sdk": "^0.4.0",
"modernizr": "^3.1.0",
"q": "^1.4.1",
"react": "^0.14.2",

104
scripts/issues-no-state.pl Executable file
View File

@@ -0,0 +1,104 @@
#!/usr/bin/env perl
use warnings;
use strict;
use Net::GitHub;
use DateTime;
use DateTime::Format::ISO8601;
my $gh = Net::GitHub->new(
login => 'ara4n', pass => 'secret'
);
$gh->set_default_user_repo('vector-im', 'vector-web');
my @issues = $gh->issue->repos_issues({ state => 'all', milestone => 3 });
while ($gh->issue->has_next_page) {
push @issues, $gh->issue->next_page;
}
# we want:
# day by day:
# split by { open, closed }
# split by { bug, feature, neither }
# each split by { p1, p2, p3, p4, p5, unprioritised } <- priority
# each split by { minor, major, critical, cosmetic, network, no-severity } <- severity
# then split (with overlap between the groups) as { total, tag1, tag2, ... }?
# ...and then all over again split by milestone.
my $days = {};
my $schema = {};
my $now = DateTime->now();
foreach my $issue (@issues) {
next if ($issue->{pull_request});
use Data::Dumper;
print STDERR Dumper($issue);
my @label_list = map { $_->{name} } @{$issue->{labels}};
my $labels = {};
$labels->{$_} = 1 foreach (@label_list);
$labels->{bug}++ if ($labels->{cosmetic} && !$labels->{bug} && !$labels->{feature});
my $extract_labels = sub {
my $label = undef;
foreach (@_) {
$label ||= $_ if (delete $labels->{$_});
}
return $label;
};
my $type = &$extract_labels(qw(bug feature)) || "neither";
my $priority = &$extract_labels(qw(p1 p2 p3 p4 p5)) || "unprioritised";
my $severity = &$extract_labels(qw(minor major critical cosmetic network)) || "no-severity";
my $start = DateTime::Format::ISO8601->parse_datetime($issue->{created_at});
my $end = $issue->{closed_at} ? DateTime::Format::ISO8601->parse_datetime($issue->{closed_at}) : $now;
do {
my $ymd = $start->ymd();
$days->{ $ymd }->{ $type }->{ $priority }->{ $severity }->{ total }++;
$schema->{ $type }->{ $priority }->{ $severity }->{ total }++;
foreach (keys %$labels) {
$days->{ $ymd }->{ $type }->{ $priority }->{ $severity }->{ $_ }++;
$schema->{ $type }->{ $priority }->{ $severity }->{ $_ }++;
}
$start = $start->add(days => 1);
} while (DateTime->compare($start, $end) < 0);
}
print "day,";
foreach my $type (sort keys %{$schema}) {
foreach my $priority (sort keys %{$schema->{$type}}) {
foreach my $severity (sort keys %{$schema->{$type}->{$priority}}) {
# foreach my $tag (sort keys %{$schema->{$type}->{$priority}->{$severity}}) {
# print "\"$type\n$priority\n$severity\n$tag\",";
# }
print "\"$type\n$priority\n$severity\",";
}
}
}
print "\n";
foreach my $day (sort keys %$days) {
print "$day,";
foreach my $type (sort keys %{$schema}) {
foreach my $priority (sort keys %{$schema->{$type}}) {
foreach my $severity (sort keys %{$schema->{$type}->{$priority}}) {
# foreach my $tag (sort keys %{$schema->{$type}->{$priority}->{$severity}}) {
# print $days->{$day}->{$type}->{$priority}->{$severity}->{$tag} || 0;
# print ",";
# }
print $days->{$day}->{$type}->{$priority}->{$severity}->{total} || 0;
print ",";
}
}
}
print "\n";
}

View File

@@ -180,10 +180,10 @@ module.exports = React.createClass({
);
}
var RoomHeader = sdk.getComponent('rooms.RoomHeader');
var SimpleRoomHeader = sdk.getComponent('rooms.SimpleRoomHeader');
return (
<div className="mx_RoomDirectory">
<RoomHeader simpleHeader="Directory" />
<SimpleRoomHeader title="Directory" />
<div className="mx_RoomDirectory_list">
<input ref="roomAlias" placeholder="Join a room (e.g. #foo:domain.com)" className="mx_RoomDirectory_input" size="64" onKeyUp={ this.onKeyUp }/>
<GeminiScrollbar className="mx_RoomDirectory_tableWrapper">

View File

@@ -14,9 +14,38 @@
text-align: center;
}
.mx_RoomStatusBar_placeholderIndicator {
.mx_RoomStatusBar_placeholderIndicator span {
color: #4a4a4a;
opacity: 0.5;
/*
position: relative;
animation-duration: 1s;
animation-name: bounce;
animation-direction: alternate;
animation-iteration-count: infinite;
*/
}
.mx_RoomStatusBar_placeholderIndicator span:nth-child(1) {
animation-delay: 0.3s;
}
.mx_RoomStatusBar_placeholderIndicator span:nth-child(2) {
animation-delay: 0.6s;
}
.mx_RoomStatusBar_placeholderIndicator span:nth-child(3) {
animation-delay: 0.9s;
}
@keyframes bounce {
from {
opacity: 0.5;
top: 0;
}
to {
opacity: 0.2;
top: -3px;
}
}
.mx_RoomStatusBar_scrollDownIndicator {

View File

@@ -14,6 +14,10 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
.mx_MImageBody {
display: block;
}
.mx_MImageBody_thumbnail {
max-width: 100%;
/*

View File

@@ -40,10 +40,9 @@ limitations under the License.
color: #454545;
opacity: 0.5;
font-size: 13px;
margin-bottom: 4px;
display: block;
overflow-y: hidden;
cursor: pointer;
vertical-align: text-top;
}
.mx_EventTile .mx_MessageTimestamp {

View File

@@ -37,6 +37,20 @@ limitations under the License.
display: block;
}
.mx_MessageComposer_composecontrols {
width: 100%;
}
.mx_MessageComposer_noperm_error {
display: table-cell;
width: 100%;
vertical-align: middle;
height: 70px;
text-align: center;
font-style: italic;
color: #888;
}
.mx_MessageComposer_input {
display: table-cell;
width: 100%;

View File

@@ -85,6 +85,7 @@ limitations under the License.
padding-left: 60px;
padding-right: 60px;
min-height: 100%;
max-width: 270px;
color: #fff;
}
@@ -99,6 +100,7 @@ limitations under the License.
.mx_ImageView_name {
font-size: 18px;
margin-bottom: 6px;
word-wrap: break-word;
}
.mx_ImageView_metadata {

View File

@@ -74,12 +74,27 @@ var validBrowser = checkBrowserFeatures([
// We want to support some name / value pairs in the fragment
// so we're re-using query string like format
//
// returns {location, params}
function parseQsFromFragment(location) {
var hashparts = location.hash.split('?');
// if we have a fragment, it will start with '#', which we need to drop.
// (if we don't, this will return '').
var fragment = location.hash.substring(1);
// our fragment may contain a query-param-like section. we need to fish
// this out *before* URI-decoding because the params may contain ? and &
// characters which are only URI-encoded once.
var hashparts = fragment.split('?');
var result = {
location: decodeURIComponent(hashparts[0]),
params: {}
};
if (hashparts.length > 1) {
return qs.parse(hashparts[1]);
result.params = qs.parse(hashparts[1]);
}
return {};
return result;
}
function parseQs(location) {
@@ -92,14 +107,13 @@ function routeUrl(location) {
var params = parseQs(location);
var loginToken = params.loginToken;
if (loginToken) {
window.matrixChat.showScreen('token_login', parseQs(location));
}
else if (location.hash.indexOf('#/register') == 0) {
window.matrixChat.showScreen('register', parseQsFromFragment(location));
} else {
var hashparts = location.hash.split('?');
window.matrixChat.showScreen(hashparts[0].substring(2), parseQsFromFragment(location));
window.matrixChat.showScreen('token_login', params);
return;
}
var fragparts = parseQsFromFragment(location);
window.matrixChat.showScreen(fragparts.location.substring(1),
fragparts.params);
}
function onHashChange(ev) {
@@ -160,13 +174,14 @@ window.onload = function() {
function loadApp() {
if (validBrowser) {
var MatrixChat = sdk.getComponent('structures.MatrixChat');
var fragParts = parseQsFromFragment(window.location);
window.matrixChat = ReactDOM.render(
<MatrixChat
onNewScreen={onNewScreen}
registrationUrl={makeRegistrationUrl()}
ConferenceHandler={VectorConferenceHandler}
config={configJson}
startingQueryParams={parseQsFromFragment(window.location)}
startingQueryParams={fragParts.params}
enableGuest={true} />,
document.getElementById('matrixchat')
);

View File

@@ -14,7 +14,14 @@ module.exports = {
{ test: /\.js$/, loader: "babel", include: path.resolve('./src') },
// css-raw-loader loads CSS but doesn't try to treat url()s as require()s
{ test: /\.css$/, loader: ExtractTextPlugin.extract("css-raw-loader") },
]
],
noParse: [
// don't parse the languages within highlight.js. They cause stack
// overflows (https://github.com/webpack/webpack/issues/1721), and
// there is no need for webpack to parse them - they can just be
// included as-is.
/highlight\.js\/lib\/languages/,
],
},
output: {
devtoolModuleFilenameTemplate: function(info) {