2 |
3 |
4 | {% for item in Items %}
5 | {% if forloop.index == 1 -%}
6 |
7 | {% else -%}
8 |
12 | {% endfor %}
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/Plugin/Theme/Avalanche/Assets/Lava/BlogItemDetail.lava:
--------------------------------------------------------------------------------
1 | {% for item in Items %}
2 |
3 |
4 | {{ item | Attribute:'Image' }}
5 |
6 |
7 | {{ item.Content }}
8 |
9 | {% endfor %}
--------------------------------------------------------------------------------
/Plugin/Theme/Avalanche/Assets/Lava/BlogItemList.lava:
--------------------------------------------------------------------------------
1 | {% for item in Items %}
2 |
3 | {{ item.Title }}
4 |
5 |
6 | {{ item | Attribute:'Summary' }}
7 |
8 |
9 |
10 |
11 | Read more
12 |
13 |
14 |
15 | {% endfor %}
16 |
17 |
18 | {% assign nextPageString = Pagination.NextPage | ToString %}
19 | {% assign prevPageString = Pagination.PreviousPage | ToString %}
20 |
21 | {% if {{Pagination.PreviousPage == -1 }} %}
22 |
23 | Prev
24 |
25 | {% else %}
26 |
27 | Prev
28 |
29 | {% endif %}
30 |
31 | {% if {{Pagination.NextPage == -1 }} %}
32 |
33 | Next
34 |
35 | {% else %}
36 |
37 | Next
38 |
39 | {% endif %}
40 |
--------------------------------------------------------------------------------
/Plugin/Theme/Avalanche/Assets/Lava/EventItemList.lava:
--------------------------------------------------------------------------------
1 | {% for eventOccurrenceSummary in EventOccurrenceSummaries %}
2 |
3 |
4 | {% if DetailsPage != empty %}
5 | {% capture eventName %}
{{ eventOccurrenceSummary.Name }}{% endcapture %}
6 | {% else %}
7 | {% assign eventName = eventOccurrenceSummary.Name %}
8 | {% endif %}
9 |
10 |
{{ eventName }}
11 |
12 | {% if eventOccurrenceSummary.EventItemOccurrence.Schedule.EffectiveStartDate != eventOccurrenceSummary.EventItemOccurrence.Schedule.EffectiveEndDate %}
13 | {{ eventOccurrenceSummary.EventItemOccurrence.Schedule.EffectiveStartDate | Date: 'MMM d' }} - {{ eventOccurrenceSummary.EventItemOccurrence.Schedule.EffectiveEndDate | Date: 'MMM d'}}
14 | {% else %}
15 | {{ eventOccurrenceSummary.DateTime | Date: 'ddd, MMM d / h:mmtt' }}
16 | {% endif %}
17 |
18 |
19 |
20 |
{{ eventOccurrenceSummary.Summary }}
21 |
22 | {% endfor %}
--------------------------------------------------------------------------------
/Plugin/Theme/Avalanche/Assets/Lava/EventItemOccurrenceList.lava:
--------------------------------------------------------------------------------
1 |
2 |
3 |
Register for {{ EventItem.Name }}
4 |
5 |
12 |
13 |
--------------------------------------------------------------------------------
/Plugin/Theme/Avalanche/Assets/Lava/EventItemOccurrenceListByAudience.lava:
--------------------------------------------------------------------------------
1 |
21 |
--------------------------------------------------------------------------------
/Plugin/Theme/Avalanche/Assets/Lava/FundraisingList.lava:
--------------------------------------------------------------------------------
1 |
2 |
Upcoming Fundraising Opportunities
3 |
4 |
5 | {% for item in GroupList %}
6 |
7 |
8 | {% assign photoUrl = item | Attribute:'OpportunityPhoto','Url' %}
9 | {% if photoUrl != '' %}
10 |

11 | {% endif %}
12 |
13 |
14 |
{{ item | Attribute:'OpportunityTitle' }}
15 |
16 | {% assign dateRangeParts = item | Attribute:'OpportunityDateRange','RawValue' | Split:',' %}
17 | {% assign dateRangePartsSize = dateRangeParts | Size %}
18 | {% if dateRangePartsSize == 2 %}
19 | {{ dateRangeParts[0] | Date:'MMMM dd, yyyy' }} to {{ dateRangeParts[1] | Date:'MMMM dd, yyyy' }}
20 | {% elsif dateRangePartsSize == 1 %}
21 | {{ dateRangeParts[0] | Date:'MMMM dd, yyyy' }}
22 | {% endif %}
23 |
24 | {{ item | Attribute:'OpportunityLocation' }}
25 |
26 |
27 | {{ item | Attribute:'OpportunitySummary' }}
28 |
29 |
View Details
30 |
31 |
32 |
33 | {% endfor %}
34 |
35 |
36 |
--------------------------------------------------------------------------------
/Plugin/Theme/Avalanche/Assets/Lava/FundraisingOpportunityParticipant.lava:
--------------------------------------------------------------------------------
1 | {% assign percentWidth = PercentMet %}
2 | {% if percentWidth > 100 %}
3 | {% assign percentWidth = 100 %}
4 | {% endif %}
5 | {% assign percentRounded = PercentMet | Floor %}
6 |
7 |
8 |
9 |
10 |

11 |
14 |
21 |
22 |
23 | {{ percentRounded }}% Complete
24 |
25 |
26 |
27 |
28 |
34 |
35 |
36 |
--------------------------------------------------------------------------------
/Plugin/Theme/Avalanche/Assets/Lava/FundraisingOpportunityUpdates.lava:
--------------------------------------------------------------------------------
1 | {% for item in ContentChannelItems %}
2 |
3 | {{ item.Title }}
4 | {{ item | Attribute:'Image' }}
5 |
6 | {{ item.Content }}
7 |
8 |
9 |
10 | {% endfor %}
11 |
--------------------------------------------------------------------------------
/Plugin/Theme/Avalanche/Assets/Lava/FundraisingParticipantProgress.lava:
--------------------------------------------------------------------------------
1 | {% assign disablePublicContributionRequests = GroupMember | Attribute:'DisablePublicContributionRequests' %}
2 | {% assign percentWidth = PercentMet %}
3 | {% if percentWidth > 100 %}
4 | {% assign percentWidth = 100 %}
5 | {% endif %}
6 | {% assign percentRounded = PercentMet | Floor %}
7 |
8 | {% if disablePublicContributionRequests != 'Yes' %}
9 |
10 |
11 |
12 |
13 |
16 |
23 |
24 |
25 | {{ percentRounded }}% Complete
26 |
27 |
28 |
29 |
30 |
37 |
38 | {% endif %}
--------------------------------------------------------------------------------
/Plugin/Theme/Avalanche/Assets/Lava/GroupListSidebar.lava:
--------------------------------------------------------------------------------
1 |
2 |
Groups
3 |
4 | {% assign groupCount = Groups | Size %}
5 |
6 | {% if groupCount == 0 %}
7 |
No Groups Available To List
8 | {% endif %}
9 |
10 |
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/Plugin/Theme/Avalanche/Assets/Lava/OpportunityDetail.lava:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | {% if Opportunity.PhotoId %}
6 |
7 |

8 |
9 | {% endif %}
10 |
11 |
{{ Opportunity.Name }}
12 | {{ Opportunity.Description }}
13 |
14 |
Opportunity Details:
15 |
16 | {% for attribute in Opportunity.AttributeValues %}
17 |
{{ attribute.AttributeName }}: {{ attribute.ValueFormatted }}
18 | {% endfor %}
19 |
20 |
21 | {% if LinkedPages.SignupPage != '' %}
22 | Connect
23 | {% endif %}
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/Plugin/Theme/Avalanche/Assets/Lava/OpportunityResponseMessage.lava:
--------------------------------------------------------------------------------
1 |
2 |
3 | Congratulations!
4 |
5 |
6 | Your request to serve on the {{Opportunity.PublicName}} team has been submitted.
7 |
--------------------------------------------------------------------------------
/Plugin/Theme/Avalanche/Assets/Lava/OpportunitySearch.lava:
--------------------------------------------------------------------------------
1 | {% assign opportunityCount = Opportunities | Size %}
2 |
3 | {% if opportunityCount == 0 %}
4 |
5 |
There are no opportunities that match the criteria
6 |
7 | {% endif %}
8 |
9 | {% for opportunity in Opportunities %}
10 |
11 |
12 |
13 | {{ opportunity.PublicName }}
14 |
15 |
16 |
17 |
18 |

19 |
20 |
21 |
{{opportunity.Summary}}
22 | {% if DetailPage contains "?" %}
23 |
More Info
24 | {% else %}
25 |
More Info
26 | {% endif %}
27 |
28 |
29 |
30 | {% endfor %}
31 |
32 |
37 |
--------------------------------------------------------------------------------
/Plugin/Theme/Avalanche/Assets/Lava/PageListAsBlocks.lava:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/Plugin/Theme/Avalanche/Assets/Lava/PageListAsTabs.lava:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/Plugin/Theme/Avalanche/Assets/Lava/PageNav.lava:
--------------------------------------------------------------------------------
1 | {% if Page.DisplayChildPages == 'true' and Page.Pages != empty %}
2 |
10 | {% endif %}
--------------------------------------------------------------------------------
/Plugin/Theme/Avalanche/Assets/Lava/PageSubNav.lava:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {% if Page.DisplayChildPages == 'true' and Page.Pages != empty %}
5 |
12 | {% endif %}
13 |
14 |
15 |
--------------------------------------------------------------------------------
/Plugin/Theme/Avalanche/Assets/Lava/PodcastMessageDetail.lava:
--------------------------------------------------------------------------------
1 |
4 |
5 | {% assign item = Items | First %}
6 | {% if item %}
7 |
8 | {% assign videoLink = item | Attribute:'VideoLink','RawValue' %}
9 | {% assign videoEmbed = item | Attribute:'VideoEmbed' %}
10 | {% assign audioLink = item | Attribute:'AudioLink','RawValue' %}
11 |
12 |
13 |
14 | {% if videoEmbed != '' %}
15 | {{ videoEmbed }}
16 | {% endif %}
17 |
18 | {{ item.Title }}
19 |
20 |
21 | {{ item | Attribute:'Speaker' }} - {{ item.StartDateTime | Date:'M/d/yyyy' }}
22 |
23 |
24 |
25 |
26 | {{ item.Content }}
27 |
28 |
29 | {% if videoLink != '' or audioLink != '' %}
30 |
31 |
Downloads & Resources
32 |
33 |
34 | {% if videoLink != '' %}
35 |
Video Download
36 | {% endif %}
37 |
38 | {% if audioLink != '' %}
39 |
Audio Download
40 | {% endif %}
41 |
42 |
43 |
44 | {% endif %}
45 |
46 |
47 |
48 |
49 | {% else %}
50 |
Could not find message.
51 | {% endif %}
--------------------------------------------------------------------------------
/Plugin/Theme/Avalanche/Assets/Lava/RSSFeedItem.lava:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/Plugin/Theme/Avalanche/Assets/Lava/RegistrationListSidebar.lava:
--------------------------------------------------------------------------------
1 | {% capture externalSite %}{{ 'Global' | Attribute:'PublicApplicationRoot' }}{% endcapture %}
2 | {% assign registrationCount = Registrations | Size %}
3 | {% if registrationCount > 0 %}
4 |
5 |
6 |
Recent Registrations
7 |
8 | {% for registration in Registrations %}
9 | -
10 | {{ registration.RegistrationInstance.Name }}
11 | {% if registration.BalanceDue > 0 %} {% endif %}
12 |
13 | {% endfor %}
14 |
15 |
16 |
17 | {% endif %}
18 |
19 |
--------------------------------------------------------------------------------
/Plugin/Theme/Avalanche/Assets/Lava/ScheduledTransactionListLiquid.lava:
--------------------------------------------------------------------------------
1 |
2 | {{ ScheduledTransaction.PersonName }}
3 | ${{ScheduledTransaction.ScheduledAmount}} on {{ScheduledTransaction.CurrencyType}}
4 | {{ScheduledTransaction.FrequencyDescription | downcase}}.
5 |
6 | {% if ScheduledTransaction.NextPaymentDate != null %}
7 | Next gift will be on {{ScheduledTransaction.NextPaymentDate | Date:"MMMM d, yyyy"}}.
8 | {% endif %}
9 |
--------------------------------------------------------------------------------
/Plugin/Theme/Avalanche/Layouts/Boxes.aspx:
--------------------------------------------------------------------------------
1 | <%@ Page Language="C#" MasterPageFile="Site.Master" AutoEventWireup="true" Inherits="Rock.Web.UI.RockPage" %>
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
20 |
21 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
--------------------------------------------------------------------------------
/Plugin/Theme/Avalanche/Layouts/NoScroll.aspx:
--------------------------------------------------------------------------------
1 | <%@ Page Language="C#" MasterPageFile="Site.Master" AutoEventWireup="true" Inherits="Rock.Web.UI.RockPage" %>
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
20 |
21 |
26 |
27 |
32 |
33 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
--------------------------------------------------------------------------------
/Plugin/Theme/Avalanche/Styles/.gitignore:
--------------------------------------------------------------------------------
1 | /bootstrap.css
2 | /theme.css
3 |
--------------------------------------------------------------------------------
/Plugin/Theme/Avalanche/Styles/ImageConvertedPDF.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SparkDevNetwork/Avalanche/061391f34698b45e404f97111491cad28b01b6e7/Plugin/Theme/Avalanche/Styles/ImageConvertedPDF.png
--------------------------------------------------------------------------------
/Plugin/Theme/Avalanche/Styles/_css-overrides.less:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SparkDevNetwork/Avalanche/061391f34698b45e404f97111491cad28b01b6e7/Plugin/Theme/Avalanche/Styles/_css-overrides.less
--------------------------------------------------------------------------------
/Plugin/Theme/Avalanche/Styles/_print.less:
--------------------------------------------------------------------------------
1 | @media print {
2 | @page {
3 | margin: .5in;
4 | }
5 |
6 | // default sidebar navs on most pages
7 | .nav-sub {
8 | display: none;
9 | }
10 |
11 | // admin bar on bottom right
12 | #cms-admin-footer {
13 | display: none;
14 | }
15 |
16 | // don't show URLs after links
17 | a[href]:after {
18 | content: '' !important;
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/Plugin/Theme/Avalanche/Styles/_variable-overrides.less:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/Plugin/Theme/Avalanche/Styles/bootstrap.less:
--------------------------------------------------------------------------------
1 | // Load Master Styles
2 | // -------------------------
3 | @import "../../../Styles/FontAwesome/font-awesome.less";
4 | @import "../../../Styles/Bootstrap/bootstrap.less";
5 |
6 | @fa-font-path: '../../Assets/Fonts/FontAwesome';
7 | @import "../../../Styles/_rock-variables.less";
8 | @import "_variables.less";
9 | @import "_variable-overrides.less";
10 |
11 | // custom variable switchbox
12 | @navbar-inverse-link-color: @nav-color;
13 | @blockquote-small-color: lighten(@text-color, 20%);
--------------------------------------------------------------------------------
/Plugin/packages.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Avalanche
2 |
3 |
4 | Avalanche is a framework for Xamarin apps which tightly integrate with Rock Rms. It is designed for administrators who are used to administrating Rock, and developers who are used to developing Rock. Concepts like pages, blocks, lava and users translate 1 to 1 in the app. The goal is to create an app which is flexible and meets the needs of churches of all sizes.
5 |
6 | Avalanche currently powers the Southeast Christian Church app, with other non-profits' apps in development.
7 |
8 | 
9 |
10 | ## Getting Started
11 |
12 | We have a great [Quick Start](https://github.com/secc/Avalanche/wiki/Quick-Start) guide so you can get to playing very quickly.
13 |
14 | The Southeast Christian Church app source code is hosted here as well. This way you can see any customization we may have made and learn from them.
15 |
16 | ## Contributing
17 |
18 | New features, wiki improvements or bug fixes welcome! Check out the [wiki](https://github.com/secc/Avalanche/wiki)
19 | for more information.
20 |
21 | iOS: [](https://appcenter.ms)
22 |
23 | Android: [](https://appcenter.ms)
24 |
25 | ## License
26 |
27 | Distributed under the Southeast Christian Church License Agreement. Plugins and other includes under their respective liscences.
28 |
29 | [Markdown View](https://github.com/aloisdeniel/MarkdownView) used under MIT license
30 |
--------------------------------------------------------------------------------
/Tools/AutoDocumenter/App.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/Tools/AutoDocumenter/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 |
5 | // General Information about an assembly is controlled through the following
6 | // set of attributes. Change these attribute values to modify the information
7 | // associated with an assembly.
8 | [assembly: AssemblyTitle( "AutoDocumenter" )]
9 | [assembly: AssemblyDescription( "" )]
10 | [assembly: AssemblyConfiguration( "" )]
11 | [assembly: AssemblyCompany( "Southeast Christian Church" )]
12 | [assembly: AssemblyProduct( "AutoDocumenter" )]
13 | [assembly: AssemblyCopyright( "Copyright © Southeast Christian Church 2018" )]
14 | [assembly: AssemblyTrademark( "" )]
15 | [assembly: AssemblyCulture( "" )]
16 |
17 | // Setting ComVisible to false makes the types in this assembly not visible
18 | // to COM components. If you need to access a type in this assembly from
19 | // COM, set the ComVisible attribute to true on that type.
20 | [assembly: ComVisible( false )]
21 |
22 | // The following GUID is for the ID of the typelib if this project is exposed to COM
23 | [assembly: Guid( "92e3884a-1aa9-4dfa-b756-58bb27d2badb" )]
24 |
25 | // Version information for an assembly consists of the following four values:
26 | //
27 | // Major Version
28 | // Minor Version
29 | // Build Number
30 | // Revision
31 | //
32 | // You can specify all the values or you can default the Build and Revision Numbers
33 | // by using the '*' as shown below:
34 | // [assembly: AssemblyVersion("1.0.*")]
35 | [assembly: AssemblyVersion( "1.0.0.0" )]
36 | [assembly: AssemblyFileVersion( "1.0.0.0" )]
37 |
--------------------------------------------------------------------------------
/Tools/AutoDocumenter/packages.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------