integral 1.0.1 → 1.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/README.md +11 -49
- data/Rakefile +1 -1
- data/app/assets/images/integral/defaults/no_image_available.jpg +0 -0
- data/app/assets/images/logo.png +0 -0
- data/app/assets/javascripts/ckeditor/my_config.js.erb +26 -18
- data/app/assets/javascripts/ckeditor/plugins/autoembed/lang/lv.js +8 -0
- data/app/assets/javascripts/ckeditor/plugins/autoembed/plugin.js +1 -1
- data/app/assets/javascripts/ckeditor/plugins/autogrow/plugin.js +14 -14
- data/app/assets/javascripts/ckeditor/plugins/autogrow/samples/autogrow.html +8 -8
- data/app/assets/javascripts/ckeditor/plugins/codemirror/css/codemirror.min.css +1 -1
- data/app/assets/javascripts/ckeditor/plugins/codemirror/icons/autoformat.png +0 -0
- data/app/assets/javascripts/ckeditor/plugins/codemirror/icons/searchcode.png +0 -0
- data/app/assets/javascripts/ckeditor/plugins/codemirror/icons/uncommentselectedrange.png +0 -0
- data/app/assets/javascripts/ckeditor/plugins/codemirror/images/autocomplete.png +0 -0
- data/app/assets/javascripts/ckeditor/plugins/codemirror/images/autoformat.png +0 -0
- data/app/assets/javascripts/ckeditor/plugins/codemirror/images/commentselectedrange.png +0 -0
- data/app/assets/javascripts/ckeditor/plugins/codemirror/images/searchcode.png +0 -0
- data/app/assets/javascripts/ckeditor/plugins/codemirror/images/uncommentselectedrange.png +0 -0
- data/app/assets/javascripts/ckeditor/plugins/codemirror/js/beautify.min.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/codemirror/js/codemirror.addons.min.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/codemirror/js/codemirror.addons.search.min.js +1 -1
- data/app/assets/javascripts/ckeditor/plugins/codemirror/js/codemirror.min.js +1 -6
- data/app/assets/javascripts/ckeditor/plugins/codemirror/js/codemirror.mode.bbcodemixed.min.js +1 -1
- data/app/assets/javascripts/ckeditor/plugins/codemirror/js/codemirror.mode.handlebars.min.js +1 -0
- data/app/assets/javascripts/ckeditor/plugins/codemirror/js/codemirror.mode.htmlmixed.min.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/codemirror/js/codemirror.mode.javascript.min.js +1 -1
- data/app/assets/javascripts/ckeditor/plugins/codemirror/js/codemirror.mode.php.min.js +3 -3
- data/app/assets/javascripts/ckeditor/plugins/codemirror/js/codemirror.mode.twig.min.js +1 -1
- data/app/assets/javascripts/ckeditor/plugins/codemirror/lang/bg.js +7 -7
- data/app/assets/javascripts/ckeditor/plugins/codemirror/plugin.js +231 -217
- data/app/assets/javascripts/ckeditor/plugins/codemirror/theme/darcula.css +46 -0
- data/app/assets/javascripts/ckeditor/plugins/codemirror/theme/gruvbox-dark.css +34 -0
- data/app/assets/javascripts/ckeditor/plugins/codemirror/theme/idea.css +42 -0
- data/app/assets/javascripts/ckeditor/plugins/codemirror/theme/lesser-dark.css +1 -1
- data/app/assets/javascripts/ckeditor/plugins/codemirror/theme/lucario.css +37 -0
- data/app/assets/javascripts/ckeditor/plugins/codemirror/theme/monokai.css +5 -0
- data/app/assets/javascripts/ckeditor/plugins/codemirror/theme/oceanic-next.css +44 -0
- data/app/assets/javascripts/ckeditor/plugins/codemirror/theme/shadowfox.css +52 -0
- data/app/assets/javascripts/ckeditor/plugins/codemirror/theme/ssms.css +16 -0
- data/app/assets/javascripts/ckeditor/plugins/embedbase/lang/ar.js +15 -0
- data/app/assets/javascripts/ckeditor/plugins/embedbase/lang/lv.js +15 -0
- data/app/assets/javascripts/ckeditor/plugins/embedbase/plugin.js +1 -1
- data/app/assets/javascripts/ckeditor/plugins/foundation-callout/icons/copywidget.png +0 -0
- data/app/assets/javascripts/ckeditor/plugins/foundation-callout/icons/editwidget.png +0 -0
- data/app/assets/javascripts/ckeditor/plugins/foundation-callout/icons/hidpi/copywidget.png +0 -0
- data/app/assets/javascripts/ckeditor/plugins/foundation-callout/icons/hidpi/editwidget.png +0 -0
- data/app/assets/javascripts/ckeditor/plugins/foundation-callout/icons/hidpi/removewidget.png +0 -0
- data/app/assets/javascripts/ckeditor/plugins/foundation-callout/icons/hidpi/widget.png +0 -0
- data/app/assets/javascripts/ckeditor/plugins/foundation-callout/icons/removewidget.png +0 -0
- data/app/assets/javascripts/ckeditor/plugins/foundation-callout/icons/widget.png +0 -0
- data/app/assets/javascripts/ckeditor/plugins/foundation-callout/plugin.js +86 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/dev/assets/image1.jpg +0 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/dev/assets/image2.jpg +0 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/dev/contents.css +35 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/dev/image2.html +339 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/dialogs/image2.js +553 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/icons/hidpi/image.png +0 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/icons/image.png +0 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/lang/af.js +21 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/lang/ar.js +21 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/lang/az.js +21 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/lang/bg.js +21 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/lang/bn.js +21 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/lang/bs.js +21 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/lang/ca.js +21 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/lang/cs.js +21 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/lang/cy.js +21 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/lang/da.js +21 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/lang/de-ch.js +21 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/lang/de.js +21 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/lang/el.js +21 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/lang/en-au.js +21 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/lang/en-ca.js +21 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/lang/en-gb.js +21 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/lang/en.js +21 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/lang/eo.js +21 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/lang/es-mx.js +21 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/lang/es.js +21 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/lang/et.js +21 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/lang/eu.js +21 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/lang/fa.js +21 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/lang/fi.js +21 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/lang/fo.js +21 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/lang/fr-ca.js +21 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/lang/fr.js +21 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/lang/gl.js +21 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/lang/gu.js +21 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/lang/he.js +21 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/lang/hi.js +21 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/lang/hr.js +21 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/lang/hu.js +21 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/lang/id.js +21 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/lang/is.js +21 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/lang/it.js +21 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/lang/ja.js +21 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/lang/ka.js +21 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/lang/km.js +21 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/lang/ko.js +21 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/lang/ku.js +21 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/lang/lt.js +21 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/lang/lv.js +21 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/lang/mk.js +21 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/lang/mn.js +21 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/lang/ms.js +21 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/lang/nb.js +21 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/lang/nl.js +21 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/lang/no.js +21 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/lang/oc.js +21 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/lang/pl.js +21 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/lang/pt-br.js +21 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/lang/pt.js +21 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/lang/ro.js +21 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/lang/ru.js +21 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/lang/si.js +21 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/lang/sk.js +21 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/lang/sl.js +21 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/lang/sq.js +21 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/lang/sr-latn.js +21 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/lang/sr.js +21 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/lang/sv.js +21 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/lang/th.js +21 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/lang/tr.js +21 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/lang/tt.js +21 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/lang/ug.js +21 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/lang/uk.js +21 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/lang/vi.js +21 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/lang/zh-cn.js +21 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/lang/zh.js +21 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/plugin.js +1720 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/samples/assets/image1.jpg +0 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/samples/assets/image2.jpg +0 -0
- data/app/assets/javascripts/ckeditor/plugins/image2/samples/image2.html +68 -0
- data/app/assets/javascripts/ckeditor/plugins/lineutils/dev/dnd.html +4 -4
- data/app/assets/javascripts/ckeditor/plugins/lineutils/dev/magicfinger.html +4 -4
- data/app/assets/javascripts/ckeditor/plugins/lineutils/plugin.js +7 -7
- data/app/assets/javascripts/ckeditor/plugins/linkballoon/README.md +5 -0
- data/app/assets/javascripts/ckeditor/plugins/linkballoon/assets/demo.png +0 -0
- data/app/assets/javascripts/ckeditor/plugins/linkballoon/plugin.js +25 -0
- data/app/assets/javascripts/ckeditor/plugins/notification/lang/az.js +7 -0
- data/app/assets/javascripts/ckeditor/plugins/notification/lang/bg.js +7 -0
- data/app/assets/javascripts/ckeditor/plugins/notification/lang/ca.js +7 -0
- data/app/assets/javascripts/ckeditor/plugins/notification/lang/cs.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/notification/lang/da.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/notification/lang/de-ch.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/notification/lang/de.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/notification/lang/en-au.js +7 -0
- data/app/assets/javascripts/ckeditor/plugins/notification/lang/en.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/notification/lang/eo.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/notification/lang/es-mx.js +7 -0
- data/app/assets/javascripts/ckeditor/plugins/notification/lang/es.js +7 -0
- data/app/assets/javascripts/ckeditor/plugins/notification/lang/et.js +7 -0
- data/app/assets/javascripts/ckeditor/plugins/notification/lang/eu.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/notification/lang/fa.js +7 -0
- data/app/assets/javascripts/ckeditor/plugins/notification/lang/fr.js +3 -3
- data/app/assets/javascripts/ckeditor/plugins/notification/lang/gl.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/notification/lang/hr.js +7 -0
- data/app/assets/javascripts/ckeditor/plugins/notification/lang/hu.js +7 -0
- data/app/assets/javascripts/ckeditor/plugins/notification/lang/id.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/notification/lang/it.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/notification/lang/ja.js +7 -0
- data/app/assets/javascripts/ckeditor/plugins/notification/lang/km.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/notification/lang/ko.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/notification/lang/ku.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/notification/lang/lv.js +7 -0
- data/app/assets/javascripts/ckeditor/plugins/notification/lang/nb.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/notification/lang/nl.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/notification/lang/oc.js +7 -0
- data/app/assets/javascripts/ckeditor/plugins/notification/lang/pl.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/notification/lang/pt-br.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/notification/lang/pt.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/notification/lang/ro.js +7 -0
- data/app/assets/javascripts/ckeditor/plugins/notification/lang/ru.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/notification/lang/sk.js +7 -0
- data/app/assets/javascripts/ckeditor/plugins/notification/lang/sq.js +7 -0
- data/app/assets/javascripts/ckeditor/plugins/notification/lang/sv.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/notification/lang/tr.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/notification/lang/ug.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/notification/lang/uk.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/notification/lang/zh-cn.js +3 -3
- data/app/assets/javascripts/ckeditor/plugins/notification/lang/zh.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/notification/plugin.js +794 -784
- data/app/assets/javascripts/ckeditor/plugins/openlink/README.md +50 -0
- data/app/assets/javascripts/ckeditor/plugins/openlink/icons/hidpi/openLink.png +0 -0
- data/app/assets/javascripts/ckeditor/plugins/openlink/icons/openLink.png +0 -0
- data/app/assets/javascripts/ckeditor/plugins/openlink/lang/bg.js +7 -0
- data/app/assets/javascripts/ckeditor/plugins/openlink/lang/de.js +7 -0
- data/app/assets/javascripts/ckeditor/plugins/openlink/lang/en.js +7 -0
- data/app/assets/javascripts/ckeditor/plugins/openlink/lang/pl.js +7 -0
- data/app/assets/javascripts/ckeditor/plugins/openlink/lang/ru.js +7 -0
- data/app/assets/javascripts/ckeditor/plugins/openlink/lang/uk.js +7 -0
- data/app/assets/javascripts/ckeditor/plugins/openlink/plugin.js +178 -0
- data/app/assets/javascripts/ckeditor/plugins/placeholder/dev/placeholder.html +5 -5
- data/app/assets/javascripts/ckeditor/plugins/placeholder/dialogs/placeholder.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/af.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/ar.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/az.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/bg.js +5 -5
- data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/ca.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/cs.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/cy.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/da.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/de-ch.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/de.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/el.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/en-au.js +12 -0
- data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/en-gb.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/en.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/eo.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/es-mx.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/es.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/et.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/eu.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/fa.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/fi.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/fr-ca.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/fr.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/gl.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/he.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/hr.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/hu.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/id.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/it.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/ja.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/km.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/ko.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/ku.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/lv.js +5 -5
- data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/nb.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/nl.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/no.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/oc.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/pl.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/pt-br.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/pt.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/ro.js +12 -0
- data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/ru.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/si.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/sk.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/sl.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/sq.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/sv.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/th.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/tr.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/tt.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/ug.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/uk.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/vi.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/zh-cn.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/placeholder/lang/zh.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/placeholder/plugin.js +3 -3
- data/app/assets/javascripts/ckeditor/plugins/placeholder/samples/placeholder.html +6 -6
- data/app/assets/javascripts/ckeditor/plugins/widget/dev/assets/simplebox/dialogs/simplebox.js +4 -4
- data/app/assets/javascripts/ckeditor/plugins/widget/dev/assets/simplebox/plugin.js +3 -3
- data/app/assets/javascripts/ckeditor/plugins/widget/dev/console.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/widget/dev/nestedwidgets.html +2 -2
- data/app/assets/javascripts/ckeditor/plugins/widget/dev/widgetstyles.html +2 -2
- data/app/assets/javascripts/ckeditor/plugins/widget/lang/af.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/widget/lang/ar.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/widget/lang/az.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/widget/lang/bg.js +3 -3
- data/app/assets/javascripts/ckeditor/plugins/widget/lang/ca.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/widget/lang/cs.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/widget/lang/cy.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/widget/lang/da.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/widget/lang/de-ch.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/widget/lang/de.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/widget/lang/el.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/widget/lang/en-au.js +8 -0
- data/app/assets/javascripts/ckeditor/plugins/widget/lang/en-gb.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/widget/lang/en.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/widget/lang/eo.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/widget/lang/es-mx.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/widget/lang/es.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/widget/lang/et.js +8 -0
- data/app/assets/javascripts/ckeditor/plugins/widget/lang/eu.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/widget/lang/fa.js +3 -3
- data/app/assets/javascripts/ckeditor/plugins/widget/lang/fi.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/widget/lang/fr.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/widget/lang/gl.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/widget/lang/he.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/widget/lang/hr.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/widget/lang/hu.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/widget/lang/id.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/widget/lang/it.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/widget/lang/ja.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/widget/lang/km.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/widget/lang/ko.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/widget/lang/ku.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/widget/lang/lv.js +3 -3
- data/app/assets/javascripts/ckeditor/plugins/widget/lang/nb.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/widget/lang/nl.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/widget/lang/no.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/widget/lang/oc.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/widget/lang/pl.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/widget/lang/pt-br.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/widget/lang/pt.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/widget/lang/ro.js +8 -0
- data/app/assets/javascripts/ckeditor/plugins/widget/lang/ru.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/widget/lang/sk.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/widget/lang/sl.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/widget/lang/sq.js +3 -3
- data/app/assets/javascripts/ckeditor/plugins/widget/lang/sv.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/widget/lang/tr.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/widget/lang/tt.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/widget/lang/ug.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/widget/lang/uk.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/widget/lang/vi.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/widget/lang/zh-cn.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/widget/lang/zh.js +2 -2
- data/app/assets/javascripts/ckeditor/plugins/widget/plugin.js +235 -64
- data/app/assets/javascripts/ckeditor/plugins/widgetselection/plugin.js +6 -11
- data/app/assets/javascripts/ckeditor/plugins/wordcount/lang/ar.js +1 -0
- data/app/assets/javascripts/ckeditor/plugins/wordcount/lang/bg.js +17 -0
- data/app/assets/javascripts/ckeditor/plugins/wordcount/lang/ca.js +1 -0
- data/app/assets/javascripts/ckeditor/plugins/wordcount/lang/cs.js +15 -0
- data/app/assets/javascripts/ckeditor/plugins/wordcount/lang/da.js +1 -0
- data/app/assets/javascripts/ckeditor/plugins/wordcount/lang/de.js +1 -0
- data/app/assets/javascripts/ckeditor/plugins/wordcount/lang/el.js +1 -0
- data/app/assets/javascripts/ckeditor/plugins/wordcount/lang/en.js +5 -1
- data/app/assets/javascripts/ckeditor/plugins/wordcount/lang/es.js +1 -0
- data/app/assets/javascripts/ckeditor/plugins/wordcount/lang/eu.js +17 -0
- data/app/assets/javascripts/ckeditor/plugins/wordcount/lang/fa.js +13 -0
- data/app/assets/javascripts/ckeditor/plugins/wordcount/lang/fi.js +1 -0
- data/app/assets/javascripts/ckeditor/plugins/wordcount/lang/fr.js +1 -0
- data/app/assets/javascripts/ckeditor/plugins/wordcount/lang/he.js +1 -0
- data/app/assets/javascripts/ckeditor/plugins/wordcount/lang/hr.js +1 -0
- data/app/assets/javascripts/ckeditor/plugins/wordcount/lang/hu.js +14 -0
- data/app/assets/javascripts/ckeditor/plugins/wordcount/lang/it.js +4 -3
- data/app/assets/javascripts/ckeditor/plugins/wordcount/lang/ja.js +5 -5
- data/app/assets/javascripts/ckeditor/plugins/wordcount/lang/ko.js +16 -0
- data/app/assets/javascripts/ckeditor/plugins/wordcount/lang/nl.js +3 -2
- data/app/assets/javascripts/ckeditor/plugins/wordcount/lang/no.js +1 -0
- data/app/assets/javascripts/ckeditor/plugins/wordcount/lang/pl.js +4 -3
- data/app/assets/javascripts/ckeditor/plugins/wordcount/lang/pt-br.js +1 -0
- data/app/assets/javascripts/ckeditor/plugins/wordcount/lang/pt.js +1 -0
- data/app/assets/javascripts/ckeditor/plugins/wordcount/lang/ro.js +15 -0
- data/app/assets/javascripts/ckeditor/plugins/wordcount/lang/ru.js +2 -1
- data/app/assets/javascripts/ckeditor/plugins/wordcount/lang/sk.js +15 -0
- data/app/assets/javascripts/ckeditor/plugins/wordcount/lang/sv.js +5 -3
- data/app/assets/javascripts/ckeditor/plugins/wordcount/lang/tr.js +1 -0
- data/app/assets/javascripts/ckeditor/plugins/wordcount/lang/uk.js +17 -0
- data/app/assets/javascripts/ckeditor/plugins/wordcount/lang/zh-cn.js +1 -0
- data/app/assets/javascripts/ckeditor/plugins/wordcount/lang/zh.js +14 -0
- data/app/assets/javascripts/ckeditor/plugins/wordcount/plugin.js +485 -302
- data/app/assets/javascripts/ckeditor/plugins/wordcount/samples/maxParagraphs.html +26 -0
- data/app/assets/javascripts/integral/backend.js +197 -26
- data/app/assets/javascripts/integral/frontend.js +37 -2
- data/app/assets/javascripts/integral/support/character_counter.js +14 -8
- data/app/assets/javascripts/integral/support/confirm_modal.coffee +2 -2
- data/app/assets/javascripts/integral/support/date_picker.coffee +54 -59
- data/app/assets/javascripts/integral/support/gallery.coffee +85 -43
- data/app/assets/javascripts/integral/support/grid.coffee +11 -4
- data/app/assets/javascripts/integral/support/lib/lazysizes.js +755 -0
- data/app/assets/javascripts/integral/support/lib/materialize-tags.js +49 -44
- data/app/assets/javascripts/integral/support/list.coffee +1 -0
- data/app/assets/javascripts/integral/support/ls.instagram.js +57 -0
- data/app/assets/javascripts/integral/support/ls.twitter.js +66 -0
- data/app/assets/javascripts/integral/support/record_selector.coffee +3 -1
- data/app/assets/javascripts/integral/support/remote_form.coffee +18 -11
- data/app/assets/javascripts/integral/support/slug_generator.coffee +1 -0
- data/app/assets/stylesheets/integral/backend.sass +36 -24
- data/app/assets/stylesheets/integral/backend/_foundation_settings.scss +5 -6
- data/app/assets/stylesheets/integral/backend/dashboard-layout.scss +31 -64
- data/app/assets/stylesheets/integral/backend/devise.sass +2 -3
- data/app/assets/stylesheets/integral/backend/materialize-tags.sass +2 -1
- data/app/assets/stylesheets/integral/backend/modules/dropdown_pane_notifications.scss +150 -0
- data/app/assets/stylesheets/integral/backend/modules/dropdown_pane_profile.scss +59 -0
- data/app/assets/stylesheets/integral/backend/modules/timeline.scss +214 -0
- data/app/assets/stylesheets/integral/backend/shared.sass +121 -13
- data/app/assets/stylesheets/integral/frontend.scss +45 -0
- data/app/assets/stylesheets/integral/frontend/_foundation_settings.scss +2 -2
- data/app/assets/stylesheets/integral/frontend/blog.sass +155 -142
- data/app/assets/stylesheets/integral/frontend/layout.sass +13 -3
- data/app/assets/stylesheets/integral/frontend/modules/article-footer.scss +55 -0
- data/app/assets/stylesheets/integral/frontend/modules/article.scss +34 -0
- data/app/assets/stylesheets/integral/frontend/modules/horizontal-post.scss +44 -0
- data/app/assets/stylesheets/integral/frontend/modules/inline-articles.scss +23 -0
- data/app/assets/stylesheets/integral/frontend/modules/latest-post.scss +37 -0
- data/app/assets/stylesheets/integral/frontend/modules/list-widget.scss +50 -0
- data/app/assets/stylesheets/integral/frontend/modules/piped-list.scss +33 -0
- data/app/assets/stylesheets/integral/frontend/modules/post-tags.scss +19 -0
- data/app/assets/stylesheets/integral/frontend/modules/scroll-container.scss +9 -0
- data/app/assets/stylesheets/integral/frontend/modules/sidebar-articles.scss +42 -0
- data/app/assets/stylesheets/integral/frontend/modules/sidebar-tags.scss +6 -0
- data/app/assets/stylesheets/integral/frontend/modules/sidebar-widget.scss +47 -0
- data/app/assets/stylesheets/integral/frontend/modules/vertical-post.scss +31 -0
- data/app/assets/stylesheets/integral/frontend/share_modal.sass +0 -5
- data/app/assets/stylesheets/integral/support/gallery.sass +18 -2
- data/app/assets/stylesheets/integral/support/media-query-indicator.sass +9 -3
- data/app/controllers/integral/application_controller.rb +10 -3
- data/app/controllers/integral/backend/activities_controller.rb +31 -26
- data/app/controllers/integral/backend/base_controller.rb +265 -26
- data/app/controllers/integral/backend/categories_controller.rb +49 -0
- data/app/controllers/integral/backend/images_controller.rb +39 -56
- data/app/controllers/integral/backend/lists_controller.rb +16 -104
- data/app/controllers/integral/backend/notification_subscriptions_controller.rb +23 -0
- data/app/controllers/integral/backend/pages_controller.rb +15 -117
- data/app/controllers/integral/backend/posts_controller.rb +22 -108
- data/app/controllers/integral/backend/settings_controller.rb +7 -8
- data/app/controllers/integral/backend/static_pages_controller.rb +14 -0
- data/app/controllers/integral/backend/users_controller.rb +61 -79
- data/app/controllers/integral/blog_controller.rb +12 -0
- data/app/controllers/integral/categories_controller.rb +45 -0
- data/app/controllers/integral/pages_controller.rb +7 -3
- data/app/controllers/integral/posts_controller.rb +7 -9
- data/app/controllers/integral/tags_controller.rb +5 -2
- data/app/decorators/integral/base_decorator.rb +16 -0
- data/app/decorators/integral/category_decorator.rb +30 -0
- data/app/decorators/integral/image_decorator.rb +3 -3
- data/app/decorators/integral/list_decorator.rb +1 -13
- data/app/decorators/integral/notification/notification_decorator.rb +74 -0
- data/app/decorators/integral/page_decorator.rb +1 -13
- data/app/decorators/integral/paginating_decorator.rb +6 -0
- data/app/decorators/integral/post_decorator.rb +44 -4
- data/app/decorators/integral/user_decorator.rb +1 -13
- data/app/decorators/integral/version_decorator.rb +58 -15
- data/app/helpers/integral/application_helper.rb +7 -0
- data/app/helpers/integral/backend/base_helper.rb +139 -13
- data/app/helpers/integral/blog_helper.rb +46 -0
- data/app/helpers/integral/social_helper.rb +0 -23
- data/app/jobs/integral/application_job.rb +1 -0
- data/app/jobs/integral/newsletter_signup_job.rb +0 -2
- data/app/jobs/integral/webhook/delivery_job.rb +37 -0
- data/app/mailers/integral/contact_mailer.rb +4 -1
- data/app/mailers/integral/devise_mailer.rb +6 -0
- data/app/models/concerns/integral/lazy_contentable.rb +54 -0
- data/app/models/concerns/integral/notification/subscribable.rb +67 -0
- data/app/models/concerns/integral/webhook/delivery.rb +30 -0
- data/app/models/concerns/integral/webhook/observable.rb +23 -0
- data/app/models/integral/application_record.rb +9 -0
- data/app/models/integral/category.rb +29 -0
- data/app/models/integral/category_version.rb +8 -0
- data/app/models/integral/image.rb +40 -3
- data/app/models/integral/list.rb +11 -4
- data/app/models/integral/list_item.rb +15 -16
- data/app/models/integral/list_item_connection.rb +6 -0
- data/app/models/integral/notification/notification.rb +28 -0
- data/app/models/integral/notification/subscription.rb +14 -0
- data/app/models/integral/page.rb +32 -10
- data/app/models/integral/post.rb +39 -14
- data/app/models/integral/user.rb +51 -2
- data/app/models/integral/version.rb +2 -2
- data/app/models/integral/webhook/endpoint.rb +40 -0
- data/app/models/integral/webhook/event.rb +20 -0
- data/app/policies/integral/base_policy.rb +7 -11
- data/app/policies/integral/category_policy.rb +9 -0
- data/app/policies/integral/page_policy.rb +1 -0
- data/app/policies/integral/version_policy.rb +0 -8
- data/app/serializers/integral/post_serializer.rb +24 -0
- data/app/uploaders/integral/avatar_uploader.rb +1 -1
- data/app/views/devise/invitations/edit.haml +1 -4
- data/app/views/devise/mailer/invitation_instructions.inky-haml +20 -0
- data/app/views/devise/sessions/new.haml +2 -2
- data/app/views/integral/backend/activities/_activity.haml +21 -0
- data/app/views/integral/backend/activities/grid/_dropdown_actions.haml +1 -0
- data/app/views/integral/backend/activities/grid/_row_content.haml +13 -0
- data/app/views/integral/backend/activities/index.haml +7 -13
- data/app/views/integral/backend/activities/shared/_grid.haml +35 -19
- data/app/views/integral/backend/activities/shared/index.haml +15 -0
- data/app/views/integral/backend/activities/shared/{_log.haml → show.haml} +7 -7
- data/app/views/integral/backend/activities/show.haml +1 -1
- data/app/views/integral/backend/categories/_modal.haml +24 -0
- data/app/views/integral/backend/images/_form.haml +16 -28
- data/app/views/integral/backend/images/edit.haml +2 -2
- data/app/views/integral/backend/images/grid/_dropdown_actions.haml +5 -0
- data/app/views/integral/backend/images/grid/_row_content.haml +5 -0
- data/app/views/integral/backend/images/index.haml +11 -17
- data/app/views/integral/backend/images/list.haml +11 -0
- data/app/views/integral/backend/images/show.haml +26 -0
- data/app/views/integral/backend/lists/_form.haml +7 -20
- data/app/views/integral/backend/lists/_item_container.haml +1 -1
- data/app/views/integral/backend/lists/_item_modal.haml +3 -3
- data/app/views/integral/backend/lists/_list_item_fields.haml +3 -2
- data/app/views/integral/backend/lists/_manager.haml +11 -13
- data/app/views/integral/backend/lists/edit.haml +22 -1
- data/app/views/integral/backend/lists/grid/_dropdown_actions.haml +9 -0
- data/app/views/integral/backend/lists/grid/_row_content.haml +3 -0
- data/app/views/integral/backend/lists/index.haml +11 -17
- data/app/views/integral/backend/lists/list.haml +11 -0
- data/app/views/integral/backend/lists/show.haml +27 -23
- data/app/views/integral/backend/notifications/_notification.haml +21 -0
- data/app/views/integral/backend/pages/_form.haml +20 -47
- data/app/views/integral/backend/pages/edit.haml +18 -0
- data/app/views/integral/backend/pages/grid/_dropdown_actions.haml +11 -0
- data/app/views/integral/backend/pages/grid/_row_content.haml +5 -0
- data/app/views/integral/backend/pages/index.haml +11 -21
- data/app/views/integral/backend/pages/list.haml +15 -0
- data/app/views/integral/backend/pages/show.haml +32 -0
- data/app/views/integral/backend/posts/_form.haml +19 -51
- data/app/views/integral/backend/posts/edit.haml +5 -10
- data/app/views/integral/backend/posts/grid/_dropdown_actions.haml +10 -0
- data/app/views/integral/backend/posts/grid/_row_content.haml +6 -0
- data/app/views/integral/backend/posts/index.haml +13 -19
- data/app/views/integral/backend/posts/list.haml +13 -0
- data/app/views/integral/backend/posts/new.haml +0 -1
- data/app/views/integral/backend/posts/show.haml +31 -0
- data/app/views/integral/backend/settings/sections/_social.haml +1 -3
- data/app/views/integral/backend/shared/_activity_modal.haml +13 -0
- data/app/views/integral/backend/shared/_breadcrumbs.haml +7 -4
- data/app/views/integral/backend/shared/_image_preview.haml +10 -3
- data/app/views/integral/backend/shared/_image_selector.haml +1 -1
- data/app/views/integral/backend/shared/_notification_subscription_toggle.haml +22 -0
- data/app/views/integral/backend/shared/action_bar/_index.haml +9 -0
- data/app/views/integral/backend/shared/action_bar/_show.haml +3 -0
- data/app/views/integral/backend/shared/cards/_at_a_glance.haml +3 -3
- data/app/views/integral/backend/shared/cards/_categories.haml +33 -0
- data/app/views/integral/backend/{static_pages/_card.haml → shared/cards/_object.haml} +1 -1
- data/app/views/integral/backend/shared/cards/_recent_activity.haml +20 -0
- data/app/views/integral/backend/shared/cards/_recent_resources.haml +17 -0
- data/app/views/integral/backend/shared/cards/_recent_user_activity.haml +1 -0
- data/app/views/integral/backend/shared/cards/_top_post_authors.haml +18 -0
- data/app/views/integral/backend/shared/cards/_welcome.haml +24 -25
- data/app/views/integral/backend/shared/{_empty_grid.haml → grid/_empty.haml} +0 -0
- data/app/views/integral/backend/shared/grid/_form.haml +9 -0
- data/app/views/integral/backend/shared/grid/_grid.haml +21 -0
- data/app/views/integral/backend/shared/{_pagination.haml → grid/_pagination.haml} +0 -0
- data/app/views/integral/backend/shared/grid/_row_layout.haml +8 -0
- data/app/views/integral/backend/shared/record_selector/_collection.haml +1 -0
- data/app/views/integral/backend/shared/record_selector/_modal.haml +9 -10
- data/app/views/integral/backend/shared/record_selector/_record.haml +6 -4
- data/app/views/integral/backend/static_pages/dashboard.haml +17 -15
- data/app/views/integral/backend/users/_form.haml +35 -47
- data/app/views/integral/backend/users/edit.haml +1 -1
- data/app/views/integral/backend/users/grid/_dropdown_actions.haml +17 -0
- data/app/views/integral/backend/users/grid/_row_content.haml +8 -0
- data/app/views/integral/backend/users/index.haml +11 -17
- data/app/views/integral/backend/users/list.haml +12 -0
- data/app/views/integral/backend/users/show.haml +22 -19
- data/app/views/integral/categories/show.haml +5 -0
- data/app/views/integral/pages/_demo.haml +2 -2
- data/app/views/integral/posts/_article_footer.haml +17 -0
- data/app/views/integral/posts/_card.haml +11 -0
- data/app/views/integral/posts/_latest_post.haml +8 -0
- data/app/views/integral/posts/_most_read_section.haml +8 -0
- data/app/views/integral/posts/_post.haml +11 -0
- data/app/views/integral/posts/_similar_posts.haml +5 -0
- data/app/views/integral/posts/index.haml +7 -5
- data/app/views/integral/posts/templates/default.haml +35 -35
- data/app/views/integral/shared/_share_modal.haml +0 -3
- data/app/views/integral/shared/_social_list_items.haml +6 -12
- data/app/views/integral/shared/_subscribe_modal.haml +14 -0
- data/app/views/integral/shared/blog/_categories.haml +15 -0
- data/app/views/integral/shared/blog/_layout.haml +9 -0
- data/app/views/integral/shared/blog/_sidebar.haml +10 -0
- data/app/views/integral/shared/gallery/_placeholder.haml +2 -2
- data/app/views/integral/shared/gallery/_slide.haml +2 -2
- data/app/views/integral/shared/gallery/gallery.haml +5 -2
- data/app/views/integral/shared/sidebar/_item.haml +8 -0
- data/app/views/integral/shared/sidebar/_newsletter_signup.haml +7 -0
- data/app/views/integral/shared/sidebar/_popular_posts.haml +7 -0
- data/app/views/integral/shared/sidebar/_popular_tags.haml +7 -0
- data/app/views/integral/shared/sidebar/_recent_posts.haml +7 -0
- data/app/views/integral/tags/index.haml +2 -2
- data/app/views/integral/tags/show.haml +3 -6
- data/app/views/layouts/integral/backend.html.haml +27 -5
- data/app/views/layouts/integral/backend/_create_dropdown.haml +1 -30
- data/app/views/layouts/integral/backend/_main_menu_items.haml +1 -91
- data/app/views/layouts/integral/frontend.html.haml +3 -3
- data/config/initializers/devise.rb +1 -1
- data/config/locales/en.yml +131 -56
- data/config/routes.rb +2 -0
- data/db/migrate/20190414172018_create_webhook_endpoints.rb +10 -0
- data/db/migrate/20190929191412_add_integral_post_categories.rb +13 -0
- data/db/migrate/20191203090008_add_image_to_integral_categories.rb +6 -0
- data/db/migrate/20200401210442_create_category_versions.rb +20 -0
- data/db/migrate/20200407022636_create_integral_notifications.rb +25 -0
- data/db/migrate/20200421223602_add_status_to_integral_users.rb +5 -0
- data/db/seeds.rb +16 -10
- data/lib/generators/integral/assets_generator.rb +54 -0
- data/lib/generators/integral/install_generator.rb +37 -3
- data/lib/generators/integral/views_generator.rb +66 -0
- data/lib/generators/templates/app.yml +0 -1
- data/lib/generators/templates/integral.rb +5 -0
- data/lib/generators/templates/routes.rb +7 -0
- data/lib/generators/templates/seeds.rb +2 -0
- data/lib/integral.rb +4 -30
- data/lib/integral/acts_as_integral.rb +115 -0
- data/lib/integral/acts_as_listable.rb +3 -3
- data/lib/integral/chart_renderer/base.rb +2 -0
- data/lib/integral/content_renderer.rb +3 -3
- data/lib/integral/engine.rb +12 -2
- data/lib/integral/grids/activities_grid.rb +15 -2
- data/lib/integral/grids/lists_grid.rb +1 -0
- data/lib/integral/grids/posts_grid.rb +5 -1
- data/lib/integral/grids/users_grid.rb +5 -0
- data/lib/integral/list_item_renderer.rb +4 -2
- data/lib/integral/list_renderer.rb +6 -1
- data/lib/integral/middleware/page_router.rb +15 -6
- data/lib/integral/router.rb +41 -7
- data/lib/integral/version.rb +1 -1
- data/lib/integral/widgets/recent_posts.rb +1 -1
- data/lib/integral/widgets/swiper_list.rb +3 -2
- data/public/images/integral/demo/continous-integration.png +0 -0
- data/public/images/integral/demo/foundation-frontend-framework.jpg +0 -0
- data/public/images/integral/demo/heroku.png +0 -0
- data/public/images/integral/demo/integral-cms-without-hassle.jpg +0 -0
- data/public/images/integral/demo/integral-features-activity-tracking.jpg +0 -0
- data/public/images/integral/demo/integral-features-contact-form.png +0 -0
- data/public/images/integral/demo/integral-features-design.jpg +0 -0
- data/public/images/integral/demo/integral-features-dynamic-pages.jpg +0 -0
- data/public/images/integral/demo/integral-features-image-management.jpg +0 -0
- data/public/images/integral/demo/integral-features-integrated-blog.jpg +0 -0
- data/public/images/integral/demo/integral-features-list-management.jpg +0 -0
- data/public/images/integral/demo/integral-features-seo-ready.jpg +0 -0
- data/public/images/integral/demo/integral-features-user-management.jpg +0 -0
- data/public/images/integral/demo/integral-presentation.png +0 -0
- data/public/integral/ckeditor_demo_content.html +0 -13
- data/spec/factories.rb +30 -8
- metadata +322 -127
- data/app/assets/javascripts/ckeditor/plugins/wordcount/lang/jp.js +0 -13
- data/app/assets/javascripts/integral/support/date_picker/picker.date.js +0 -1435
- data/app/assets/javascripts/integral/support/date_picker/picker.js +0 -1132
- data/app/assets/stylesheets/integral/frontend.sass +0 -26
- data/app/assets/stylesheets/integral/support/date-picker.scss +0 -16
- data/app/assets/stylesheets/integral/support/date_picker/_default.date.scss +0 -452
- data/app/assets/stylesheets/integral/support/date_picker/_default.scss +0 -201
- data/app/assets/stylesheets/integral/support/date_picker/materialize_clockpicker.sass +0 -220
- data/app/assets/stylesheets/integral/wysiwyg.sass +0 -13
- data/app/views/devise/mailer/invitation_instructions.html.erb +0 -13
- data/app/views/integral/backend/activities/_grid.haml +0 -23
- data/app/views/integral/backend/activities/shared/_listing.haml +0 -14
- data/app/views/integral/backend/images/_grid.haml +0 -16
- data/app/views/integral/backend/lists/_grid.haml +0 -16
- data/app/views/integral/backend/pages/_grid.haml +0 -21
- data/app/views/integral/backend/pages/activities.haml +0 -2
- data/app/views/integral/backend/pages/activity.haml +0 -1
- data/app/views/integral/backend/pages/edit.html.haml +0 -15
- data/app/views/integral/backend/posts/_grid.haml +0 -25
- data/app/views/integral/backend/posts/activities.haml +0 -3
- data/app/views/integral/backend/posts/activity.haml +0 -1
- data/app/views/integral/backend/shared/_grid.haml +0 -18
- data/app/views/integral/backend/users/_grid.haml +0 -19
- data/app/views/integral/posts/_item.haml +0 -16
- data/app/views/integral/shared/_blog_layout.haml +0 -15
- data/app/views/integral/shared/_blog_sidebar.haml +0 -49
- data/lib/integral/slack_bot.rb +0 -45
@@ -0,0 +1,30 @@
|
|
1
|
+
module Integral
|
2
|
+
module Webhook
|
3
|
+
# Helper to handle the delivery of webhook events
|
4
|
+
module Delivery
|
5
|
+
extend ActiveSupport::Concern
|
6
|
+
|
7
|
+
# Abstract method to be overriden
|
8
|
+
#
|
9
|
+
# @return [Hash] which repesents the object
|
10
|
+
def webhook_payload
|
11
|
+
{}
|
12
|
+
end
|
13
|
+
|
14
|
+
# Build event_name and delivery webhook
|
15
|
+
def deliver_webhook(action)
|
16
|
+
event_name = "#{self.class.name.underscore}_#{action}"
|
17
|
+
deliver_webhook_event(event_name, webhook_payload)
|
18
|
+
end
|
19
|
+
|
20
|
+
# Create webhook event and deliver it to any endpoint listening
|
21
|
+
def deliver_webhook_event(event_name, payload)
|
22
|
+
event = Webhook::Event.new(event_name, payload || {})
|
23
|
+
|
24
|
+
Endpoint.for_event(event_name).each do |endpoint|
|
25
|
+
endpoint.deliver(event)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Integral
|
2
|
+
module Webhook
|
3
|
+
# Helper to deliver webhooks for each of the 3 major model lifestyle events - creation, update and deletion
|
4
|
+
module Observable
|
5
|
+
extend ActiveSupport::Concern
|
6
|
+
include Webhook::Delivery
|
7
|
+
|
8
|
+
included do
|
9
|
+
after_commit on: :create do
|
10
|
+
deliver_webhook(:created)
|
11
|
+
end
|
12
|
+
|
13
|
+
after_commit on: :update do
|
14
|
+
deliver_webhook(:updated)
|
15
|
+
end
|
16
|
+
|
17
|
+
after_commit on: :destroy do
|
18
|
+
deliver_webhook(:destroyed)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -2,5 +2,14 @@ module Integral
|
|
2
2
|
# Base Integral Model.
|
3
3
|
class ApplicationRecord < ActiveRecord::Base
|
4
4
|
self.abstract_class = true
|
5
|
+
|
6
|
+
# @return [Array] containing available human readable statuses against there numeric value
|
7
|
+
def self.available_statuses(opts = { reverse: false })
|
8
|
+
available_statuses = statuses.map do |key, value|
|
9
|
+
[I18n.t("integral.statuses.#{key}"), key]
|
10
|
+
end
|
11
|
+
|
12
|
+
opts[:reverse] ? available_statuses.each(&:reverse!) : available_statuses
|
13
|
+
end
|
5
14
|
end
|
6
15
|
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Integral
|
2
|
+
# Represents a user post category
|
3
|
+
class Category < ApplicationRecord
|
4
|
+
acts_as_integral({
|
5
|
+
backend_main_menu: { enabled: false },
|
6
|
+
backend_create_menu: { enabled: false }
|
7
|
+
})
|
8
|
+
|
9
|
+
has_paper_trail class_name: 'Integral::CategoryVersion'
|
10
|
+
|
11
|
+
# Slugging
|
12
|
+
extend FriendlyId
|
13
|
+
friendly_id :title
|
14
|
+
|
15
|
+
# Associations
|
16
|
+
has_many :posts # TODO: Touch the posts on change
|
17
|
+
belongs_to :image, class_name: 'Integral::Image', optional: true
|
18
|
+
|
19
|
+
# Validations
|
20
|
+
validates :slug, presence: true
|
21
|
+
validates_format_of :slug, with: /\A[A-Za-z0-9]+(?:-[A-Za-z0-9]+)*\z/
|
22
|
+
validates :title, presence: true, length: { minimum: 4, maximum: 60 }
|
23
|
+
validates :description, presence: true, length: { minimum: 25, maximum: 300 }
|
24
|
+
|
25
|
+
def self.integral_icon
|
26
|
+
'tags'
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -3,8 +3,12 @@ module Integral
|
|
3
3
|
class Image < ApplicationRecord
|
4
4
|
before_save :touch_list_items
|
5
5
|
|
6
|
-
|
7
|
-
|
6
|
+
acts_as_integral({
|
7
|
+
notifications: { enabled: false },
|
8
|
+
backend_main_menu: { order: 40 },
|
9
|
+
backend_create_menu: { order: 30 }
|
10
|
+
}) # Integral Goodness
|
11
|
+
acts_as_paranoid # Soft-deletion
|
8
12
|
|
9
13
|
validates :file, presence: true
|
10
14
|
validates :title, presence: true, length: { minimum: 5, maximum: 50 }
|
@@ -45,11 +49,44 @@ module Integral
|
|
45
49
|
def self.listable_options
|
46
50
|
{
|
47
51
|
record_title: I18n.t('integral.backend.record_selector.images.record'),
|
48
|
-
selector_path: Engine.routes.url_helpers.
|
52
|
+
selector_path: Engine.routes.url_helpers.list_backend_images_path,
|
49
53
|
selector_title: I18n.t('integral.backend.record_selector.images.title')
|
50
54
|
}
|
51
55
|
end
|
52
56
|
|
57
|
+
def self.integral_icon
|
58
|
+
'image'
|
59
|
+
end
|
60
|
+
|
61
|
+
def self.integral_backend_main_menu_item
|
62
|
+
{
|
63
|
+
icon: integral_icon,
|
64
|
+
order: integral_options.dig(:backend_main_menu, :order),
|
65
|
+
label: model_name.human.pluralize,
|
66
|
+
url: url_helpers.send("backend_img_index_url"),
|
67
|
+
authorize_class: self,
|
68
|
+
authorize_action: :index,
|
69
|
+
list_items: [
|
70
|
+
{ label: I18n.t('integral.navigation.dashboard'), url: url_helpers.send("backend_img_index_url"), authorize_class: self, authorize_action: :index },
|
71
|
+
{ label: I18n.t('integral.actions.create'), url: url_helpers.send("new_backend_img_url"), authorize_class: self, authorize_action: :new },
|
72
|
+
{ label: I18n.t('integral.navigation.listing'), url: url_helpers.send("list_backend_img_index_url"), authorize_class: self, authorize_action: :list },
|
73
|
+
]
|
74
|
+
}
|
75
|
+
end
|
76
|
+
|
77
|
+
# @return [Hash] hash representing the class, used to render within the create menu
|
78
|
+
def self.integral_backend_create_menu_item
|
79
|
+
{
|
80
|
+
icon: integral_icon,
|
81
|
+
order: integral_options.dig(:backend_create_menu, :order),
|
82
|
+
label: model_name.human,
|
83
|
+
url: url_helpers.send("new_backend_img_url"),
|
84
|
+
# authorize: proc { policy(self).index? }, can't use this as self is in wrong context
|
85
|
+
authorize_class: self,
|
86
|
+
authorize_action: :new,
|
87
|
+
}
|
88
|
+
end
|
89
|
+
|
53
90
|
private
|
54
91
|
|
55
92
|
def touch_list_items
|
data/app/models/integral/list.rb
CHANGED
@@ -3,8 +3,12 @@ module Integral
|
|
3
3
|
class List < ApplicationRecord
|
4
4
|
default_scope { includes(:list_items) }
|
5
5
|
|
6
|
-
|
7
|
-
|
6
|
+
acts_as_integral({
|
7
|
+
backend_main_menu: { order: 50 },
|
8
|
+
backend_create_menu: { order: 40 }
|
9
|
+
}) # Integral Goodness
|
10
|
+
|
11
|
+
acts_as_paranoid # Soft-deletion
|
8
12
|
|
9
13
|
# Associations
|
10
14
|
has_many :list_items
|
@@ -30,9 +34,8 @@ module Integral
|
|
30
34
|
# Duplicates the list including all attributes, list items and list item children
|
31
35
|
#
|
32
36
|
# @return [List] Unsaved cloned list
|
33
|
-
def dup
|
37
|
+
def dup
|
34
38
|
new_list = super()
|
35
|
-
new_list.title = title if title.present?
|
36
39
|
|
37
40
|
list_items.each do |list_item|
|
38
41
|
new_list_item = list_item.dup
|
@@ -49,6 +52,10 @@ module Integral
|
|
49
52
|
new_list
|
50
53
|
end
|
51
54
|
|
55
|
+
def self.integral_icon
|
56
|
+
'list'
|
57
|
+
end
|
58
|
+
|
52
59
|
private
|
53
60
|
|
54
61
|
def validate_unlocked
|
@@ -1,25 +1,17 @@
|
|
1
1
|
module Integral
|
2
2
|
# Represents an item within a particular list
|
3
3
|
class ListItem < ApplicationRecord
|
4
|
-
after_initialize :set_defaults
|
5
|
-
before_save :touch_list
|
6
|
-
after_touch :touch_list
|
7
|
-
|
8
4
|
# Default scope orders by priority and includes children
|
9
5
|
default_scope { includes(:children).includes(:image).order(:priority) }
|
10
6
|
|
11
7
|
# Associations
|
12
|
-
belongs_to :list, optional: true
|
8
|
+
belongs_to :list, optional: true, touch: true
|
13
9
|
belongs_to :image, optional: true
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
class_name: 'ListItem',
|
20
|
-
after_add: :touch_updated_at,
|
21
|
-
after_remove: :touch_updated_at,
|
22
|
-
optional: true)
|
10
|
+
has_many :list_item_connections, foreign_key: 'parent_id'
|
11
|
+
has_many :children, -> { order(:priority) }, through: :list_item_connections
|
12
|
+
has_many :inverse_list_item_connections, class_name: "ListItemConnection", foreign_key: "child_id"
|
13
|
+
# NOTE: A List Item only has one parent
|
14
|
+
has_many :parents, :through => :inverse_list_item_connections
|
23
15
|
|
24
16
|
# Validations
|
25
17
|
validate :validate_child_absence
|
@@ -27,6 +19,12 @@ module Integral
|
|
27
19
|
# Nested forms
|
28
20
|
accepts_nested_attributes_for :children, reject_if: :all_blank, allow_destroy: true
|
29
21
|
|
22
|
+
# Callbacks
|
23
|
+
after_initialize :set_defaults
|
24
|
+
after_commit :touch_parent, on: :update
|
25
|
+
after_destroy :touch_parent
|
26
|
+
after_touch :touch_list
|
27
|
+
|
30
28
|
# @return [Array] list of types available for a list item
|
31
29
|
def self.types_collection
|
32
30
|
collection = [
|
@@ -70,8 +68,9 @@ module Integral
|
|
70
68
|
self.type ||= 'Integral::Basic'
|
71
69
|
end
|
72
70
|
|
73
|
-
def
|
74
|
-
|
71
|
+
def touch_parent
|
72
|
+
parent = parents.first
|
73
|
+
parent.touch if parent.present? && parent.persisted?
|
75
74
|
end
|
76
75
|
|
77
76
|
def touch_list
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Integral
|
2
|
+
module Notification
|
3
|
+
class Notification < ApplicationRecord
|
4
|
+
belongs_to :recipient, class_name: "User"
|
5
|
+
belongs_to :actor, class_name: "User", optional: true
|
6
|
+
belongs_to :subscribable, polymorphic: true
|
7
|
+
|
8
|
+
scope :unread, ->{ where(read_at: nil) }
|
9
|
+
scope :recent, ->{ order(created_at: :desc).limit(per_page) }
|
10
|
+
|
11
|
+
self.per_page = 8
|
12
|
+
|
13
|
+
validates :action, presence: true
|
14
|
+
|
15
|
+
def read!
|
16
|
+
update!(read_at: Time.now())
|
17
|
+
end
|
18
|
+
|
19
|
+
def unread?
|
20
|
+
read_at.nil?
|
21
|
+
end
|
22
|
+
|
23
|
+
def to_partial_path
|
24
|
+
'integral/backend/notifications/notification'
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Integral
|
2
|
+
module Notification
|
3
|
+
class Subscription < ApplicationRecord
|
4
|
+
self.table_name = 'integral_notification_subscriptions'
|
5
|
+
|
6
|
+
belongs_to :subscribable, polymorphic: true, optional: true
|
7
|
+
belongs_to :user
|
8
|
+
|
9
|
+
enum state: { subscribed: 'subscribed', unsubscribed: 'unsubscribed' }
|
10
|
+
|
11
|
+
validates :subscribable_type, :state, presence: true
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
data/app/models/integral/page.rb
CHANGED
@@ -1,7 +1,14 @@
|
|
1
1
|
module Integral
|
2
2
|
# Represents a public viewable page
|
3
3
|
class Page < ApplicationRecord
|
4
|
+
include LazyContentable
|
5
|
+
|
4
6
|
acts_as_paranoid # Soft-deletion
|
7
|
+
acts_as_integral({
|
8
|
+
backend_main_menu: { order: 20 },
|
9
|
+
backend_create_menu: { order: 10 }
|
10
|
+
}) # Integral Goodness
|
11
|
+
|
5
12
|
acts_as_listable # Listable Item
|
6
13
|
|
7
14
|
has_paper_trail class_name: 'Integral::PageVersion'
|
@@ -12,9 +19,9 @@ module Integral
|
|
12
19
|
# /foo, /foo/bar, /123/456
|
13
20
|
# Bad:
|
14
21
|
# //, foo, /foo bar, /foo?y=123, /foo$
|
15
|
-
PATH_REGEX =
|
22
|
+
PATH_REGEX = %r{\A/[/.a-zA-Z0-9-]+\z}.freeze
|
16
23
|
|
17
|
-
enum status: %i[draft published]
|
24
|
+
enum status: %i[draft published archived]
|
18
25
|
|
19
26
|
# Associations
|
20
27
|
belongs_to :parent, class_name: 'Integral::Page', optional: true
|
@@ -31,8 +38,14 @@ module Integral
|
|
31
38
|
validate :validate_path_is_not_black_listed
|
32
39
|
validate :validate_parent_is_available
|
33
40
|
|
41
|
+
# Callbacks
|
42
|
+
before_save :set_paper_trail_event
|
43
|
+
before_save :set_integral_notification_action
|
44
|
+
|
34
45
|
# Scopes
|
35
|
-
scope :search, ->(
|
46
|
+
scope :search, ->(query) { where('lower(title) LIKE ? OR lower(path) LIKE ?', "%#{query.downcase}%", "%#{query.downcase}%") }
|
47
|
+
# TODO: Remove this on Rails 6 upgrade
|
48
|
+
scope :not_archived, -> { where.not(status: :archived) }
|
36
49
|
|
37
50
|
# Return all available parents
|
38
51
|
# TODO: Update parent behaviour
|
@@ -64,11 +77,15 @@ module Integral
|
|
64
77
|
{
|
65
78
|
icon: 'file',
|
66
79
|
record_title: I18n.t('integral.backend.record_selector.pages.record'),
|
67
|
-
selector_path: Engine.routes.url_helpers.
|
80
|
+
selector_path: Engine.routes.url_helpers.list_backend_pages_path,
|
68
81
|
selector_title: I18n.t('integral.backend.record_selector.pages.title')
|
69
82
|
}
|
70
83
|
end
|
71
84
|
|
85
|
+
def self.integral_icon
|
86
|
+
'file'
|
87
|
+
end
|
88
|
+
|
72
89
|
# @return [Hash] the instance as a card
|
73
90
|
def to_card
|
74
91
|
# subtitle = self.published_at.present? ? I18n.t('integral.blog.posted_ago', time: time_ago_in_words(self.published_at)) : I18n.t('integral.records.status.draft')
|
@@ -123,12 +140,16 @@ module Integral
|
|
123
140
|
|
124
141
|
private
|
125
142
|
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
143
|
+
def set_paper_trail_event
|
144
|
+
if persisted? && published? && status_changed?
|
145
|
+
self.paper_trail_event = :publish
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
def set_integral_notification_action
|
150
|
+
if persisted? && published? && status_changed?
|
151
|
+
self.integral_notification_action = :publish
|
152
|
+
end
|
132
153
|
end
|
133
154
|
|
134
155
|
def validate_parent_is_available
|
@@ -142,6 +163,7 @@ module Integral
|
|
142
163
|
|
143
164
|
Integral.black_listed_paths.each do |black_listed_path|
|
144
165
|
next unless path&.starts_with?(black_listed_path)
|
166
|
+
|
145
167
|
valid = false
|
146
168
|
errors.add(:path, 'Invalid path')
|
147
169
|
break
|
data/app/models/integral/post.rb
CHANGED
@@ -2,6 +2,13 @@ module Integral
|
|
2
2
|
# Represents a user post
|
3
3
|
class Post < ApplicationRecord
|
4
4
|
include ActionView::Helpers::DateHelper
|
5
|
+
include LazyContentable
|
6
|
+
include Webhook::Observable
|
7
|
+
|
8
|
+
acts_as_integral({
|
9
|
+
backend_main_menu: { order: 30, enabled: Integral.blog_enabled? },
|
10
|
+
backend_create_menu: { order: 20, enabled: Integral.blog_enabled? }
|
11
|
+
}) # Integral Goodness
|
5
12
|
acts_as_paranoid # Soft-deletion
|
6
13
|
acts_as_listable if Integral.blog_enabled? # Listable Item
|
7
14
|
acts_as_taggable # Tagging
|
@@ -18,7 +25,8 @@ module Integral
|
|
18
25
|
self.per_page = 8 if respond_to? :per_page
|
19
26
|
|
20
27
|
# Associations
|
21
|
-
belongs_to :user
|
28
|
+
belongs_to :user, -> { with_deleted }
|
29
|
+
belongs_to :category
|
22
30
|
belongs_to :image, class_name: 'Integral::Image', optional: true
|
23
31
|
belongs_to :preview_image, class_name: 'Integral::Image', optional: true
|
24
32
|
|
@@ -29,24 +37,17 @@ module Integral
|
|
29
37
|
|
30
38
|
# Callbacks
|
31
39
|
before_save :set_published_at
|
40
|
+
before_save :set_paper_trail_event
|
32
41
|
before_save :set_tags_context
|
42
|
+
after_update :deliver_published_webhook_on_update
|
43
|
+
after_create :deliver_published_webhook_on_create
|
33
44
|
|
34
45
|
# Aliases
|
35
46
|
alias author user
|
36
47
|
alias featured_image image
|
37
48
|
|
38
49
|
# Scopes
|
39
|
-
scope :search, ->(query) { where('lower(title) LIKE ?', "%#{query.downcase}%") }
|
40
|
-
|
41
|
-
# @return [Array] containing available human readable statuses against there numeric value
|
42
|
-
def self.available_statuses(opts = { reverse: false })
|
43
|
-
statuses = [
|
44
|
-
[I18n.t('integral.records.status.draft'), 0],
|
45
|
-
[I18n.t('integral.records.status.published'), 1]
|
46
|
-
]
|
47
|
-
|
48
|
-
opts[:reverse] ? statuses.each(&:reverse!) : statuses
|
49
|
-
end
|
50
|
+
scope :search, ->(query) { where('lower(title) LIKE ? OR lower(slug) LIKE ?', "%#{query.downcase}%", "%#{query.downcase}%") }
|
50
51
|
|
51
52
|
# Increments the view count of the post if a PostViewing is successfully added
|
52
53
|
#
|
@@ -94,11 +95,15 @@ module Integral
|
|
94
95
|
{
|
95
96
|
icon: 'rss',
|
96
97
|
record_title: I18n.t('integral.backend.record_selector.posts.record'),
|
97
|
-
selector_path: Engine.routes.url_helpers.
|
98
|
+
selector_path: Engine.routes.url_helpers.list_backend_posts_path,
|
98
99
|
selector_title: I18n.t('integral.backend.record_selector.posts.title')
|
99
100
|
}
|
100
101
|
end
|
101
102
|
|
103
|
+
def self.integral_icon
|
104
|
+
'rss'
|
105
|
+
end
|
106
|
+
|
102
107
|
# @return [String] Current tag context
|
103
108
|
def tag_context
|
104
109
|
status
|
@@ -111,6 +116,10 @@ module Integral
|
|
111
116
|
|
112
117
|
private
|
113
118
|
|
119
|
+
def webhook_payload
|
120
|
+
Integral::PostSerializer.new(self).serializable_hash
|
121
|
+
end
|
122
|
+
|
114
123
|
def set_slug
|
115
124
|
if slug_changed? && Post.exists_by_friendly_id?(slug)
|
116
125
|
self.slug = resolve_friendly_id_conflict([slug])
|
@@ -118,7 +127,15 @@ module Integral
|
|
118
127
|
end
|
119
128
|
|
120
129
|
def set_published_at
|
121
|
-
|
130
|
+
if published? && published_at.nil?
|
131
|
+
self.published_at = Time.now
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
def set_paper_trail_event
|
136
|
+
if persisted? && published? && status_changed?
|
137
|
+
self.paper_trail_event = :publish
|
138
|
+
end
|
122
139
|
end
|
123
140
|
|
124
141
|
# Set the context of tags so that draft and archived tags are not displayed publicly
|
@@ -145,5 +162,13 @@ module Integral
|
|
145
162
|
contexts.delete(tag_context)
|
146
163
|
contexts
|
147
164
|
end
|
165
|
+
|
166
|
+
def deliver_published_webhook_on_update
|
167
|
+
deliver_webhook(:published) if saved_change_to_status? && published?
|
168
|
+
end
|
169
|
+
|
170
|
+
def deliver_published_webhook_on_create
|
171
|
+
deliver_webhook(:published) if published?
|
172
|
+
end
|
148
173
|
end
|
149
174
|
end
|