protected Element CreateElement(RepositoryDetailedModel repo) { var description = ViewModel.ShowRepositoryDescription ? repo.Description : string.Empty; var sse = new RepositoryElement(repo.Name, description, repo.Owner, new Avatar(repo.Logo)); sse.Tapped += () => ViewModel.GoToRepositoryCommand.Execute(repo); return sse; }
protected Element CreateElement(RepositoryDetailedModel repo) { var description = ViewModel.ShowRepositoryDescription ? repo.Description : string.Empty; var sse = new RepositoryElement(repo.Name, repo.FollowersCount, repo.ForkCount, description, repo.Owner, new Uri(repo.LargeLogo(64))) { ShowOwner = ViewModel.ShowRepositoryOwner }; sse.Tapped += () => ViewModel.GoToRepositoryCommand.Execute(repo); return sse; }
protected Element CreateElement(RepositoryDetailedModel repo) { var description = Application.Account.HideRepositoryDescriptionInList ? string.Empty : repo.Description; var sse = new RepositoryElement(repo.Name, repo.FollowersCount, repo.ForkCount, description, repo.Owner, new Uri(repo.LargeLogo(64))) { ShowOwner = ShowOwner }; sse.Tapped += () => NavigationController.PushViewController(new RepositoryInfoController(repo), true); return sse; }
/// <summary> /// For some strange reason, bitbucket returns the smallest images possible to us via the repository detailed model /// That's completely absurd. So we'll try to make it bigger by manipulation of the URL based on some patterns I've noticed /// </summary> /// <returns>The logo.</returns> /// <param name="model">Model.</param> /// <param name="size">Size.</param> public static string LargeLogo(this RepositoryDetailedModel model, int size) { var logo = model.Logo; if (logo == null) { return(null); } var match = Regex.Match(logo, @"(.*/img/language-avatars/.*)_\d+.png$", RegexOptions.IgnoreCase); if (match.Success) { if (match.Groups.Count >= 2) { return(match.Groups[1].Value + "_" + size + ".png"); } } return(logo); }
private void GoToCommits(RepositoryDetailedModel repoModel, string branch) { if (branch != null) { ShowViewModel<ChangesetsViewModel>(new ChangesetsViewModel.NavObject { Username = repoModel.Owner, Repository = repoModel.Name, Branch = branch }); } else { ShowViewModel<ChangesetBranchesViewModel>(new ChangesetBranchesViewModel.NavObject { Username = repoModel.Owner, Repository = repoModel.Name }); } }
private TextBlock CreateRepositoryTextBlock(RepositoryDetailedModel repoModel) { //Most likely indicates a deleted repository if (repoModel == null) return new TextBlock("Unknown Repository"); if (repoModel.Name == null) return new TextBlock("<Deleted Repository>"); return new AnchorBlock(repoModel.Owner + "/" + repoModel.Name, () => GoToRepository(repoModel)); }
private void GoToPullRequests(RepositoryDetailedModel repo) { if (repo == null) return; ShowViewModel<PullRequestsViewModel>(new PullRequestsViewModel.NavObject { Username = repo.Owner, Repository = repo.Name }); }
private void GoToRepositoryWiki(RepositoryDetailedModel repository, string page) { if (repository == null) return; ShowViewModel<Wiki.WikiViewModel>(new Wiki.WikiViewModel.NavObject { Username = repository.Owner, Repository = repository.Slug, Page = page }); }
private void GoToRepositoryIssues(RepositoryDetailedModel eventModel) { if (eventModel == null) return; ShowViewModel<IssuesViewModel>(new IssuesViewModel.NavObject { Username = eventModel.Owner, Repository = eventModel.Slug }); }
public RepositoryInfoController(RepositoryDetailedModel model) : this(model.Owner, model.Name) { Model = model; }
public void Render(RepositoryDetailedModel model) { if (model == null) return; Title = model.Name; var avatar = new Avatar(model.Logo).ToUrl(128); ICollection<Section> root = new LinkedList<Section>(); HeaderView.SubText = string.IsNullOrWhiteSpace(model.Description) ? "Updated " + model.UtcLastUpdated.Humanize() : model.Description; HeaderView.SetImage(avatar, Images.RepoPlaceholder); RefreshHeaderView(); var sec1 = new Section(); _split1.Button1.Image = model.IsPrivate ? AtlassianIcon.Locked.ToImage() : AtlassianIcon.Unlocked.ToImage(); _split1.Button1.Text = model.IsPrivate ? "Private" : "Public"; _split1.Button2.Text = string.IsNullOrEmpty(model.Language) ? "N/A" : model.Language; sec1.Add(_split1); _split3.Button1.Text = model.Scm.ApplyCase(LetterCasing.Title); _split3.Button2.Text = "Issues".ToQuantity(ViewModel.Issues); sec1.Add(_split3); _split2.Button1.Text = (model.UtcCreatedOn).ToString("MM/dd/yy"); _split2.Button2.Text = model.Size.Bytes().ToString("#.##"); sec1.Add(_split2); var owner = new StringElement("Owner", model.Owner) { Image = AtlassianIcon.User.ToImage(), Accessory = UITableViewCellAccessory.DisclosureIndicator }; owner.Clicked.BindCommand(ViewModel.GoToOwnerCommand); sec1.Add(owner); if (model.ForkOf != null) { var parent = new StringElement("Forked From", model.ForkOf.Name) { Image = AtlassianIcon.Devtoolsfork.ToImage(), Accessory = UITableViewCellAccessory.DisclosureIndicator }; parent.Clicked.Select(_ => model.ForkOf).BindCommand(ViewModel.GoToForkParentCommand); sec1.Add(parent); } var events = new StringElement("Events", AtlassianIcon.Blogroll.ToImage()); events.Clicked.BindCommand(ViewModel.GoToEventsCommand); var sec2 = new Section { events }; if (model.HasWiki) { var wiki = new StringElement("Wiki", AtlassianIcon.Edit.ToImage()); wiki.Clicked.BindCommand(ViewModel.GoToWikiCommand); sec2.Add(wiki); } if (model.HasIssues) { var issues = new StringElement("Issues", AtlassianIcon.Flag.ToImage()); issues.Clicked.BindCommand(ViewModel.GoToIssuesCommand); sec2.Add(issues); } if (ViewModel.HasReadme) { var readme = new StringElement("Readme", AtlassianIcon.Pagedefault.ToImage()); readme.Clicked.BindCommand(ViewModel.GoToReadmeCommand); sec2.Add(readme); } var commits = new StringElement("Commits", AtlassianIcon.Devtoolscommit.ToImage()); commits.Clicked.BindCommand(ViewModel.GoToCommitsCommand); var pullRequests = new StringElement("Pull Requests", AtlassianIcon.Devtoolspullrequest.ToImage()); pullRequests.Clicked.BindCommand(ViewModel.GoToPullRequestsCommand); var source = new StringElement("Source", AtlassianIcon.Filecode.ToImage()); source.Clicked.BindCommand(ViewModel.GoToSourceCommand); var sec3 = new Section { commits, pullRequests, source }; foreach (var s in new[] { new Section { _split }, sec1, sec2, sec3 }) root.Add(s); if (!String.IsNullOrEmpty(ViewModel.Repository.Website)) { var website = new StringElement("Website", AtlassianIcon.Homepage.ToImage()); website.Clicked.Select(_ => ViewModel.Repository.Website).BindCommand(ViewModel.GoToUrlCommand); root.Add(new Section { website }); } Root.Reset(root); }
public void Render(RepositoryDetailedModel model) { if (model == null) return; Title = model.Name; var avatar = new Avatar(model.Logo).ToUrl(128); var root = new RootElement(Title) { UnevenRows = true }; HeaderView.SubText = string.IsNullOrWhiteSpace(model.Description) ? "Updated " + model.UtcLastUpdated.Humanize() : model.Description; HeaderView.SetImage(avatar, Images.RepoPlaceholder); RefreshHeaderView(); var stargazersCommand = ViewModel.GoToStargazersCommand; var split = new SplitButtonElement(); split.AddButton("Watchers", model.FollowersCount.ToString(), () => stargazersCommand.Execute(null)); split.AddButton("Forks", model.ForkCount.ToString()); split.AddButton("Branches", ViewModel.Branches?.Count.ToString() ?? "-"); var sec1 = new Section(); _split1.Button1.Image = model.IsPrivate ? AtlassianIcon.Locked.ToImage() : AtlassianIcon.Unlocked.ToImage(); _split1.Button1.Text = model.IsPrivate ? "Private" : "Public"; _split1.Button2.Text = string.IsNullOrEmpty(model.Language) ? "N/A" : model.Language; sec1.Add(_split1); _split3.Button1.Text = model.Scm.ApplyCase(LetterCasing.Title); _split3.Button2.Text = "Issues".ToQuantity(ViewModel.Issues); sec1.Add(_split3); _split2.Button1.Text = (model.UtcCreatedOn).ToString("MM/dd/yy"); _split2.Button2.Text = model.Size.Bytes().ToString("#.##"); sec1.Add(_split2); var owner = new StyledStringElement("Owner", model.Owner) { Image = AtlassianIcon.User.ToImage(), Accessory = UITableViewCellAccessory.DisclosureIndicator }; owner.Tapped += () => ViewModel.GoToOwnerCommand.Execute(null); sec1.Add(owner); if (model.ForkOf != null) { var parent = new StyledStringElement("Forked From", model.ForkOf.Name) { Image = AtlassianIcon.Devtoolsfork.ToImage(), Accessory = UITableViewCellAccessory.DisclosureIndicator }; parent.Tapped += () => ViewModel.GoToForkParentCommand.Execute(model.ForkOf); sec1.Add(parent); } var events = new StyledStringElement("Events", () => ViewModel.GoToEventsCommand.Execute(null), AtlassianIcon.Blogroll.ToImage()); var sec2 = new Section { events }; if (model.HasWiki) sec2.Add(new StyledStringElement("Wiki", () => ViewModel.GoToWikiCommand.Execute(null), AtlassianIcon.Edit.ToImage())); if (model.HasIssues) sec2.Add(new StyledStringElement("Issues", () => ViewModel.GoToIssuesCommand.Execute(null), AtlassianIcon.Flag.ToImage())); if (ViewModel.HasReadme) sec2.Add(new StyledStringElement("Readme", () => ViewModel.GoToReadmeCommand.Execute(null), AtlassianIcon.Pagedefault.ToImage())); var sec3 = new Section { new StyledStringElement("Commits", () => ViewModel.GoToCommitsCommand.Execute(null), AtlassianIcon.Devtoolscommit.ToImage()), new StyledStringElement("Pull Requests", () => ViewModel.GoToPullRequestsCommand.Execute(null), AtlassianIcon.Devtoolspullrequest.ToImage()), new StyledStringElement("Source", () => ViewModel.GoToSourceCommand.Execute(null), AtlassianIcon.Filecode.ToImage()), }; root.Add(new[] { new Section { split }, sec1, sec2, sec3 }); if (!String.IsNullOrEmpty(ViewModel.Repository.Website)) { root.Add(new Section { new StyledStringElement("Website", () => ViewModel.GoToUrlCommand.Execute(ViewModel.Repository.Website), AtlassianIcon.Homepage.ToImage()) }); } Root = root; }
public void Render(RepositoryDetailedModel model) { Title = model.Name; var avatar = new Avatar(model.Logo).ToUrl(128); var root = new RootElement(Title) { UnevenRows = true }; HeaderView.SubText = string.IsNullOrWhiteSpace(model.Description) ? "Updated " + model.UtcLastUpdated.Humanize() : model.Description; HeaderView.SetImage(avatar, Images.RepoPlaceholder); RefreshHeaderView(); var split = new SplitButtonElement(); split.AddButton("Followers", model.FollowersCount.ToString()); split.AddButton("Forks", model.ForkCount.ToString()); var sec1 = new Section(); sec1.Add(new SplitElement(new SplitElement.Row { Text1 = model.IsPrivate ? "Private" : "Public", Image1 = model.IsPrivate ? Images.Locked : Images.Unlocked, Text2 = string.IsNullOrEmpty(model.Language) ? "N/A" : model.Language, Image2 = Images.Language })); //Calculate the best representation of the size string size; if (model.Size / 1024f < 1) size = string.Format("{0:0.##}B", model.Size); else if ((model.Size / 1024f / 1024f) < 1) size = string.Format("{0:0.##}KB", model.Size / 1024f); else size = string.Format("{0:0.##}MB", model.Size / 1024f / 1024f); // // sec1.Add(new SplitElement(new SplitElement.Row { // Text1 = model + (model.HasIssues == 1 ? " Issue" : " Issues"), // Image1 = Images.Flag, // Text2 = model.ForkCount.ToString() + (model.ForkCount == 1 ? " Fork" : " Forks"), // Image2 = Images.Fork // })); // sec1.Add(new SplitElement(new SplitElement.Row { Text1 = (model.UtcCreatedOn).ToString("MM/dd/yy"), Image1 = Images.Create, Text2 = size, Image2 = Images.Size })); var owner = new StyledStringElement("Owner", model.Owner) { Image = Images.Person, Accessory = UITableViewCellAccessory.DisclosureIndicator }; owner.Tapped += () => ViewModel.GoToOwnerCommand.Execute(null); sec1.Add(owner); if (model.ForkOf != null) { var parent = new StyledStringElement("Forked From", model.ForkOf.Name) { Image = Images.Fork, Accessory = UITableViewCellAccessory.DisclosureIndicator }; parent.Tapped += () => ViewModel.GoToForkParentCommand.Execute(model.ForkOf); sec1.Add(parent); } var followers = new StyledStringElement("Watchers", "" + model.FollowersCount) { Image = Images.Star, Accessory = UITableViewCellAccessory.DisclosureIndicator }; followers.Tapped += () => ViewModel.GoToStargazersCommand.Execute(null); sec1.Add(followers); var events = new StyledStringElement("Events", () => ViewModel.GoToEventsCommand.Execute(null), Images.Event); var sec2 = new Section { events }; if (model.HasWiki) sec2.Add(new StyledStringElement("Wiki", () => ViewModel.GoToWikiCommand.Execute(null), Images.Pencil)); if (model.HasIssues) sec2.Add(new StyledStringElement("Issues", () => ViewModel.GoToIssuesCommand.Execute(null), Images.Flag)); if (ViewModel.HasReadme) sec2.Add(new StyledStringElement("Readme", () => ViewModel.GoToReadmeCommand.Execute(null), Images.File)); var sec3 = new Section { new StyledStringElement("Commits", () => ViewModel.GoToCommitsCommand.Execute(null), Images.Commit), new StyledStringElement("Pull Requests", () => ViewModel.GoToPullRequestsCommand.Execute(null), Images.Hand), new StyledStringElement("Source", () => ViewModel.GoToSourceCommand.Execute(null), Images.Script), }; root.Add(new[] { new Section { split }, sec1, sec2, sec3 }); if (!String.IsNullOrEmpty(ViewModel.Repository.Website)) { root.Add(new Section { new StyledStringElement("Website", () => ViewModel.GoToUrlCommand.Execute(ViewModel.Repository.Website), Images.Webpage) }); } Root = root; }
public void Render(RepositoryDetailedModel model) { Title = model.Name; var root = new RootElement(Title) { UnevenRows = true }; _header.Title = Title; _header.Subtitle = "Updated ".t() + (model.UtcLastUpdated).ToDaysAgo(); _header.ImageUri = ViewModel.ImageUrl; root.Add(new Section(_header)); var sec1 = new Section(); if (!string.IsNullOrEmpty(model.Description) && !string.IsNullOrWhiteSpace(model.Description)) { var element = new MultilinedElement(model.Description) { BackgroundColor = UIColor.White, CaptionColor = Theme.CurrentTheme.MainTitleColor, ValueColor = Theme.CurrentTheme.MainTextColor }; element.CaptionColor = element.ValueColor; element.CaptionFont = element.ValueFont; sec1.Add(element); } sec1.Add(new SplitElement(new SplitElement.Row { Text1 = model.IsPrivate ? "Private".t() : "Public".t(), Image1 = model.IsPrivate ? Images.Locked : Images.Unlocked, Text2 = string.IsNullOrEmpty(model.Language) ? "N/A" : model.Language, Image2 = Images.Language })); //Calculate the best representation of the size string size; if (model.Size / 1024f < 1) size = string.Format("{0:0.##}B", model.Size); else if ((model.Size / 1024f / 1024f) < 1) size = string.Format("{0:0.##}KB", model.Size / 1024f); else size = string.Format("{0:0.##}MB", model.Size / 1024f / 1024f); // // sec1.Add(new SplitElement(new SplitElement.Row { // Text1 = model + (model.HasIssues == 1 ? " Issue".t() : " Issues".t()), // Image1 = Images.Flag, // Text2 = model.ForkCount.ToString() + (model.ForkCount == 1 ? " Fork".t() : " Forks".t()), // Image2 = Images.Fork // })); // sec1.Add(new SplitElement(new SplitElement.Row { Text1 = (model.UtcCreatedOn).ToString("MM/dd/yy"), Image1 = Images.Create, Text2 = size, Image2 = Images.Size })); var owner = new StyledStringElement("Owner".t(), model.Owner) { Image = Images.Person, Accessory = UITableViewCellAccessory.DisclosureIndicator }; owner.Tapped += () => ViewModel.GoToOwnerCommand.Execute(null); sec1.Add(owner); if (model.ForkOf != null) { var parent = new StyledStringElement("Forked From".t(), model.ForkOf.Name) { Image = Images.Fork, Accessory = UITableViewCellAccessory.DisclosureIndicator }; parent.Tapped += () => ViewModel.GoToForkParentCommand.Execute(model.ForkOf); sec1.Add(parent); } var followers = new StyledStringElement("Watchers".t(), "" + model.FollowersCount) { Image = Images.Star, Accessory = UITableViewCellAccessory.DisclosureIndicator }; followers.Tapped += () => ViewModel.GoToStargazersCommand.Execute(null); sec1.Add(followers); var events = new StyledStringElement("Events".t(), () => ViewModel.GoToEventsCommand.Execute(null), Images.Event); var sec2 = new Section { events }; if (model.HasWiki) sec2.Add(new StyledStringElement("Wiki".t(), () => ViewModel.GoToWikiCommand.Execute(null), Images.Pencil)); if (model.HasIssues) sec2.Add(new StyledStringElement("Issues".t(), () => ViewModel.GoToIssuesCommand.Execute(null), Images.Flag)); if (ViewModel.HasReadme) sec2.Add(new StyledStringElement("Readme".t(), () => ViewModel.GoToReadmeCommand.Execute(null), Images.File)); var sec3 = new Section { new StyledStringElement("Commits".t(), () => ViewModel.GoToCommitsCommand.Execute(null), Images.Commit), new StyledStringElement("Pull Requests".t(), () => ViewModel.GoToPullRequestsCommand.Execute(null), Images.Hand), new StyledStringElement("Source".t(), () => ViewModel.GoToSourceCommand.Execute(null), Images.Script), }; root.Add(new[] { sec1, sec2, sec3 }); if (!String.IsNullOrEmpty(ViewModel.Repository.Website)) { root.Add(new Section { new StyledStringElement("Website", () => ViewModel.GoToUrlCommand.Execute(ViewModel.Repository.Website), Images.Webpage) }); } Root = root; }