Compare commits
	
		
			46 Commits
		
	
	
		
			1.0.2
			...
			civicrm_ma
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 04f2e8eb28 | |||
| d97b124a79 | |||
| 1ad7a4368d | |||
| f1d93b1719 | |||
| 4aaeac1f07 | |||
| 7220ee6178 | |||
| 3fce3c1a7a | |||
| 5832ee4b12 | |||
| 4983b916c7 | |||
| 665a3690b1 | |||
| 7584dc796e | |||
| 5502122e21 | |||
| b056420f9e | |||
| 0564bec241 | |||
| 186bc4f373 | |||
| 7d9b81b324 | |||
| a50249fe22 | |||
| 9443912519 | |||
| 9c4166e573 | |||
| 39c391e803 | |||
| 33add8fd8f | |||
| 1f3ada29d7 | |||
| 442d758cb4 | |||
| b0a959e2e4 | |||
| bdea07164d | |||
| cf4f1fbd46 | |||
| 81a96fbf34 | |||
| eec8b982eb | |||
| 9ed30e8717 | |||
| f675143d59 | |||
| bbea557322 | |||
| c23bf3f8d9 | |||
| d51f265fd5 | |||
| 4e1d28ece6 | |||
| 96384a91ea | |||
| 43559560e8 | |||
| bc9b85e23b | |||
| bbeff69a10 | |||
| 8293415fbd | |||
| 3c3fe48672 | |||
| f8c9d7bf10 | |||
| 8ad7fd5fed | |||
| 0939401b25 | |||
| 64b028baf9 | |||
| e9e3568cbe | |||
| a21c093a5a | 
| @ -1,28 +1,21 @@ | |||||||
| image: ruby:2.4.2 | image: ruby:2.4 | ||||||
|  |  | ||||||
| stages: | stages: | ||||||
|   - build |  | ||||||
|   - deploy |   - deploy | ||||||
|  |  | ||||||
| build: |  | ||||||
|   stage: build |  | ||||||
|   before_script: |  | ||||||
|     - gem install jekyll |  | ||||||
|   script: |  | ||||||
|     - jekyll build -d public |  | ||||||
|   artifacts: |  | ||||||
|     paths: |  | ||||||
|       - public |  | ||||||
|  |  | ||||||
| deploy: | deploy: | ||||||
|   stage: deploy |   stage: deploy | ||||||
|   before_script: |   before_script: | ||||||
|  |     - apt-get update -y | ||||||
|  |     - apt-get -y install rsync | ||||||
|     - gem install jekyll |     - gem install jekyll | ||||||
|  |     - eval $(ssh-agent -s) | ||||||
|   script: |   script: | ||||||
|     - jekyll build -d public |     - jekyll build -d public | ||||||
|     - ./bin/deploy |     - ssh-add <(echo "$SSH_PRIVATE_KEY") | ||||||
|  |     - rsync -rvz --delete -e 'ssh -o StrictHostKeyChecking=no' ./public/ "$SERVER_USER"@autonomic.zone:/var/www/autonomic.zone/html/ | ||||||
|   artifacts: |   artifacts: | ||||||
|     paths: |     paths: | ||||||
|       - public |       - public | ||||||
|   only: |   only: | ||||||
|     - tags |     - master | ||||||
|  | |||||||
| @ -6,6 +6,13 @@ is based on [Keep a Changelog] and this project adheres to [Semantic Versioning] | |||||||
| [Keep a Changelog]: http://keepachangelog.com/en/1.0.0/ | [Keep a Changelog]: http://keepachangelog.com/en/1.0.0/ | ||||||
| [Semantic Versioning]: http://semver.org/spec/v2.0.0.html | [Semantic Versioning]: http://semver.org/spec/v2.0.0.html | ||||||
|  |  | ||||||
|  | ## [1.0.2] - 2017-11-05 | ||||||
|  |  | ||||||
|  | ## Added | ||||||
|  | - [#18]: Add shared account email. | ||||||
|  |  | ||||||
|  | [#18]: https://gitlab.com/autonomic-cooperative/autonomic-cooperative.gitlab.io/merge_requests/18 | ||||||
|  |  | ||||||
| ## [1.0.1] - 2017-10-14 | ## [1.0.1] - 2017-10-14 | ||||||
|  |  | ||||||
| ## Added | ## Added | ||||||
|  | |||||||
| @ -1,5 +1,7 @@ | |||||||
| # Contributing | # Contributing | ||||||
|  |  | ||||||
|  | ### Not that these instructions may be out of date. If you find any quirks that aren't described in this file, please make patches. | ||||||
|  |  | ||||||
| # What Is Jekyll | # What Is Jekyll | ||||||
|  |  | ||||||
| For those unfamiliar with how Jekyll works, check out [jekyll.rb] for all the | For those unfamiliar with how Jekyll works, check out [jekyll.rb] for all the | ||||||
| @ -36,6 +38,7 @@ Then you can get your Ruby dependencies installed with: | |||||||
|  |  | ||||||
| ``` bash | ``` bash | ||||||
| $ gem install jekyll bundler | $ gem install jekyll bundler | ||||||
|  | $ bundle install | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| # Serve Website | # Serve Website | ||||||
|  | |||||||
							
								
								
									
										2
									
								
								Gemfile
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								Gemfile
									
									
									
									
									
								
							| @ -1,3 +1,3 @@ | |||||||
| source "https://rubygems.org" | source "https://rubygems.org" | ||||||
| ruby '2.4.2' | ruby '2.4.7' | ||||||
| gemspec | gemspec | ||||||
|  | |||||||
							
								
								
									
										34
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										34
									
								
								README.md
									
									
									
									
									
								
							| @ -2,34 +2,28 @@ | |||||||
|  |  | ||||||
| # autonomic-cooperative.gitlab.io | # autonomic-cooperative.gitlab.io | ||||||
|  |  | ||||||
| A [Jekyll] based site for the Autonomic Cooperative. | A [Jekyll] based site for the Autonomic Cooperative. The site is based on the [spectral-jekyll-theme] template. | ||||||
|  |  | ||||||
| The template is based on the [spectral-jekyll-theme]. | We use [autonomic.zone] for production. We used to use [autonomic-cooperative.gitlab.io] as staging but this isn't really needed anymore. | ||||||
|  |  | ||||||
| We use [autonomic.zone] for production and [autonomic-cooperative.gitlab.io] for staging. |  | ||||||
|  |  | ||||||
| [Jekyll]: https://jekyllrb.com/ | [Jekyll]: https://jekyllrb.com/ | ||||||
| [spectral-jekyll-theme]: https://github.com/andrewbanchich/spectral-jekyll-theme | [spectral-jekyll-theme]: https://github.com/andrewbanchich/spectral-jekyll-theme | ||||||
| [autonomic.zone]: https://autonomic.zone/ | [autonomic.zone]: https://autonomic.zone/ | ||||||
| [autonomic-cooperative.gitlab.io]: http://autonomic-cooperative.gitlab.io/ | [autonomic-cooperative.gitlab.io]: http://autonomic-cooperative.gitlab.io/ | ||||||
|  |  | ||||||
|  | # Make a change | ||||||
|  |  | ||||||
|  | Work on features in branches. If you commit to master, open a merge request from your branch unless it is a tiny change. Our [deploy] CI stage will push any changes on master branch to [autonomic.zone]. | ||||||
|  |  | ||||||
|  | [deploy]: https://gitlab.com/autonomic-cooperative/autonomic-cooperative.gitlab.io/blob/d16aec42bd2ddd7449f55d9f06b03499cc660b22/.gitlab-ci.yml#L17 | ||||||
|  |  | ||||||
|  | Watch the [CI/CD pipeline] to see that it builds successfully. | ||||||
|  |  | ||||||
|  | [CI/CD pipeline]: https://gitlab.com/autonomic-cooperative/autonomic-cooperative.gitlab.io/pipelines | ||||||
|  |  | ||||||
|  |  | ||||||
| # Contribute | # Contribute | ||||||
|  |  | ||||||
| Please see [CONTRIBUTING.md] for the juicy details. | Please see [CONTRIBUTING.md] for the juicy details. It may need to be updated so please submit patches if you discover some quirk! | ||||||
|  |  | ||||||
| [CONTRIBUTING.md]: https://gitlab.com/autonomic-cooperative/autonomic-cooperative.gitlab.io/blob/master/CONTRIBUTING.md | [CONTRIBUTING.md]: https://gitlab.com/autonomic-cooperative/autonomic-cooperative.gitlab.io/blob/master/CONTRIBUTING.md | ||||||
|  |  | ||||||
| # Make A New Release |  | ||||||
|  |  | ||||||
| Firstly, you'll need to tag and push the latest HEAD with: |  | ||||||
|  |  | ||||||
| ```bash |  | ||||||
| $ git tag -a <YOUR-VERSION-NUMBER> $(git rev-parse HEAD) |  | ||||||
| $ git push upstream master --tags |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| Then make a release with: |  | ||||||
|  |  | ||||||
| ```bash |  | ||||||
| $ make release |  | ||||||
| ``` |  | ||||||
|  | |||||||
							
								
								
									
										26
									
								
								bin/deploy
									
									
									
									
									
								
							
							
						
						
									
										26
									
								
								bin/deploy
									
									
									
									
									
								
							| @ -1,26 +0,0 @@ | |||||||
| #!/bin/bash |  | ||||||
|  |  | ||||||
| GITUSERNAME="autonomicgitlabci" |  | ||||||
| GITUSEREMAIL="autonomicgitlabci@nowhere.com" |  | ||||||
| DEPLOYSCRIPT="https://github.com/X1011/git-directory-deploy/raw/master/deploy.sh" |  | ||||||
|  |  | ||||||
| export GIT_DEPLOY_DIR="public" |  | ||||||
| export GIT_DEPLOY_BRANCH="production" |  | ||||||
| export GIT_DEPLOY_REPO="git@gitlab.com:autonomic-cooperative/autonomic-cooperative.gitlab.io.git" |  | ||||||
|  |  | ||||||
| apt-get update -y |  | ||||||
| apt-get install -yqq wget openssh-client |  | ||||||
|  |  | ||||||
| wget $DEPLOYSCRIPT && chmod +x deploy.sh |  | ||||||
|  |  | ||||||
| git config --global user.email $GITUSEREMAIL |  | ||||||
| git config --global user.name  $GITUSERNAME |  | ||||||
|  |  | ||||||
| mkdir -p ~/.ssh |  | ||||||
| eval "$(ssh-agent -s)" |  | ||||||
| ssh-add <(echo "$SSH_PRIVATE_KEY") |  | ||||||
| echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config |  | ||||||
|  |  | ||||||
| ./deploy.sh -m "Git tag: $(git describe --exact-match HEAD)" |  | ||||||
|  |  | ||||||
| rm -Rfv .ssh |  | ||||||
| @ -6,6 +6,7 @@ | |||||||
|     <div class="image">{% if post.image %}<img src="{% if site.featured-image-source %}{{ post.image | prepend: site.featured-image-source | absolute_url }}{% else %}{{ "" | absolute_url }}/assets/images/{{ post.image }}{% endif %}" alt="" />{% endif %}</div> |     <div class="image">{% if post.image %}<img src="{% if site.featured-image-source %}{{ post.image | prepend: site.featured-image-source | absolute_url }}{% else %}{{ "" | absolute_url }}/assets/images/{{ post.image }}{% endif %}" alt="" />{% endif %}</div> | ||||||
|     <div class="content"> |     <div class="content"> | ||||||
|       <h2><a href="{{ post.url | relative_url }}" class="link">{{ post.title }}</a></h2> |       <h2><a href="{{ post.url | relative_url }}" class="link">{{ post.title }}</a></h2> | ||||||
|  |       <p class="h5">{{ post.date | date: '%B %d, %Y' }}</p> | ||||||
|       <p>{{ post.description }}</p> |       <p>{{ post.description }}</p> | ||||||
|     </div> |     </div> | ||||||
|   </section> |   </section> | ||||||
|  | |||||||
| @ -3,7 +3,7 @@ | |||||||
|   <header class="major"> |   <header class="major"> | ||||||
|     <h2>Get in Touch</h2> |     <h2>Get in Touch</h2> | ||||||
|     <p>Contact us to discuss your project's needs and arrange a consultation.</p> |     <p>Contact us to discuss your project's needs and arrange a consultation.</p> | ||||||
|     <p><a href="mailto:autonomic-coop@posteo.net">autonomic-coop@posteo.net</a></p> |     <p><a href="mailto:helo@autonomic.zone">helo@autonomic.zone</a></p> | ||||||
|     <p> |     <p> | ||||||
|       If you use encrypted email, here is our <a href="{{ "/assets/pgp/autonomic-key.asc" | relative_url }}">PGP key</a>. |       If you use encrypted email, here is our <a href="{{ "/assets/pgp/autonomic-key.asc" | relative_url }}">PGP key</a>. | ||||||
|       Our key fingerprint is: <br/><code id="fingerprint">82FC 87C5 1A71 902F DC10 2CF5 4F90 D55B B24B 1147</code> |       Our key fingerprint is: <br/><code id="fingerprint">82FC 87C5 1A71 902F DC10 2CF5 4F90 D55B B24B 1147</code> | ||||||
|  | |||||||
| @ -14,6 +14,13 @@ | |||||||
|   <ul class="copyright"> |   <ul class="copyright"> | ||||||
|     <li class="icon fa-creative-commons"> {{ site.title }}</li> |     <li class="icon fa-creative-commons"> {{ site.title }}</li> | ||||||
|   </ul> |   </ul> | ||||||
|  |  | ||||||
|  |   <address> | ||||||
|  |       Autonomic Co-operative</br> | ||||||
|  |       1539 Pershore Road </br> | ||||||
|  |       Stirchley</br> | ||||||
|  |       B30 2JH | ||||||
|  |   </address> | ||||||
| </footer> | </footer> | ||||||
|  |  | ||||||
| </div> | </div> | ||||||
|  | |||||||
							
								
								
									
										5
									
								
								src/_includes/membership-footer.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								src/_includes/membership-footer.html
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,5 @@ | |||||||
|  | <section class="wrapper style5 special compressed"> | ||||||
|  |     <a href="https://www.coops.tech/" target="_blank"> | ||||||
|  |     <img src="/assets/images/Member-of-CoTech-logo-200.png" alt="Member of Co-Tech"/> | ||||||
|  |     </a> | ||||||
|  | </section> | ||||||
| @ -30,7 +30,7 @@ | |||||||
|         <h3>Cloud Storage and Collaboration</h3> |         <h3>Cloud Storage and Collaboration</h3> | ||||||
|         <p> |         <p> | ||||||
|           <a href="https://sandstorm.io/">Sandstorm</a> is a personal "cloud |           <a href="https://sandstorm.io/">Sandstorm</a> is a personal "cloud | ||||||
|           in a box" , designed with the upmost security in mind. It allows you to |           in a box" , designed with the utmost security in mind. It allows you to | ||||||
|           deploy apps for file-storage, collaborative document editing, |           deploy apps for file-storage, collaborative document editing, | ||||||
|           calendars, to-do lists and much more. |           calendars, to-do lists and much more. | ||||||
|         </p> |         </p> | ||||||
| @ -71,7 +71,7 @@ | |||||||
|         <p> |         <p> | ||||||
|           A grounded and principled understanding of the cybersecurity domain can ensure |           A grounded and principled understanding of the cybersecurity domain can ensure | ||||||
|           your organisation is not liable to any unwanted security threats. We provide |           your organisation is not liable to any unwanted security threats. We provide | ||||||
|           structured training. |           structured training tailored to your threat model. | ||||||
|         </p> |         </p> | ||||||
|       </li> |       </li> | ||||||
|     </ul> |     </ul> | ||||||
|  | |||||||
| @ -9,6 +9,7 @@ | |||||||
|   {% include services.html %} |   {% include services.html %} | ||||||
|   {% include contact.html %} |   {% include contact.html %} | ||||||
|   {% include footer.html %} |   {% include footer.html %} | ||||||
|  |   {% include membership-footer.html %} | ||||||
|   {% include foot-scripts.html %} |   {% include foot-scripts.html %} | ||||||
| </body> | </body> | ||||||
| </html> | </html> | ||||||
|  | |||||||
| @ -35,6 +35,7 @@ | |||||||
|                     {{ item.title }} |                     {{ item.title }} | ||||||
|                     {% if item.layout %}</a>{% endif %} |                     {% if item.layout %}</a>{% endif %} | ||||||
|                     </h2> |                     </h2> | ||||||
|  |                     <p class="h5">{{ item.date | date: '%B %d, %Y' }}</p> | ||||||
|                     <p>{{ item.description }}</p> |                     <p>{{ item.description }}</p> | ||||||
|                 </div> |                 </div> | ||||||
|             </section> |             </section> | ||||||
|  | |||||||
| @ -1,7 +1,7 @@ | |||||||
| --- | --- | ||||||
| layout: post | layout: post | ||||||
| title: Our Founding Principles | title: Our Founding Principles | ||||||
| description: Autonomic Co-operative And Our Core Values. | description: Autonomic Co-operative And Our Core Values | ||||||
| image: pic01.jpg | image: pic01.jpg | ||||||
| category: values | category: values | ||||||
| date: 2017-10-03 | date: 2017-10-03 | ||||||
|  | |||||||
							
								
								
									
										129
									
								
								src/_posts/2019-08-30-civicrm-mailing-validation.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										129
									
								
								src/_posts/2019-08-30-civicrm-mailing-validation.md
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,129 @@ | |||||||
|  | --- | ||||||
|  | layout: post | ||||||
|  | title: CiviCRM AngularJS extension | ||||||
|  | description: Adding custom validation to the CiviCRM Mailing form | ||||||
|  | image: civicrm_validation_header.jpg | ||||||
|  | category: howto | ||||||
|  | date: 2019-08-30 | ||||||
|  | --- | ||||||
|  |  | ||||||
|  | We support [Campaign Against Arms Trade](https://caat.org.uk), a right-on group | ||||||
|  | that works to end the international arms trade, with their technology – | ||||||
|  | including CiviCRM](https://civicrm.org/), a popular open source | ||||||
|  | "constituent relationship management" platform.  | ||||||
|  |  | ||||||
|  | Among other things, CAAT uses CiviCRM's "Mailing" features to send out emails to | ||||||
|  | their supporters, and they told us that they're experiencing an annoying bug: if | ||||||
|  | a user sends out a mailing with the same name (not subject line, just the | ||||||
|  | internal identifier 🙄) as an existing one, it'll cause the CRM to freeze up | ||||||
|  | elsewhere. | ||||||
|  |  | ||||||
|  | As an added challenge, the mailing features of CiviCRM [now use | ||||||
|  | AngularJS](https://docs.civicrm.org/dev/en/latest/framework/angular/) following | ||||||
|  | a recent rebuild by the developers, and there aren't many tutorials or examples | ||||||
|  | out there to customise it. Luckily, the CiviCRM developer community was | ||||||
|  | super-helpful, and we managed to sort out some in-form validation to prevent | ||||||
|  | duplicate mailing names for our client… and now for you, too! | ||||||
|  |  | ||||||
|  | ## Create a new extension | ||||||
|  |  | ||||||
|  | Using [`civix`](https://github.com/totten/civix), we set up a new CiviCRM extension for our code: | ||||||
|  |  | ||||||
|  |     civix generate:module mailing | ||||||
|  |  | ||||||
|  | (We called our extension `mailing`, because our creative director was occupied | ||||||
|  | with an Art at the time) | ||||||
|  |  | ||||||
|  | Our client sensibly keeps their custom CiviCRM extensions in `git`, so at this | ||||||
|  | stage we initialised a repository, added the boilerplate template code, and | ||||||
|  | pushed. | ||||||
|  |  | ||||||
|  | ## Set up the AngularJS hook | ||||||
|  |  | ||||||
|  | A function called `mailing_civicrm_alterAngular()`  will get executed whenever | ||||||
|  | an AngularJS page loads, and you can use a `ChangeSet` to edit an AngularJS | ||||||
|  | template. Because AngularJS templates specify form logic, this also lets you | ||||||
|  | change the validation behaviour. Our hook function looks like this: | ||||||
|  |  | ||||||
|  |     function mailing_civicrm_alterAngular($angular) { | ||||||
|  |       $changeSet = \Civi\Angular\ChangeSet::create('mailing_name_unique') | ||||||
|  |         ->alterHtml('~/crmMailing/BlockSummary.html', function(phpQueryObject $doc) { | ||||||
|  |           // name validation | ||||||
|  |           $doc->find('.crm-group:has([crm-ui-id="subform.mailingName"])')->attr('ng-controller', 'NameValidateCtrl'); | ||||||
|  |           $doc->find('[crm-ui-id="subform.mailingName"]')->attr('ng-blur', 'validateName(mailing, \'name\')'); | ||||||
|  |           $doc->find('[crm-ui-id="subform.mailingName"]')->attr('crm-ui-validate', 'isValid'); | ||||||
|  |         }); | ||||||
|  |  | ||||||
|  |       $angular->add($changeSet); | ||||||
|  |  | ||||||
|  |       CRM_Core_Resources::singleton()->addScriptFile('mailing', 'js/disallow-duplicate-names.js'); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Setting `crm-ui-validate` to `validateName` directly fired the event _way_ too | ||||||
|  | many times, so instead `validateName` is only called when focus leaves the | ||||||
|  | field, `ng-blur`, which then sets the `isValid` variable that's checked by | ||||||
|  | `crm-ui-validate`. | ||||||
|  |  | ||||||
|  | ## Create the `validateName` function | ||||||
|  |  | ||||||
|  | Then, the code which queries the CiviCRM API to check for mailings with | ||||||
|  | duplicate names: | ||||||
|  |  | ||||||
|  |     var validating = false; | ||||||
|  |      | ||||||
|  |     (function(angular, $) { | ||||||
|  |       var crmMailing = angular.module('crmMailing'); | ||||||
|  |      | ||||||
|  |       crmMailing.controller('NameValidateCtrl', function($scope) { | ||||||
|  |           $scope.isValid = false; | ||||||
|  |      | ||||||
|  |           $scope.validateName = function(mailing, field) { | ||||||
|  |             if (!validating) { | ||||||
|  |               validating = true; | ||||||
|  |      | ||||||
|  |               CRM.api3('Mailing', 'get', { | ||||||
|  |                 "sequential": 1, | ||||||
|  |                 "name": mailing[field], | ||||||
|  |                 "id": {"!=": mailing.id} | ||||||
|  |               }).then(function(result) { | ||||||
|  |                 // do something with result | ||||||
|  |                 if (result.count > 0 ) { | ||||||
|  |                   $scope.isValid = false; | ||||||
|  |                   CRM.alert(ts('There is already a mailing with this name; sending this one will crash CiviCRM!')); | ||||||
|  |                 } else { | ||||||
|  |                   $scope.isValid = true; | ||||||
|  |                 } | ||||||
|  |               }, function(error) { | ||||||
|  |                 // oops | ||||||
|  |                 console.log(error); | ||||||
|  |               }); | ||||||
|  |      | ||||||
|  |               validating = false; | ||||||
|  |           } | ||||||
|  |         }; | ||||||
|  |       }); | ||||||
|  |     })(angular, CRM.$); | ||||||
|  |  | ||||||
|  | (saved as `js/disallow-duplicate-names.js`) | ||||||
|  |  | ||||||
|  | ## Conclusion | ||||||
|  |  | ||||||
|  | Activate the extension, e.g. with `cv` | ||||||
|  |  | ||||||
|  |      $ cv en mailing | ||||||
|  |  | ||||||
|  | Now, open a mailing and try to give it the same name as an existing one – you | ||||||
|  | should see the field border turn red, and you'll be prevented from continuing or | ||||||
|  | sending the mailing: | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | (As a bonus, the extension also sends a notification to the user using | ||||||
|  | `CRM.alert` to explain the error) | ||||||
|  |  | ||||||
|  | It does seem like a red border sometimes hangs around the field label even after | ||||||
|  | the value is valid again… but apart from that, the feature is working great! | ||||||
|  |  | ||||||
|  | Lastly, props to CAAT for being a great member of the CiviCRM community and | ||||||
|  | supporting us writing this post to share our work with y'all. | ||||||
							
								
								
									
										
											BIN
										
									
								
								src/assets/images/2019-08-30_civicrm_validation.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								src/assets/images/2019-08-30_civicrm_validation.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 2.7 KiB | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/images/2019-08-30_civicrm_validation_header.jpg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								src/assets/images/2019-08-30_civicrm_validation_header.jpg
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 97 KiB | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/images/Member-of-CoTech-logo-200.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								src/assets/images/Member-of-CoTech-logo-200.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 8.5 KiB | 
| @ -11,54 +11,183 @@ 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 | ||||||
| fG9YVaQqGxeUSQ== | Bn8NXcfI/kLvYknvuTvhlIRG22eCOD89Y4QEoK0L51FSHdpHKs20gEdftpZWG513 | ||||||
| =OH/1 | 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 | ||||||
|  | AhF2loFrCEnlZw== | ||||||
|  | =u0eg | ||||||
| -----END PGP PUBLIC KEY BLOCK----- | -----END PGP PUBLIC KEY BLOCK----- | ||||||
|  | |||||||
| @ -107,6 +107,7 @@ h4 { | |||||||
| h5 { | h5 { | ||||||
|   font-size: 0.8em; |   font-size: 0.8em; | ||||||
|   line-height: 1.5em; |   line-height: 1.5em; | ||||||
|  |   font-style: italic; | ||||||
| } | } | ||||||
|  |  | ||||||
| .h6, | .h6, | ||||||
|  | |||||||
| @ -54,7 +54,7 @@ | |||||||
|  |  | ||||||
|       > a { |       > a { | ||||||
|         border: 0; |         border: 0; | ||||||
|         color: inherit; |         color: black; | ||||||
|         display: block; |         display: block; | ||||||
|         font-size: 0.8em; |         font-size: 0.8em; | ||||||
|         letter-spacing: _size(letter-spacing-alt); |         letter-spacing: _size(letter-spacing-alt); | ||||||
|  | |||||||
| @ -210,6 +210,14 @@ | |||||||
|     padding: 0; |     padding: 0; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   &.compressed { | ||||||
|  |       padding: 0.5em 0 0; | ||||||
|  |  | ||||||
|  |       img { | ||||||
|  |           max-width: 150px; | ||||||
|  |       } | ||||||
|  |   } | ||||||
|  |  | ||||||
|   &.style1 { |   &.style1 { | ||||||
|     @include wrapper(accent1); |     @include wrapper(accent1); | ||||||
|   } |   } | ||||||
|  | |||||||
| @ -82,5 +82,16 @@ | |||||||
|       border-bg:    rgba(255,255,255,0.075), |       border-bg:    rgba(255,255,255,0.075), | ||||||
|       border2:    rgba(0,0,0,0.25), |       border2:    rgba(0,0,0,0.25), | ||||||
|       border2-bg:   rgba(255,255,255,0.2) |       border2-bg:   rgba(255,255,255,0.2) | ||||||
|     ) |     ), | ||||||
|  |  | ||||||
|  |     accent5: ( | ||||||
|  |       bg:       #e2e2e2, | ||||||
|  |       fg-bold:    #ffffff, | ||||||
|  |       fg:       mix(#F3A712, #ffffff, 25%), | ||||||
|  |       fg-light:   mix(#F3A712, #ffffff, 40%), | ||||||
|  |       border:     rgba(0,0,0,0.125), | ||||||
|  |       border-bg:    rgba(255,255,255,0.075), | ||||||
|  |       border2:    rgba(0,0,0,0.25), | ||||||
|  |       border2-bg:   rgba(255,255,255,0.2) | ||||||
|  |     ), | ||||||
|   ); |   ); | ||||||
| @ -126,15 +126,15 @@ body.is-mobile { | |||||||
| /* Footer */ | /* Footer */ | ||||||
|  |  | ||||||
| #footer { | #footer { | ||||||
|   @include padding(6em, 0); |   padding: 4em 0 3.5em; | ||||||
|   background-color: darken(_palette(bg), 8); |   background-color: darken(_palette(bg), 8); | ||||||
|   text-align: center; |   text-align: center; | ||||||
|  |   color: rgba(255, 255, 255, 0.7); | ||||||
|  |  | ||||||
|   .icons { |   .icons { | ||||||
|     font-size: 1.25em; |     font-size: 1.25em; | ||||||
|  |  | ||||||
|     a { |     a { | ||||||
|       color: _palette(fg-light); |  | ||||||
|  |  | ||||||
|       &:hover { |       &:hover { | ||||||
|         color: _palette(fg); |         color: _palette(fg); | ||||||
| @ -143,7 +143,6 @@ body.is-mobile { | |||||||
|   } |   } | ||||||
|  |  | ||||||
|   .copyright { |   .copyright { | ||||||
|     color: _palette(fg-light); |  | ||||||
|     font-size: 0.8em; |     font-size: 0.8em; | ||||||
|     letter-spacing: _size(letter-spacing-alt); |     letter-spacing: _size(letter-spacing-alt); | ||||||
|     list-style: none; |     list-style: none; | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user
	