integral 1.3.0 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (205) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -30
  3. data/Rakefile +1 -1
  4. data/app/assets/images/integral/defaults/no_image_available.jpg +0 -0
  5. data/app/assets/javascripts/integral/backend.js +102 -11
  6. data/app/assets/javascripts/integral/frontend.js +37 -0
  7. data/app/assets/javascripts/integral/support/confirm_modal.coffee +2 -2
  8. data/app/assets/javascripts/integral/support/gallery.coffee +71 -54
  9. data/app/assets/javascripts/integral/support/lib/lazysizes.js +755 -0
  10. data/app/assets/javascripts/integral/support/lib/materialize-tags.js +49 -44
  11. data/app/assets/javascripts/integral/support/ls.instagram.js +57 -0
  12. data/app/assets/javascripts/integral/support/ls.twitter.js +66 -0
  13. data/app/assets/javascripts/integral/support/record_selector.coffee +1 -1
  14. data/app/assets/javascripts/integral/support/remote_form.coffee +5 -2
  15. data/app/assets/stylesheets/integral/backend.sass +2 -1
  16. data/app/assets/stylesheets/integral/backend/_foundation_settings.scss +3 -4
  17. data/app/assets/stylesheets/integral/backend/dashboard-layout.scss +4 -1
  18. data/app/assets/stylesheets/integral/backend/materialize-tags.sass +1 -1
  19. data/app/assets/stylesheets/integral/backend/modules/timeline.scss +214 -0
  20. data/app/assets/stylesheets/integral/backend/shared.sass +80 -11
  21. data/app/assets/stylesheets/integral/frontend.scss +45 -0
  22. data/app/assets/stylesheets/integral/frontend/_foundation_settings.scss +2 -2
  23. data/app/assets/stylesheets/integral/frontend/blog.sass +155 -142
  24. data/app/assets/stylesheets/integral/frontend/layout.sass +3 -3
  25. data/app/assets/stylesheets/integral/frontend/modules/article-footer.scss +55 -0
  26. data/app/assets/stylesheets/integral/frontend/modules/article.scss +34 -0
  27. data/app/assets/stylesheets/integral/frontend/modules/horizontal-post.scss +44 -0
  28. data/app/assets/stylesheets/integral/frontend/modules/inline-articles.scss +23 -0
  29. data/app/assets/stylesheets/integral/frontend/modules/latest-post.scss +37 -0
  30. data/app/assets/stylesheets/integral/frontend/modules/list-widget.scss +50 -0
  31. data/app/assets/stylesheets/integral/frontend/modules/piped-list.scss +33 -0
  32. data/app/assets/stylesheets/integral/frontend/modules/post-tags.scss +19 -0
  33. data/app/assets/stylesheets/integral/frontend/modules/scroll-container.scss +9 -0
  34. data/app/assets/stylesheets/integral/frontend/modules/sidebar-articles.scss +42 -0
  35. data/app/assets/stylesheets/integral/frontend/modules/sidebar-tags.scss +6 -0
  36. data/app/assets/stylesheets/integral/frontend/modules/sidebar-widget.scss +47 -0
  37. data/app/assets/stylesheets/integral/frontend/modules/vertical-post.scss +31 -0
  38. data/app/assets/stylesheets/integral/frontend/share_modal.sass +0 -5
  39. data/app/assets/stylesheets/integral/support/gallery.sass +8 -0
  40. data/app/assets/stylesheets/integral/support/media-query-indicator.sass +6 -0
  41. data/app/controllers/integral/application_controller.rb +7 -1
  42. data/app/controllers/integral/backend/activities_controller.rb +13 -2
  43. data/app/controllers/integral/backend/base_controller.rb +60 -7
  44. data/app/controllers/integral/backend/categories_controller.rb +49 -0
  45. data/app/controllers/integral/backend/pages_controller.rb +7 -2
  46. data/app/controllers/integral/backend/posts_controller.rb +8 -3
  47. data/app/controllers/integral/backend/static_pages_controller.rb +4 -0
  48. data/app/controllers/integral/backend/users_controller.rb +13 -7
  49. data/app/controllers/integral/categories_controller.rb +31 -0
  50. data/app/controllers/integral/pages_controller.rb +1 -1
  51. data/app/controllers/integral/posts_controller.rb +5 -3
  52. data/app/decorators/integral/category_decorator.rb +30 -0
  53. data/app/decorators/integral/category_version_decorator.rb +7 -0
  54. data/app/decorators/integral/image_version_decorator.rb +7 -0
  55. data/app/decorators/integral/list_decorator.rb +1 -1
  56. data/app/decorators/integral/list_version_decorator.rb +7 -0
  57. data/app/decorators/integral/page_version_decorator.rb +7 -0
  58. data/app/decorators/integral/post_decorator.rb +9 -1
  59. data/app/decorators/integral/post_version_decorator.rb +7 -0
  60. data/app/decorators/integral/user_decorator.rb +1 -1
  61. data/app/decorators/integral/user_version_decorator.rb +7 -0
  62. data/app/decorators/integral/version_decorator.rb +51 -12
  63. data/app/helpers/integral/backend/base_helper.rb +56 -2
  64. data/app/helpers/integral/blog_helper.rb +21 -4
  65. data/app/jobs/integral/webhook/delivery_job.rb +37 -0
  66. data/app/mailers/integral/contact_mailer.rb +4 -1
  67. data/app/models/concerns/integral/lazy_contentable.rb +54 -0
  68. data/app/models/concerns/integral/webhook/delivery.rb +30 -0
  69. data/app/models/concerns/integral/webhook/observable.rb +23 -0
  70. data/app/models/integral/category.rb +20 -0
  71. data/app/models/integral/category_version.rb +8 -0
  72. data/app/models/integral/list_item.rb +1 -2
  73. data/app/models/integral/page.rb +18 -3
  74. data/app/models/integral/post.rb +28 -1
  75. data/app/models/integral/version.rb +2 -2
  76. data/app/models/integral/webhook/endpoint.rb +40 -0
  77. data/app/models/integral/webhook/event.rb +20 -0
  78. data/app/policies/integral/base_policy.rb +1 -0
  79. data/app/policies/integral/category_policy.rb +9 -0
  80. data/app/serializers/integral/post_serializer.rb +24 -0
  81. data/app/uploaders/integral/avatar_uploader.rb +1 -1
  82. data/app/views/integral/backend/activities/_activity.haml +21 -0
  83. data/app/views/integral/backend/activities/_grid.haml +1 -2
  84. data/app/views/integral/backend/activities/shared/_grid.haml +3 -2
  85. data/app/views/integral/backend/activities/shared/{_listing.haml → index.haml} +1 -0
  86. data/app/views/integral/backend/activities/shared/{_log.haml → show.haml} +0 -0
  87. data/app/views/integral/backend/categories/_modal.haml +25 -0
  88. data/app/views/integral/backend/lists/_child_fields.haml +1 -1
  89. data/app/views/integral/backend/lists/_item_container.haml +1 -1
  90. data/app/views/integral/backend/lists/_item_modal.haml +1 -1
  91. data/app/views/integral/backend/lists/_list_item_fields.haml +1 -1
  92. data/app/views/integral/backend/pages/_form.haml +1 -4
  93. data/app/views/integral/backend/pages/_grid.haml +34 -9
  94. data/app/views/integral/backend/pages/edit.haml +9 -3
  95. data/app/views/integral/backend/pages/index.haml +11 -21
  96. data/app/views/integral/backend/pages/list.haml +22 -0
  97. data/app/views/integral/backend/pages/show.haml +48 -0
  98. data/app/views/integral/backend/posts/_form.haml +8 -6
  99. data/app/views/integral/backend/posts/_grid.haml +33 -7
  100. data/app/views/integral/backend/posts/index.haml +13 -19
  101. data/app/views/integral/backend/posts/list.haml +20 -0
  102. data/app/views/integral/backend/posts/show.haml +54 -0
  103. data/app/views/integral/backend/shared/_activity_modal.haml +13 -0
  104. data/app/views/integral/backend/shared/cards/_categories.haml +34 -0
  105. data/app/views/integral/backend/{static_pages/_card.haml → shared/cards/_object.haml} +0 -0
  106. data/app/views/integral/backend/shared/cards/_recent_activity.haml +20 -0
  107. data/app/views/integral/backend/shared/cards/_recent_pages.haml +19 -0
  108. data/app/views/integral/backend/shared/cards/_recent_posts.haml +18 -0
  109. data/app/views/integral/backend/shared/cards/_recent_user_activity.haml +1 -0
  110. data/app/views/integral/backend/shared/cards/_recent_users.haml +19 -0
  111. data/app/views/integral/backend/shared/cards/_top_post_authors.haml +19 -0
  112. data/app/views/integral/backend/shared/record_selector/_record.haml +6 -4
  113. data/app/views/integral/backend/static_pages/dashboard.haml +13 -11
  114. data/app/views/integral/backend/users/_grid.haml +24 -7
  115. data/app/views/integral/backend/users/index.haml +11 -17
  116. data/app/views/integral/backend/users/list.haml +18 -0
  117. data/app/views/integral/backend/users/show.haml +5 -11
  118. data/app/views/integral/categories/show.haml +5 -0
  119. data/app/views/integral/posts/_article_footer.haml +17 -0
  120. data/app/views/integral/posts/_card.haml +11 -0
  121. data/app/views/integral/posts/_latest_post.haml +8 -0
  122. data/app/views/integral/posts/_most_read_section.haml +8 -0
  123. data/app/views/integral/posts/_post.haml +11 -0
  124. data/app/views/integral/posts/_similar_posts.haml +5 -0
  125. data/app/views/integral/posts/index.haml +6 -5
  126. data/app/views/integral/posts/templates/default.haml +34 -33
  127. data/app/views/integral/shared/_subscribe_modal.haml +14 -0
  128. data/app/views/integral/shared/blog/_categories.haml +15 -0
  129. data/app/views/integral/shared/blog/_layout.haml +9 -0
  130. data/app/views/integral/shared/blog/_sidebar.haml +10 -0
  131. data/app/views/integral/shared/gallery/_placeholder.haml +1 -1
  132. data/app/views/integral/shared/gallery/_slide.haml +2 -2
  133. data/app/views/integral/shared/gallery/gallery.haml +5 -2
  134. data/app/views/integral/shared/sidebar/_item.haml +8 -0
  135. data/app/views/integral/shared/sidebar/_newsletter_signup.haml +7 -0
  136. data/app/views/integral/shared/sidebar/_popular_posts.haml +7 -0
  137. data/app/views/integral/shared/sidebar/_popular_tags.haml +7 -0
  138. data/app/views/integral/shared/sidebar/_recent_posts.haml +7 -0
  139. data/app/views/integral/tags/index.haml +2 -2
  140. data/app/views/integral/tags/show.haml +3 -6
  141. data/app/views/layouts/integral/backend.html.haml +3 -0
  142. data/app/views/layouts/integral/backend/_main_menu_items.haml +10 -0
  143. data/app/views/layouts/integral/frontend.html.haml +3 -3
  144. data/config/locales/en.yml +52 -49
  145. data/db/migrate/20190414172018_create_webhook_endpoints.rb +10 -0
  146. data/db/migrate/20190929191412_add_integral_post_categories.rb +13 -0
  147. data/db/migrate/20191203090008_add_image_to_integral_categories.rb +6 -0
  148. data/db/migrate/20200401210442_create_category_versions.rb +20 -0
  149. data/db/seeds.rb +3 -1
  150. data/lib/generators/integral/assets_generator.rb +2 -2
  151. data/lib/generators/integral/install_generator.rb +1 -1
  152. data/lib/generators/integral/views_generator.rb +1 -1
  153. data/lib/generators/templates/integral.rb +5 -0
  154. data/lib/integral.rb +3 -30
  155. data/lib/integral/acts_as_listable.rb +2 -2
  156. data/lib/integral/chart_renderer/base.rb +2 -0
  157. data/lib/integral/content_renderer.rb +2 -2
  158. data/lib/integral/engine.rb +2 -2
  159. data/lib/integral/grids/activities_grid.rb +15 -1
  160. data/lib/integral/list_item_renderer.rb +4 -2
  161. data/lib/integral/list_renderer.rb +1 -0
  162. data/lib/integral/middleware/page_router.rb +15 -6
  163. data/lib/integral/router.rb +19 -3
  164. data/lib/integral/version.rb +1 -1
  165. data/lib/integral/widgets/swiper_list.rb +3 -2
  166. data/public/images/integral/demo/continous-integration.png +0 -0
  167. data/public/images/integral/demo/foundation-frontend-framework.jpg +0 -0
  168. data/public/images/integral/demo/heroku.png +0 -0
  169. data/public/images/integral/demo/integral-cms-without-hassle.jpg +0 -0
  170. data/public/images/integral/demo/integral-features-activity-tracking.jpg +0 -0
  171. data/public/images/integral/demo/integral-features-contact-form.png +0 -0
  172. data/public/images/integral/demo/integral-features-design.jpg +0 -0
  173. data/public/images/integral/demo/integral-features-dynamic-pages.jpg +0 -0
  174. data/public/images/integral/demo/integral-features-image-management.jpg +0 -0
  175. data/public/images/integral/demo/integral-features-integrated-blog.jpg +0 -0
  176. data/public/images/integral/demo/integral-features-list-management.jpg +0 -0
  177. data/public/images/integral/demo/integral-features-seo-ready.jpg +0 -0
  178. data/public/images/integral/demo/integral-features-user-management.jpg +0 -0
  179. data/public/images/integral/demo/integral-presentation.png +0 -0
  180. data/spec/factories.rb +15 -7
  181. metadata +110 -98
  182. data/app/assets/javascripts/ckeditor/plugins/integral-card/icons/copywidget.png +0 -0
  183. data/app/assets/javascripts/ckeditor/plugins/integral-card/icons/editwidget.png +0 -0
  184. data/app/assets/javascripts/ckeditor/plugins/integral-card/icons/hidpi/copywidget.png +0 -0
  185. data/app/assets/javascripts/ckeditor/plugins/integral-card/icons/hidpi/editwidget.png +0 -0
  186. data/app/assets/javascripts/ckeditor/plugins/integral-card/icons/hidpi/removewidget.png +0 -0
  187. data/app/assets/javascripts/ckeditor/plugins/integral-card/icons/hidpi/widget.png +0 -0
  188. data/app/assets/javascripts/ckeditor/plugins/integral-card/icons/removewidget.png +0 -0
  189. data/app/assets/javascripts/ckeditor/plugins/integral-card/icons/widget.png +0 -0
  190. data/app/assets/javascripts/ckeditor/plugins/integral-card/plugin.js +0 -86
  191. data/app/assets/javascripts/ckeditor/plugins/integralrecentposts/dialogs/integralrecentposts.js +0 -40
  192. data/app/assets/javascripts/ckeditor/plugins/integralrecentposts/plugin.js +0 -32
  193. data/app/assets/javascripts/ckeditor/plugins/numericinput/LICENSE.md +0 -363
  194. data/app/assets/javascripts/ckeditor/plugins/numericinput/README.md +0 -16
  195. data/app/assets/javascripts/ckeditor/plugins/numericinput/plugin.js +0 -354
  196. data/app/assets/stylesheets/integral/frontend.sass +0 -25
  197. data/app/views/integral/backend/pages/activities.haml +0 -2
  198. data/app/views/integral/backend/pages/activity.haml +0 -1
  199. data/app/views/integral/backend/posts/activities.haml +0 -3
  200. data/app/views/integral/backend/posts/activity.haml +0 -1
  201. data/app/views/integral/posts/_collection.haml +0 -4
  202. data/app/views/integral/posts/_item.haml +0 -16
  203. data/app/views/integral/shared/_blog_layout.haml +0 -15
  204. data/app/views/integral/shared/_blog_sidebar.haml +0 -49
  205. data/lib/integral/slack_bot.rb +0 -45
@@ -1,86 +0,0 @@
1
- CKEDITOR.plugins.add( 'integral-card', {
2
- requires: 'widget',
3
-
4
- init: function( editor ) {
5
- // TODO: Move this into it's own Plugin (or use one) which picks up only on particular widgets rather than duplicating this for all widgets
6
- editor.addCommand('copywidget', {
7
- modes: { wysiwyg: 1, source: 0 },
8
- exec: function(editor) {
9
- if (self.TargetWidget != null) {
10
- self.TargetWidget.focus();
11
- editor.execCommand( 'copy' );
12
- }
13
- },
14
- canUndo: true
15
- });
16
-
17
- editor.addCommand('removewidget', {
18
- modes: { wysiwyg: 1, source: 0 },
19
- exec: function(editor) {
20
- if (self.TargetWidget != null) {
21
- var Element = self.TargetWidget.element;
22
- self.TargetWidget.destroy();
23
- Element.remove();
24
- }
25
- },
26
- canUndo: true
27
- });
28
-
29
- if (editor.addMenuItems) {
30
- editor.addMenuGroup('widget');
31
-
32
- var IconPath = this.path + 'icons/' + (CKEDITOR.env.hidpi ? 'hidpi/' : '');
33
- CKEDITOR.skin.addIcon('widget', IconPath + 'widget.png');
34
- CKEDITOR.skin.addIcon('copywidget', IconPath + 'copywidget.png');
35
- CKEDITOR.skin.addIcon('removewidget', IconPath + 'removewidget.png');
36
-
37
- editor.addMenuItems({
38
- widget: {
39
- label: 'Widget',
40
- group: 'widget',
41
- getItems: function() {
42
- var MenuItems = {};
43
- MenuItems.copywidget = CKEDITOR.TRISTATE_OFF;
44
- MenuItems.removewidget = CKEDITOR.TRISTATE_OFF;
45
- return MenuItems;
46
- }
47
- },
48
- copywidget: {
49
- label: 'Copy',
50
- icon: 'copywidget',
51
- group: 'widget',
52
- command: 'copywidget'
53
- },
54
- removewidget: {
55
- label: 'Remove',
56
- icon: 'removewidget',
57
- group: 'widget',
58
- command: 'removewidget'
59
- }
60
- });
61
- }
62
-
63
- if (editor.contextMenu) {
64
- editor.contextMenu.addListener(function(element, selection) {
65
- self.TargetWidget = editor.widgets.widgetHoldingFocusedEditable || editor.widgets.focused;
66
- if (self.TargetWidget != null) {
67
- var WidgetMenuItem = editor.getMenuItem('widget');
68
- WidgetMenuItem.label = 'Feature Card';
69
- return {
70
- widget: CKEDITOR.TRISTATE_OFF
71
- };
72
- }
73
- });
74
- }
75
-
76
- editor.widgets.add( 'integral-card', {
77
- editables: {
78
- anything: '*'
79
- },
80
-
81
- upcast: function( element ) {
82
- return element.name == 'table';
83
- }
84
- } );
85
- }
86
- } );
@@ -1,40 +0,0 @@
1
- CKEDITOR.dialog.add('integralrecentposts', function( editor ) {
2
- return {
3
- title: 'Recent Posts Widget',
4
- minWidth: 200,
5
- minHeight: 100,
6
- contents: [
7
- {
8
- id: 'info',
9
- elements: [
10
- {
11
- id: 'tagged',
12
- type: 'text',
13
- min: 1,
14
- label: 'Filter by tags (comma seperated) - leave blank for no filter',
15
- width: '100px',
16
- setup: function( widget ) {
17
- this.setValue( widget.data.tagged );
18
- },
19
- commit: function( widget ) {
20
- widget.setData( 'tagged', this.getValue() );
21
- }
22
- },
23
- {
24
- id: 'amount',
25
- type: 'number',
26
- min: 1,
27
- label: 'Maxmimum amount to display - leave blank for default',
28
- width: '50px',
29
- setup: function( widget ) {
30
- this.setValue( widget.data.amount );
31
- },
32
- commit: function( widget ) {
33
- widget.setData( 'amount', this.getValue() );
34
- }
35
- },
36
- ]
37
- }
38
- ]
39
- };
40
- } );
@@ -1,32 +0,0 @@
1
- CKEDITOR.plugins.add( 'integralrecentposts', {
2
- requires: 'widget',
3
-
4
- init: function( editor ) {
5
- CKEDITOR.dialog.add( 'integralrecentposts', this.path + 'dialogs/integralrecentposts.js' );
6
- editor.widgets.add( 'integralrecentposts', {
7
- dialog: 'integralrecentposts',
8
- template:
9
- '<p class="integral-widget" ' +
10
- 'data-widget-type="recent_posts" ' +
11
- 'data-widget-value-amount="" ' +
12
- 'data-widget-value-tagged="" ' +
13
- '>Recent Posts</p>',
14
-
15
- init: function() {
16
- this.setData('amount', this.element.data('widget-value-amount'));
17
- this.setData('tagged', this.element.data('widget-value-tagged'));
18
- },
19
- data: function() {
20
- if (this.data.amount != null) {
21
- this.element.data('widget-value-amount', this.data.amount);
22
- }
23
- if (this.data.tagged != null) {
24
- this.element.data('widget-value-tagged', this.data.tagged);
25
- }
26
- },
27
- upcast: function( element ) {
28
- return element.name == 'p' && element.hasClass('integral-widget') && element.attributes['data-widget-type'] == 'recent_posts'
29
- }
30
- });
31
- }
32
- });
@@ -1,363 +0,0 @@
1
-
2
- Mozilla Public License, version 2.0
3
-
4
- 1. Definitions
5
-
6
- 1.1. "Contributor"
7
-
8
- means each individual or legal entity that creates, contributes to the
9
- creation of, or owns Covered Software.
10
-
11
- 1.2. "Contributor Version"
12
-
13
- means the combination of the Contributions of others (if any) used by a
14
- Contributor and that particular Contributor's Contribution.
15
-
16
- 1.3. "Contribution"
17
-
18
- means Covered Software of a particular Contributor.
19
-
20
- 1.4. "Covered Software"
21
-
22
- means Source Code Form to which the initial Contributor has attached the
23
- notice in Exhibit A, the Executable Form of such Source Code Form, and
24
- Modifications of such Source Code Form, in each case including portions
25
- thereof.
26
-
27
- 1.5. "Incompatible With Secondary Licenses"
28
- means
29
-
30
- a. that the initial Contributor has attached the notice described in
31
- Exhibit B to the Covered Software; or
32
-
33
- b. that the Covered Software was made available under the terms of
34
- version 1.1 or earlier of the License, but not also under the terms of
35
- a Secondary License.
36
-
37
- 1.6. "Executable Form"
38
-
39
- means any form of the work other than Source Code Form.
40
-
41
- 1.7. "Larger Work"
42
-
43
- means a work that combines Covered Software with other material, in a
44
- separate file or files, that is not Covered Software.
45
-
46
- 1.8. "License"
47
-
48
- means this document.
49
-
50
- 1.9. "Licensable"
51
-
52
- means having the right to grant, to the maximum extent possible, whether
53
- at the time of the initial grant or subsequently, any and all of the
54
- rights conveyed by this License.
55
-
56
- 1.10. "Modifications"
57
-
58
- means any of the following:
59
-
60
- a. any file in Source Code Form that results from an addition to,
61
- deletion from, or modification of the contents of Covered Software; or
62
-
63
- b. any new file in Source Code Form that contains any Covered Software.
64
-
65
- 1.11. "Patent Claims" of a Contributor
66
-
67
- means any patent claim(s), including without limitation, method,
68
- process, and apparatus claims, in any patent Licensable by such
69
- Contributor that would be infringed, but for the grant of the License,
70
- by the making, using, selling, offering for sale, having made, import,
71
- or transfer of either its Contributions or its Contributor Version.
72
-
73
- 1.12. "Secondary License"
74
-
75
- means either the GNU General Public License, Version 2.0, the GNU Lesser
76
- General Public License, Version 2.1, the GNU Affero General Public
77
- License, Version 3.0, or any later versions of those licenses.
78
-
79
- 1.13. "Source Code Form"
80
-
81
- means the form of the work preferred for making modifications.
82
-
83
- 1.14. "You" (or "Your")
84
-
85
- means an individual or a legal entity exercising rights under this
86
- License. For legal entities, "You" includes any entity that controls, is
87
- controlled by, or is under common control with You. For purposes of this
88
- definition, "control" means (a) the power, direct or indirect, to cause
89
- the direction or management of such entity, whether by contract or
90
- otherwise, or (b) ownership of more than fifty percent (50%) of the
91
- outstanding shares or beneficial ownership of such entity.
92
-
93
-
94
- 2. License Grants and Conditions
95
-
96
- 2.1. Grants
97
-
98
- Each Contributor hereby grants You a world-wide, royalty-free,
99
- non-exclusive license:
100
-
101
- a. under intellectual property rights (other than patent or trademark)
102
- Licensable by such Contributor to use, reproduce, make available,
103
- modify, display, perform, distribute, and otherwise exploit its
104
- Contributions, either on an unmodified basis, with Modifications, or
105
- as part of a Larger Work; and
106
-
107
- b. under Patent Claims of such Contributor to make, use, sell, offer for
108
- sale, have made, import, and otherwise transfer either its
109
- Contributions or its Contributor Version.
110
-
111
- 2.2. Effective Date
112
-
113
- The licenses granted in Section 2.1 with respect to any Contribution
114
- become effective for each Contribution on the date the Contributor first
115
- distributes such Contribution.
116
-
117
- 2.3. Limitations on Grant Scope
118
-
119
- The licenses granted in this Section 2 are the only rights granted under
120
- this License. No additional rights or licenses will be implied from the
121
- distribution or licensing of Covered Software under this License.
122
- Notwithstanding Section 2.1(b) above, no patent license is granted by a
123
- Contributor:
124
-
125
- a. for any code that a Contributor has removed from Covered Software; or
126
-
127
- b. for infringements caused by: (i) Your and any other third party's
128
- modifications of Covered Software, or (ii) the combination of its
129
- Contributions with other software (except as part of its Contributor
130
- Version); or
131
-
132
- c. under Patent Claims infringed by Covered Software in the absence of
133
- its Contributions.
134
-
135
- This License does not grant any rights in the trademarks, service marks,
136
- or logos of any Contributor (except as may be necessary to comply with
137
- the notice requirements in Section 3.4).
138
-
139
- 2.4. Subsequent Licenses
140
-
141
- No Contributor makes additional grants as a result of Your choice to
142
- distribute the Covered Software under a subsequent version of this
143
- License (see Section 10.2) or under the terms of a Secondary License (if
144
- permitted under the terms of Section 3.3).
145
-
146
- 2.5. Representation
147
-
148
- Each Contributor represents that the Contributor believes its
149
- Contributions are its original creation(s) or it has sufficient rights to
150
- grant the rights to its Contributions conveyed by this License.
151
-
152
- 2.6. Fair Use
153
-
154
- This License is not intended to limit any rights You have under
155
- applicable copyright doctrines of fair use, fair dealing, or other
156
- equivalents.
157
-
158
- 2.7. Conditions
159
-
160
- Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in
161
- Section 2.1.
162
-
163
-
164
- 3. Responsibilities
165
-
166
- 3.1. Distribution of Source Form
167
-
168
- All distribution of Covered Software in Source Code Form, including any
169
- Modifications that You create or to which You contribute, must be under
170
- the terms of this License. You must inform recipients that the Source
171
- Code Form of the Covered Software is governed by the terms of this
172
- License, and how they can obtain a copy of this License. You may not
173
- attempt to alter or restrict the recipients' rights in the Source Code
174
- Form.
175
-
176
- 3.2. Distribution of Executable Form
177
-
178
- If You distribute Covered Software in Executable Form then:
179
-
180
- a. such Covered Software must also be made available in Source Code Form,
181
- as described in Section 3.1, and You must inform recipients of the
182
- Executable Form how they can obtain a copy of such Source Code Form by
183
- reasonable means in a timely manner, at a charge no more than the cost
184
- of distribution to the recipient; and
185
-
186
- b. You may distribute such Executable Form under the terms of this
187
- License, or sublicense it under different terms, provided that the
188
- license for the Executable Form does not attempt to limit or alter the
189
- recipients' rights in the Source Code Form under this License.
190
-
191
- 3.3. Distribution of a Larger Work
192
-
193
- You may create and distribute a Larger Work under terms of Your choice,
194
- provided that You also comply with the requirements of this License for
195
- the Covered Software. If the Larger Work is a combination of Covered
196
- Software with a work governed by one or more Secondary Licenses, and the
197
- Covered Software is not Incompatible With Secondary Licenses, this
198
- License permits You to additionally distribute such Covered Software
199
- under the terms of such Secondary License(s), so that the recipient of
200
- the Larger Work may, at their option, further distribute the Covered
201
- Software under the terms of either this License or such Secondary
202
- License(s).
203
-
204
- 3.4. Notices
205
-
206
- You may not remove or alter the substance of any license notices
207
- (including copyright notices, patent notices, disclaimers of warranty, or
208
- limitations of liability) contained within the Source Code Form of the
209
- Covered Software, except that You may alter any license notices to the
210
- extent required to remedy known factual inaccuracies.
211
-
212
- 3.5. Application of Additional Terms
213
-
214
- You may choose to offer, and to charge a fee for, warranty, support,
215
- indemnity or liability obligations to one or more recipients of Covered
216
- Software. However, You may do so only on Your own behalf, and not on
217
- behalf of any Contributor. You must make it absolutely clear that any
218
- such warranty, support, indemnity, or liability obligation is offered by
219
- You alone, and You hereby agree to indemnify every Contributor for any
220
- liability incurred by such Contributor as a result of warranty, support,
221
- indemnity or liability terms You offer. You may include additional
222
- disclaimers of warranty and limitations of liability specific to any
223
- jurisdiction.
224
-
225
- 4. Inability to Comply Due to Statute or Regulation
226
-
227
- If it is impossible for You to comply with any of the terms of this License
228
- with respect to some or all of the Covered Software due to statute,
229
- judicial order, or regulation then You must: (a) comply with the terms of
230
- this License to the maximum extent possible; and (b) describe the
231
- limitations and the code they affect. Such description must be placed in a
232
- text file included with all distributions of the Covered Software under
233
- this License. Except to the extent prohibited by statute or regulation,
234
- such description must be sufficiently detailed for a recipient of ordinary
235
- skill to be able to understand it.
236
-
237
- 5. Termination
238
-
239
- 5.1. The rights granted under this License will terminate automatically if You
240
- fail to comply with any of its terms. However, if You become compliant,
241
- then the rights granted under this License from a particular Contributor
242
- are reinstated (a) provisionally, unless and until such Contributor
243
- explicitly and finally terminates Your grants, and (b) on an ongoing
244
- basis, if such Contributor fails to notify You of the non-compliance by
245
- some reasonable means prior to 60 days after You have come back into
246
- compliance. Moreover, Your grants from a particular Contributor are
247
- reinstated on an ongoing basis if such Contributor notifies You of the
248
- non-compliance by some reasonable means, this is the first time You have
249
- received notice of non-compliance with this License from such
250
- Contributor, and You become compliant prior to 30 days after Your receipt
251
- of the notice.
252
-
253
- 5.2. If You initiate litigation against any entity by asserting a patent
254
- infringement claim (excluding declaratory judgment actions,
255
- counter-claims, and cross-claims) alleging that a Contributor Version
256
- directly or indirectly infringes any patent, then the rights granted to
257
- You by any and all Contributors for the Covered Software under Section
258
- 2.1 of this License shall terminate.
259
-
260
- 5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user
261
- license agreements (excluding distributors and resellers) which have been
262
- validly granted by You or Your distributors under this License prior to
263
- termination shall survive termination.
264
-
265
- 6. Disclaimer of Warranty
266
-
267
- Covered Software is provided under this License on an "as is" basis,
268
- without warranty of any kind, either expressed, implied, or statutory,
269
- including, without limitation, warranties that the Covered Software is free
270
- of defects, merchantable, fit for a particular purpose or non-infringing.
271
- The entire risk as to the quality and performance of the Covered Software
272
- is with You. Should any Covered Software prove defective in any respect,
273
- You (not any Contributor) assume the cost of any necessary servicing,
274
- repair, or correction. This disclaimer of warranty constitutes an essential
275
- part of this License. No use of any Covered Software is authorized under
276
- this License except under this disclaimer.
277
-
278
- 7. Limitation of Liability
279
-
280
- Under no circumstances and under no legal theory, whether tort (including
281
- negligence), contract, or otherwise, shall any Contributor, or anyone who
282
- distributes Covered Software as permitted above, be liable to You for any
283
- direct, indirect, special, incidental, or consequential damages of any
284
- character including, without limitation, damages for lost profits, loss of
285
- goodwill, work stoppage, computer failure or malfunction, or any and all
286
- other commercial damages or losses, even if such party shall have been
287
- informed of the possibility of such damages. This limitation of liability
288
- shall not apply to liability for death or personal injury resulting from
289
- such party's negligence to the extent applicable law prohibits such
290
- limitation. Some jurisdictions do not allow the exclusion or limitation of
291
- incidental or consequential damages, so this exclusion and limitation may
292
- not apply to You.
293
-
294
- 8. Litigation
295
-
296
- Any litigation relating to this License may be brought only in the courts
297
- of a jurisdiction where the defendant maintains its principal place of
298
- business and such litigation shall be governed by laws of that
299
- jurisdiction, without reference to its conflict-of-law provisions. Nothing
300
- in this Section shall prevent a party's ability to bring cross-claims or
301
- counter-claims.
302
-
303
- 9. Miscellaneous
304
-
305
- This License represents the complete agreement concerning the subject
306
- matter hereof. If any provision of this License is held to be
307
- unenforceable, such provision shall be reformed only to the extent
308
- necessary to make it enforceable. Any law or regulation which provides that
309
- the language of a contract shall be construed against the drafter shall not
310
- be used to construe this License against a Contributor.
311
-
312
-
313
- 10. Versions of the License
314
-
315
- 10.1. New Versions
316
-
317
- Mozilla Foundation is the license steward. Except as provided in Section
318
- 10.3, no one other than the license steward has the right to modify or
319
- publish new versions of this License. Each version will be given a
320
- distinguishing version number.
321
-
322
- 10.2. Effect of New Versions
323
-
324
- You may distribute the Covered Software under the terms of the version
325
- of the License under which You originally received the Covered Software,
326
- or under the terms of any subsequent version published by the license
327
- steward.
328
-
329
- 10.3. Modified Versions
330
-
331
- If you create software not governed by this License, and you want to
332
- create a new license for such software, you may create and use a
333
- modified version of this License if you rename the license and remove
334
- any references to the name of the license steward (except to note that
335
- such modified license differs from this License).
336
-
337
- 10.4. Distributing Source Code Form that is Incompatible With Secondary
338
- Licenses If You choose to distribute Source Code Form that is
339
- Incompatible With Secondary Licenses under the terms of this version of
340
- the License, the notice described in Exhibit B of this License must be
341
- attached.
342
-
343
- Exhibit A - Source Code Form License Notice
344
-
345
- This Source Code Form is subject to the
346
- terms of the Mozilla Public License, v.
347
- 2.0. If a copy of the MPL was not
348
- distributed with this file, You can
349
- obtain one at
350
- http://mozilla.org/MPL/2.0/.
351
-
352
- If it is not possible or desirable to put the notice in a particular file,
353
- then You may include the notice in a location (such as a LICENSE file in a
354
- relevant directory) where a recipient would be likely to look for such a
355
- notice.
356
-
357
- You may add additional accurate notices of copyright ownership.
358
-
359
- Exhibit B - "Incompatible With Secondary Licenses" Notice
360
-
361
- This Source Code Form is "Incompatible
362
- With Secondary Licenses", as defined by
363
- the Mozilla Public License, v. 2.0.