proclaim 0.5.6 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/Rakefile +5 -38
- data/app/assets/config/proclaim_manifest.js +2 -0
- data/app/assets/images/{ajax_loader.gif → proclaim/ajax_loader.gif} +0 -0
- data/app/assets/javascripts/proclaim.js +7 -7
- data/app/assets/javascripts/proclaim/{comments_handler.js.coffee → comments_handler.coffee} +16 -10
- data/app/assets/javascripts/proclaim/editor.coffee +55 -0
- data/app/assets/stylesheets/{proclaim.css.scss → proclaim.scss} +7 -8
- data/app/assets/stylesheets/proclaim/{comments.css.scss → comments.scss} +0 -0
- data/app/assets/stylesheets/proclaim/{posts.css.scss → posts.scss} +60 -25
- data/app/assets/stylesheets/proclaim/{subscriptions.css.scss → subscriptions.scss} +0 -0
- data/app/controllers/proclaim/application_controller.rb +60 -56
- data/app/controllers/proclaim/comments_controller.rb +13 -42
- data/app/controllers/proclaim/posts_controller.rb +25 -57
- data/app/controllers/proclaim/subscriptions_controller.rb +3 -3
- data/app/jobs/proclaim/application_job.rb +4 -0
- data/app/mailers/proclaim/application_mailer.rb +5 -0
- data/app/mailers/proclaim/subscription_mailer.rb +19 -17
- data/app/models/proclaim/application_record.rb +5 -0
- data/app/models/proclaim/comment.rb +6 -1
- data/app/models/proclaim/post.rb +20 -28
- data/app/models/proclaim/subscription.rb +33 -11
- data/app/views/layouts/proclaim/subscription_mailer.html.erb +15 -36
- data/app/views/proclaim/comments/_comment.html.erb +7 -7
- data/app/views/proclaim/comments/_form.html.erb +7 -5
- data/app/views/proclaim/posts/_form.html.erb +34 -21
- data/app/views/proclaim/posts/show.html.erb +16 -3
- data/app/views/proclaim/subscription_mailer/welcome_email.html.erb +2 -6
- data/config/initializers/friendly_id.rb +20 -1
- data/config/routes.rb +1 -5
- data/db/migrate/20141108222616_create_proclaim_posts.rb +8 -1
- data/db/migrate/20141114235359_create_proclaim_comments.rb +1 -1
- data/db/migrate/20141115022230_create_proclaim_comment_hierarchies.rb +1 -1
- data/db/migrate/20141210234057_create_proclaim_subscriptions.rb +5 -4
- data/db/migrate/20150213015321_create_friendly_id_slugs.rb +1 -1
- data/lib/generators/proclaim/install_generator.rb +1 -1
- data/lib/generators/proclaim/templates/initialize_proclaim.rb +31 -29
- data/lib/generators/proclaim/views_generator.rb +1 -1
- data/lib/proclaim.rb +15 -15
- data/lib/proclaim/engine.rb +21 -19
- data/lib/proclaim/version.rb +1 -1
- data/vendor/assets/fonts/KaTeX_AMS-Regular.ttf +0 -0
- data/vendor/assets/fonts/KaTeX_AMS-Regular.woff +0 -0
- data/vendor/assets/fonts/KaTeX_AMS-Regular.woff2 +0 -0
- data/vendor/assets/fonts/KaTeX_Caligraphic-Bold.ttf +0 -0
- data/vendor/assets/fonts/KaTeX_Caligraphic-Bold.woff +0 -0
- data/vendor/assets/fonts/KaTeX_Caligraphic-Bold.woff2 +0 -0
- data/vendor/assets/fonts/KaTeX_Caligraphic-Regular.ttf +0 -0
- data/vendor/assets/fonts/KaTeX_Caligraphic-Regular.woff +0 -0
- data/vendor/assets/fonts/KaTeX_Caligraphic-Regular.woff2 +0 -0
- data/vendor/assets/fonts/KaTeX_Fraktur-Bold.ttf +0 -0
- data/vendor/assets/fonts/KaTeX_Fraktur-Bold.woff +0 -0
- data/vendor/assets/fonts/KaTeX_Fraktur-Bold.woff2 +0 -0
- data/vendor/assets/fonts/KaTeX_Fraktur-Regular.ttf +0 -0
- data/vendor/assets/fonts/KaTeX_Fraktur-Regular.woff +0 -0
- data/vendor/assets/fonts/KaTeX_Fraktur-Regular.woff2 +0 -0
- data/vendor/assets/fonts/KaTeX_Main-Bold.ttf +0 -0
- data/vendor/assets/fonts/KaTeX_Main-Bold.woff +0 -0
- data/vendor/assets/fonts/KaTeX_Main-Bold.woff2 +0 -0
- data/vendor/assets/fonts/KaTeX_Main-BoldItalic.ttf +0 -0
- data/vendor/assets/fonts/KaTeX_Main-BoldItalic.woff +0 -0
- data/vendor/assets/fonts/KaTeX_Main-BoldItalic.woff2 +0 -0
- data/vendor/assets/fonts/KaTeX_Main-Italic.ttf +0 -0
- data/vendor/assets/fonts/KaTeX_Main-Italic.woff +0 -0
- data/vendor/assets/fonts/KaTeX_Main-Italic.woff2 +0 -0
- data/vendor/assets/fonts/KaTeX_Main-Regular.ttf +0 -0
- data/vendor/assets/fonts/KaTeX_Main-Regular.woff +0 -0
- data/vendor/assets/fonts/KaTeX_Main-Regular.woff2 +0 -0
- data/vendor/assets/fonts/KaTeX_Math-BoldItalic.ttf +0 -0
- data/vendor/assets/fonts/KaTeX_Math-BoldItalic.woff +0 -0
- data/vendor/assets/fonts/KaTeX_Math-BoldItalic.woff2 +0 -0
- data/vendor/assets/fonts/KaTeX_Math-Italic.ttf +0 -0
- data/vendor/assets/fonts/KaTeX_Math-Italic.woff +0 -0
- data/vendor/assets/fonts/KaTeX_Math-Italic.woff2 +0 -0
- data/vendor/assets/fonts/KaTeX_SansSerif-Bold.ttf +0 -0
- data/vendor/assets/fonts/KaTeX_SansSerif-Bold.woff +0 -0
- data/vendor/assets/fonts/KaTeX_SansSerif-Bold.woff2 +0 -0
- data/vendor/assets/fonts/KaTeX_SansSerif-Italic.ttf +0 -0
- data/vendor/assets/fonts/KaTeX_SansSerif-Italic.woff +0 -0
- data/vendor/assets/fonts/KaTeX_SansSerif-Italic.woff2 +0 -0
- data/vendor/assets/fonts/KaTeX_SansSerif-Regular.ttf +0 -0
- data/vendor/assets/fonts/KaTeX_SansSerif-Regular.woff +0 -0
- data/vendor/assets/fonts/KaTeX_SansSerif-Regular.woff2 +0 -0
- data/vendor/assets/fonts/KaTeX_Script-Regular.ttf +0 -0
- data/vendor/assets/fonts/KaTeX_Script-Regular.woff +0 -0
- data/vendor/assets/fonts/KaTeX_Script-Regular.woff2 +0 -0
- data/vendor/assets/fonts/KaTeX_Size1-Regular.ttf +0 -0
- data/vendor/assets/fonts/KaTeX_Size1-Regular.woff +0 -0
- data/vendor/assets/fonts/KaTeX_Size1-Regular.woff2 +0 -0
- data/vendor/assets/fonts/KaTeX_Size2-Regular.ttf +0 -0
- data/vendor/assets/fonts/KaTeX_Size2-Regular.woff +0 -0
- data/vendor/assets/fonts/KaTeX_Size2-Regular.woff2 +0 -0
- data/vendor/assets/fonts/KaTeX_Size3-Regular.ttf +0 -0
- data/vendor/assets/fonts/KaTeX_Size3-Regular.woff +0 -0
- data/vendor/assets/fonts/KaTeX_Size3-Regular.woff2 +0 -0
- data/vendor/assets/fonts/KaTeX_Size4-Regular.ttf +0 -0
- data/vendor/assets/fonts/KaTeX_Size4-Regular.woff +0 -0
- data/vendor/assets/fonts/KaTeX_Size4-Regular.woff2 +0 -0
- data/vendor/assets/fonts/KaTeX_Typewriter-Regular.ttf +0 -0
- data/vendor/assets/fonts/KaTeX_Typewriter-Regular.woff +0 -0
- data/vendor/assets/fonts/KaTeX_Typewriter-Regular.woff2 +0 -0
- data/vendor/assets/javascripts/contrib/auto-render.js +339 -0
- data/vendor/assets/javascripts/contrib/auto-render.min.js +1 -0
- data/vendor/assets/javascripts/contrib/auto-render.mjs +215 -0
- data/vendor/assets/javascripts/contrib/copy-tex.css +14 -0
- data/vendor/assets/javascripts/contrib/copy-tex.js +213 -0
- data/vendor/assets/javascripts/contrib/copy-tex.min.css +1 -0
- data/vendor/assets/javascripts/contrib/copy-tex.min.js +1 -0
- data/vendor/assets/javascripts/contrib/copy-tex.mjs +85 -0
- data/vendor/assets/javascripts/contrib/mathtex-script-type.js +137 -0
- data/vendor/assets/javascripts/contrib/mathtex-script-type.min.js +1 -0
- data/vendor/assets/javascripts/contrib/mathtex-script-type.mjs +24 -0
- data/vendor/assets/javascripts/contrib/mhchem.js +3241 -0
- data/vendor/assets/javascripts/contrib/mhchem.min.js +1 -0
- data/vendor/assets/javascripts/contrib/mhchem.mjs +3109 -0
- data/vendor/assets/javascripts/katex.js +16517 -0
- data/vendor/assets/javascripts/katex.min.js +1 -0
- data/vendor/assets/javascripts/katex.mjs +16122 -0
- data/vendor/assets/javascripts/quill.core.js +8522 -0
- data/vendor/assets/javascripts/quill.js +11489 -0
- data/vendor/assets/javascripts/quill.min.js +8 -0
- data/vendor/assets/javascripts/quill.min.js.map +1 -0
- data/vendor/assets/stylesheets/katex.css +1011 -0
- data/vendor/assets/stylesheets/katex.min.css +1 -0
- data/vendor/assets/stylesheets/quill.bubble.css +952 -0
- data/vendor/assets/stylesheets/quill.core.css +397 -0
- data/vendor/assets/stylesheets/quill.snow.css +945 -0
- metadata +169 -278
- data/CHANGELOG +0 -77
- data/Gemfile +0 -14
- data/VERSION +0 -1
- data/app/assets/javascripts/proclaim/editor.js.coffee +0 -52
- data/app/assets/javascripts/proclaim/images.js.coffee +0 -3
- data/app/assets/javascripts/proclaim/subscriptions.js.coffee +0 -3
- data/app/assets/stylesheets/proclaim/images.scss +0 -3
- data/app/controllers/proclaim/images_controller.rb +0 -67
- data/app/helpers/proclaim/comments_helper.rb +0 -4
- data/app/helpers/proclaim/images_helper.rb +0 -4
- data/app/helpers/proclaim/subscriptions_helper.rb +0 -4
- data/app/models/proclaim/image.rb +0 -19
- data/app/policies/proclaim/image_policy.rb +0 -29
- data/app/uploaders/proclaim/image_uploader.rb +0 -82
- data/db/migrate/20141222224905_create_proclaim_images.rb +0 -12
- data/db/migrate/20150123115226_add_name_to_subscriptions.rb +0 -7
- data/db/migrate/20150213015850_add_slug_to_posts.rb +0 -20
- data/proclaim.gemspec +0 -51
- data/test/controllers/proclaim/comments_controller_test.rb +0 -228
- data/test/controllers/proclaim/images_controller_test.rb +0 -166
- data/test/controllers/proclaim/posts_controller_test.rb +0 -465
- data/test/controllers/proclaim/subscriptions_controller_test.rb +0 -154
- data/test/dummy/README.rdoc +0 -28
- data/test/dummy/Rakefile +0 -6
- data/test/dummy/app/assets/javascripts/application.js +0 -14
- data/test/dummy/app/assets/stylesheets/application.css +0 -16
- data/test/dummy/app/controllers/application_controller.rb +0 -15
- data/test/dummy/app/helpers/application_helper.rb +0 -28
- data/test/dummy/app/models/user.rb +0 -7
- data/test/dummy/app/views/layouts/application.html.erb +0 -16
- data/test/dummy/bin/bundle +0 -3
- data/test/dummy/bin/rails +0 -4
- data/test/dummy/bin/rake +0 -4
- data/test/dummy/config.ru +0 -4
- data/test/dummy/config/application.rb +0 -24
- data/test/dummy/config/boot.rb +0 -5
- data/test/dummy/config/database.yml +0 -25
- data/test/dummy/config/environment.rb +0 -5
- data/test/dummy/config/environments/development.rb +0 -45
- data/test/dummy/config/environments/production.rb +0 -80
- data/test/dummy/config/environments/test.rb +0 -49
- data/test/dummy/config/initializers/assets.rb +0 -8
- data/test/dummy/config/initializers/backtrace_silencers.rb +0 -7
- data/test/dummy/config/initializers/cookies_serializer.rb +0 -3
- data/test/dummy/config/initializers/filter_parameter_logging.rb +0 -4
- data/test/dummy/config/initializers/inflections.rb +0 -16
- data/test/dummy/config/initializers/mime_types.rb +0 -4
- data/test/dummy/config/initializers/session_store.rb +0 -3
- data/test/dummy/config/initializers/wrap_parameters.rb +0 -14
- data/test/dummy/config/locales/en.yml +0 -23
- data/test/dummy/config/routes.rb +0 -5
- data/test/dummy/config/secrets.yml +0 -22
- data/test/dummy/db/migrate/20141117214323_create_users.rb +0 -10
- data/test/dummy/db/schema.rb +0 -91
- data/test/dummy/public/404.html +0 -67
- data/test/dummy/public/422.html +0 -67
- data/test/dummy/public/500.html +0 -66
- data/test/dummy/public/favicon.ico +0 -0
- data/test/factories/proclaim/comment.rb +0 -11
- data/test/factories/proclaim/image.rb +0 -6
- data/test/factories/proclaim/post.rb +0 -14
- data/test/factories/proclaim/subscription.rb +0 -14
- data/test/factories/user.rb +0 -6
- data/test/helpers/proclaim/comments_helper_test.rb +0 -6
- data/test/helpers/proclaim/posts_helper_test.rb +0 -6
- data/test/helpers/proclaim/subscriptions_helper_test.rb +0 -6
- data/test/integration/with_javascript/comment_test.rb +0 -391
- data/test/integration/with_javascript/post_form_test.rb +0 -225
- data/test/integration/with_javascript/post_show_test.rb +0 -47
- data/test/integration/with_javascript/post_subscription_test.rb +0 -302
- data/test/integration/without_javascript/blog_subscription_test.rb +0 -114
- data/test/integration/without_javascript/manage_subscriptions_test.rb +0 -37
- data/test/integration/without_javascript/post_test.rb +0 -234
- data/test/integration/without_javascript/subscription_email_test.rb +0 -95
- data/test/integration/without_javascript/unsubscribe_test.rb +0 -32
- data/test/mailers/previews/proclaim/subscription_mailer_preview.rb +0 -22
- data/test/mailers/proclaim/subscription_mailer_test.rb +0 -91
- data/test/models/proclaim/comment_test.rb +0 -41
- data/test/models/proclaim/image_test.rb +0 -70
- data/test/models/proclaim/post_test.rb +0 -193
- data/test/models/proclaim/subscription_test.rb +0 -77
- data/test/policies/application_policy_test.rb +0 -87
- data/test/policies/proclaim/comment_policy_test.rb +0 -71
- data/test/policies/proclaim/image_policy_test.rb +0 -83
- data/test/policies/proclaim/post_policy_test.rb +0 -98
- data/test/policies/proclaim/subscription_policy_test.rb +0 -103
- data/test/proclaim_test.rb +0 -7
- data/test/support/images/test.jpg +0 -0
- data/test/support/pages/posts/edit_page.rb +0 -5
- data/test/support/pages/posts/show_page.rb +0 -47
- data/test/support/wait_for_ajax.rb +0 -11
- data/test/test_helper.rb +0 -71
- data/test/unit/proclaim/new_comment_callback_test.rb +0 -62
- data/test/unit/proclaim/new_subscription_callback_test.rb +0 -62
- data/test/unit/proclaim/post_published_callback_test.rb +0 -74
- data/vendor/assets/images/link.png +0 -0
- data/vendor/assets/images/remove.png +0 -0
- data/vendor/assets/images/resize-bigger.png +0 -0
- data/vendor/assets/images/resize-smaller.png +0 -0
- data/vendor/assets/images/unlink.png +0 -0
- data/vendor/assets/javascripts/addons/medium-editor-insert-embeds.js +0 -197
- data/vendor/assets/javascripts/addons/medium-editor-insert-images.js +0 -572
- data/vendor/assets/javascripts/addons/medium-editor-insert-maps.js +0 -50
- data/vendor/assets/javascripts/addons/medium-editor-insert-plugin.js +0 -496
- data/vendor/assets/javascripts/addons/medium-editor-insert-tables.js +0 -132
- data/vendor/assets/javascripts/medium-editor-insert-plugin.all.js +0 -1415
- data/vendor/assets/stylesheets/medium-editor-insert-plugin-frontend.css.scss +0 -55
- data/vendor/assets/stylesheets/medium-editor-insert-plugin.css.scss +0 -277
@@ -0,0 +1 @@
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("katex")):"function"==typeof define&&define.amd?define(["katex"],t):"object"==typeof exports?exports.renderMathInElement=t(require("katex")):e.renderMathInElement=t(e.katex)}("undefined"!=typeof self?self:this,function(e){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=1)}([function(t,r){t.exports=e},function(e,t,r){"use strict";r.r(t);var n=r(0),o=r.n(n),a=function(e,t,r){for(var n=r,o=0,a=e.length;n<t.length;){var i=t[n];if(o<=0&&t.slice(n,n+a)===e)return n;"\\"===i?n++:"{"===i?o++:"}"===i&&o--,n++}return-1},i=function(e,t,r,n){for(var o=[],i=0;i<e.length;i++)if("text"===e[i].type){var l=e[i].data,d=!0,s=0,f=void 0;for(-1!==(f=l.indexOf(t))&&(s=f,o.push({type:"text",data:l.slice(0,s)}),d=!1);;){if(d){if(-1===(f=l.indexOf(t,s)))break;o.push({type:"text",data:l.slice(s,f)}),s=f}else{if(-1===(f=a(r,l,s+t.length)))break;o.push({type:"math",data:l.slice(s+t.length,f),rawData:l.slice(s,f+r.length),display:n}),s=f+r.length}d=!d}o.push({type:"text",data:l.slice(s)})}else o.push(e[i]);return o},l=function(e,t){for(var r=function(e,t){for(var r=[{type:"text",data:e}],n=0;n<t.length;n++){var o=t[n];r=i(r,o.left,o.right,o.display||!1)}return r}(e,t.delimiters),n=document.createDocumentFragment(),a=0;a<r.length;a++)if("text"===r[a].type)n.appendChild(document.createTextNode(r[a].data));else{var l=document.createElement("span"),d=r[a].data;t.displayMode=r[a].display;try{t.preProcess&&(d=t.preProcess(d)),o.a.render(d,l,t)}catch(e){if(!(e instanceof o.a.ParseError))throw e;t.errorCallback("KaTeX auto-render: Failed to parse `"+r[a].data+"` with ",e),n.appendChild(document.createTextNode(r[a].rawData));continue}n.appendChild(l)}return n};t.default=function(e,t){if(!e)throw new Error("No element provided to render");var r={};for(var n in t)t.hasOwnProperty(n)&&(r[n]=t[n]);r.delimiters=r.delimiters||[{left:"$$",right:"$$",display:!0},{left:"\\(",right:"\\)",display:!1},{left:"\\[",right:"\\]",display:!0}],r.ignoredTags=r.ignoredTags||["script","noscript","style","textarea","pre","code"],r.ignoredClasses=r.ignoredClasses||[],r.errorCallback=r.errorCallback||console.error,r.macros=r.macros||{},function e(t,r){for(var n=0;n<t.childNodes.length;n++){var o=t.childNodes[n];if(3===o.nodeType){var a=l(o.textContent,r);n+=a.childNodes.length-1,t.replaceChild(a,o)}else 1===o.nodeType&&function(){var t=" "+o.className+" ";-1===r.ignoredTags.indexOf(o.nodeName.toLowerCase())&&r.ignoredClasses.every(function(e){return-1===t.indexOf(" "+e+" ")})&&e(o,r)}()}}(e,r)}}]).default});
|
@@ -0,0 +1,215 @@
|
|
1
|
+
import katex from '../katex.mjs';
|
2
|
+
|
3
|
+
/* eslint no-constant-condition:0 */
|
4
|
+
const findEndOfMath = function findEndOfMath(delimiter, text, startIndex) {
|
5
|
+
// Adapted from
|
6
|
+
// https://github.com/Khan/perseus/blob/master/src/perseus-markdown.jsx
|
7
|
+
let index = startIndex;
|
8
|
+
let braceLevel = 0;
|
9
|
+
const delimLength = delimiter.length;
|
10
|
+
|
11
|
+
while (index < text.length) {
|
12
|
+
const character = text[index];
|
13
|
+
|
14
|
+
if (braceLevel <= 0 && text.slice(index, index + delimLength) === delimiter) {
|
15
|
+
return index;
|
16
|
+
} else if (character === "\\") {
|
17
|
+
index++;
|
18
|
+
} else if (character === "{") {
|
19
|
+
braceLevel++;
|
20
|
+
} else if (character === "}") {
|
21
|
+
braceLevel--;
|
22
|
+
}
|
23
|
+
|
24
|
+
index++;
|
25
|
+
}
|
26
|
+
|
27
|
+
return -1;
|
28
|
+
};
|
29
|
+
|
30
|
+
const splitAtDelimiters = function splitAtDelimiters(startData, leftDelim, rightDelim, display) {
|
31
|
+
const finalData = [];
|
32
|
+
|
33
|
+
for (let i = 0; i < startData.length; i++) {
|
34
|
+
if (startData[i].type === "text") {
|
35
|
+
const text = startData[i].data;
|
36
|
+
let lookingForLeft = true;
|
37
|
+
let currIndex = 0;
|
38
|
+
let nextIndex;
|
39
|
+
nextIndex = text.indexOf(leftDelim);
|
40
|
+
|
41
|
+
if (nextIndex !== -1) {
|
42
|
+
currIndex = nextIndex;
|
43
|
+
finalData.push({
|
44
|
+
type: "text",
|
45
|
+
data: text.slice(0, currIndex)
|
46
|
+
});
|
47
|
+
lookingForLeft = false;
|
48
|
+
}
|
49
|
+
|
50
|
+
while (true) {
|
51
|
+
if (lookingForLeft) {
|
52
|
+
nextIndex = text.indexOf(leftDelim, currIndex);
|
53
|
+
|
54
|
+
if (nextIndex === -1) {
|
55
|
+
break;
|
56
|
+
}
|
57
|
+
|
58
|
+
finalData.push({
|
59
|
+
type: "text",
|
60
|
+
data: text.slice(currIndex, nextIndex)
|
61
|
+
});
|
62
|
+
currIndex = nextIndex;
|
63
|
+
} else {
|
64
|
+
nextIndex = findEndOfMath(rightDelim, text, currIndex + leftDelim.length);
|
65
|
+
|
66
|
+
if (nextIndex === -1) {
|
67
|
+
break;
|
68
|
+
}
|
69
|
+
|
70
|
+
finalData.push({
|
71
|
+
type: "math",
|
72
|
+
data: text.slice(currIndex + leftDelim.length, nextIndex),
|
73
|
+
rawData: text.slice(currIndex, nextIndex + rightDelim.length),
|
74
|
+
display: display
|
75
|
+
});
|
76
|
+
currIndex = nextIndex + rightDelim.length;
|
77
|
+
}
|
78
|
+
|
79
|
+
lookingForLeft = !lookingForLeft;
|
80
|
+
}
|
81
|
+
|
82
|
+
finalData.push({
|
83
|
+
type: "text",
|
84
|
+
data: text.slice(currIndex)
|
85
|
+
});
|
86
|
+
} else {
|
87
|
+
finalData.push(startData[i]);
|
88
|
+
}
|
89
|
+
}
|
90
|
+
|
91
|
+
return finalData;
|
92
|
+
};
|
93
|
+
|
94
|
+
/* eslint no-console:0 */
|
95
|
+
|
96
|
+
const splitWithDelimiters = function splitWithDelimiters(text, delimiters) {
|
97
|
+
let data = [{
|
98
|
+
type: "text",
|
99
|
+
data: text
|
100
|
+
}];
|
101
|
+
|
102
|
+
for (let i = 0; i < delimiters.length; i++) {
|
103
|
+
const delimiter = delimiters[i];
|
104
|
+
data = splitAtDelimiters(data, delimiter.left, delimiter.right, delimiter.display || false);
|
105
|
+
}
|
106
|
+
|
107
|
+
return data;
|
108
|
+
};
|
109
|
+
/* Note: optionsCopy is mutated by this method. If it is ever exposed in the
|
110
|
+
* API, we should copy it before mutating.
|
111
|
+
*/
|
112
|
+
|
113
|
+
|
114
|
+
const renderMathInText = function renderMathInText(text, optionsCopy) {
|
115
|
+
const data = splitWithDelimiters(text, optionsCopy.delimiters);
|
116
|
+
const fragment = document.createDocumentFragment();
|
117
|
+
|
118
|
+
for (let i = 0; i < data.length; i++) {
|
119
|
+
if (data[i].type === "text") {
|
120
|
+
fragment.appendChild(document.createTextNode(data[i].data));
|
121
|
+
} else {
|
122
|
+
const span = document.createElement("span");
|
123
|
+
let math = data[i].data; // Override any display mode defined in the settings with that
|
124
|
+
// defined by the text itself
|
125
|
+
|
126
|
+
optionsCopy.displayMode = data[i].display;
|
127
|
+
|
128
|
+
try {
|
129
|
+
if (optionsCopy.preProcess) {
|
130
|
+
math = optionsCopy.preProcess(math);
|
131
|
+
}
|
132
|
+
|
133
|
+
katex.render(math, span, optionsCopy);
|
134
|
+
} catch (e) {
|
135
|
+
if (!(e instanceof katex.ParseError)) {
|
136
|
+
throw e;
|
137
|
+
}
|
138
|
+
|
139
|
+
optionsCopy.errorCallback("KaTeX auto-render: Failed to parse `" + data[i].data + "` with ", e);
|
140
|
+
fragment.appendChild(document.createTextNode(data[i].rawData));
|
141
|
+
continue;
|
142
|
+
}
|
143
|
+
|
144
|
+
fragment.appendChild(span);
|
145
|
+
}
|
146
|
+
}
|
147
|
+
|
148
|
+
return fragment;
|
149
|
+
};
|
150
|
+
|
151
|
+
const renderElem = function renderElem(elem, optionsCopy) {
|
152
|
+
for (let i = 0; i < elem.childNodes.length; i++) {
|
153
|
+
const childNode = elem.childNodes[i];
|
154
|
+
|
155
|
+
if (childNode.nodeType === 3) {
|
156
|
+
// Text node
|
157
|
+
const frag = renderMathInText(childNode.textContent, optionsCopy);
|
158
|
+
i += frag.childNodes.length - 1;
|
159
|
+
elem.replaceChild(frag, childNode);
|
160
|
+
} else if (childNode.nodeType === 1) {
|
161
|
+
// Element node
|
162
|
+
const className = ' ' + childNode.className + ' ';
|
163
|
+
const shouldRender = optionsCopy.ignoredTags.indexOf(childNode.nodeName.toLowerCase()) === -1 && optionsCopy.ignoredClasses.every(x => className.indexOf(' ' + x + ' ') === -1);
|
164
|
+
|
165
|
+
if (shouldRender) {
|
166
|
+
renderElem(childNode, optionsCopy);
|
167
|
+
}
|
168
|
+
} // Otherwise, it's something else, and ignore it.
|
169
|
+
|
170
|
+
}
|
171
|
+
};
|
172
|
+
|
173
|
+
const renderMathInElement = function renderMathInElement(elem, options) {
|
174
|
+
if (!elem) {
|
175
|
+
throw new Error("No element provided to render");
|
176
|
+
}
|
177
|
+
|
178
|
+
const optionsCopy = {}; // Object.assign(optionsCopy, option)
|
179
|
+
|
180
|
+
for (const option in options) {
|
181
|
+
if (options.hasOwnProperty(option)) {
|
182
|
+
optionsCopy[option] = options[option];
|
183
|
+
}
|
184
|
+
} // default options
|
185
|
+
|
186
|
+
|
187
|
+
optionsCopy.delimiters = optionsCopy.delimiters || [{
|
188
|
+
left: "$$",
|
189
|
+
right: "$$",
|
190
|
+
display: true
|
191
|
+
}, {
|
192
|
+
left: "\\(",
|
193
|
+
right: "\\)",
|
194
|
+
display: false
|
195
|
+
}, // LaTeX uses $…$, but it ruins the display of normal `$` in text:
|
196
|
+
// {left: "$", right: "$", display: false},
|
197
|
+
// \[…\] must come last in this array. Otherwise, renderMathInElement
|
198
|
+
// will search for \[ before it searches for $$ or \(
|
199
|
+
// That makes it susceptible to finding a \\[0.3em] row delimiter and
|
200
|
+
// treating it as if it were the start of a KaTeX math zone.
|
201
|
+
{
|
202
|
+
left: "\\[",
|
203
|
+
right: "\\]",
|
204
|
+
display: true
|
205
|
+
}];
|
206
|
+
optionsCopy.ignoredTags = optionsCopy.ignoredTags || ["script", "noscript", "style", "textarea", "pre", "code"];
|
207
|
+
optionsCopy.ignoredClasses = optionsCopy.ignoredClasses || [];
|
208
|
+
optionsCopy.errorCallback = optionsCopy.errorCallback || console.error; // Enable sharing of global macros defined via `\gdef` between different
|
209
|
+
// math elements within a single call to `renderMathInElement`.
|
210
|
+
|
211
|
+
optionsCopy.macros = optionsCopy.macros || {};
|
212
|
+
renderElem(elem, optionsCopy);
|
213
|
+
};
|
214
|
+
|
215
|
+
export default renderMathInElement;
|
@@ -0,0 +1,14 @@
|
|
1
|
+
/* Force selection of entire .katex/.katex-display blocks, so that we can
|
2
|
+
* copy/paste the entire source code. If you omit this CSS, partial
|
3
|
+
* selections of a formula will work, but will copy the ugly HTML
|
4
|
+
* representation instead of the LaTeX source code. (Full selections will
|
5
|
+
* still produce the LaTeX source code.)
|
6
|
+
*/
|
7
|
+
.katex,
|
8
|
+
.katex-display {
|
9
|
+
user-select: all;
|
10
|
+
-moz-user-select: all;
|
11
|
+
-webkit-user-select: all;
|
12
|
+
-ms-user-select: all;
|
13
|
+
}
|
14
|
+
|
@@ -0,0 +1,213 @@
|
|
1
|
+
(function webpackUniversalModuleDefinition(root, factory) {
|
2
|
+
if(typeof exports === 'object' && typeof module === 'object')
|
3
|
+
module.exports = factory();
|
4
|
+
else if(typeof define === 'function' && define.amd)
|
5
|
+
define([], factory);
|
6
|
+
else {
|
7
|
+
var a = factory();
|
8
|
+
for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];
|
9
|
+
}
|
10
|
+
})((typeof self !== 'undefined' ? self : this), function() {
|
11
|
+
return /******/ (function(modules) { // webpackBootstrap
|
12
|
+
/******/ // The module cache
|
13
|
+
/******/ var installedModules = {};
|
14
|
+
/******/
|
15
|
+
/******/ // The require function
|
16
|
+
/******/ function __webpack_require__(moduleId) {
|
17
|
+
/******/
|
18
|
+
/******/ // Check if module is in cache
|
19
|
+
/******/ if(installedModules[moduleId]) {
|
20
|
+
/******/ return installedModules[moduleId].exports;
|
21
|
+
/******/ }
|
22
|
+
/******/ // Create a new module (and put it into the cache)
|
23
|
+
/******/ var module = installedModules[moduleId] = {
|
24
|
+
/******/ i: moduleId,
|
25
|
+
/******/ l: false,
|
26
|
+
/******/ exports: {}
|
27
|
+
/******/ };
|
28
|
+
/******/
|
29
|
+
/******/ // Execute the module function
|
30
|
+
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
|
31
|
+
/******/
|
32
|
+
/******/ // Flag the module as loaded
|
33
|
+
/******/ module.l = true;
|
34
|
+
/******/
|
35
|
+
/******/ // Return the exports of the module
|
36
|
+
/******/ return module.exports;
|
37
|
+
/******/ }
|
38
|
+
/******/
|
39
|
+
/******/
|
40
|
+
/******/ // expose the modules object (__webpack_modules__)
|
41
|
+
/******/ __webpack_require__.m = modules;
|
42
|
+
/******/
|
43
|
+
/******/ // expose the module cache
|
44
|
+
/******/ __webpack_require__.c = installedModules;
|
45
|
+
/******/
|
46
|
+
/******/ // define getter function for harmony exports
|
47
|
+
/******/ __webpack_require__.d = function(exports, name, getter) {
|
48
|
+
/******/ if(!__webpack_require__.o(exports, name)) {
|
49
|
+
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
|
50
|
+
/******/ }
|
51
|
+
/******/ };
|
52
|
+
/******/
|
53
|
+
/******/ // define __esModule on exports
|
54
|
+
/******/ __webpack_require__.r = function(exports) {
|
55
|
+
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
|
56
|
+
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
57
|
+
/******/ }
|
58
|
+
/******/ Object.defineProperty(exports, '__esModule', { value: true });
|
59
|
+
/******/ };
|
60
|
+
/******/
|
61
|
+
/******/ // create a fake namespace object
|
62
|
+
/******/ // mode & 1: value is a module id, require it
|
63
|
+
/******/ // mode & 2: merge all properties of value into the ns
|
64
|
+
/******/ // mode & 4: return value when already ns object
|
65
|
+
/******/ // mode & 8|1: behave like require
|
66
|
+
/******/ __webpack_require__.t = function(value, mode) {
|
67
|
+
/******/ if(mode & 1) value = __webpack_require__(value);
|
68
|
+
/******/ if(mode & 8) return value;
|
69
|
+
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
|
70
|
+
/******/ var ns = Object.create(null);
|
71
|
+
/******/ __webpack_require__.r(ns);
|
72
|
+
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
|
73
|
+
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
|
74
|
+
/******/ return ns;
|
75
|
+
/******/ };
|
76
|
+
/******/
|
77
|
+
/******/ // getDefaultExport function for compatibility with non-harmony modules
|
78
|
+
/******/ __webpack_require__.n = function(module) {
|
79
|
+
/******/ var getter = module && module.__esModule ?
|
80
|
+
/******/ function getDefault() { return module['default']; } :
|
81
|
+
/******/ function getModuleExports() { return module; };
|
82
|
+
/******/ __webpack_require__.d(getter, 'a', getter);
|
83
|
+
/******/ return getter;
|
84
|
+
/******/ };
|
85
|
+
/******/
|
86
|
+
/******/ // Object.prototype.hasOwnProperty.call
|
87
|
+
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
|
88
|
+
/******/
|
89
|
+
/******/ // __webpack_public_path__
|
90
|
+
/******/ __webpack_require__.p = "";
|
91
|
+
/******/
|
92
|
+
/******/
|
93
|
+
/******/ // Load entry module and return exports
|
94
|
+
/******/ return __webpack_require__(__webpack_require__.s = 1);
|
95
|
+
/******/ })
|
96
|
+
/************************************************************************/
|
97
|
+
/******/ ([
|
98
|
+
/* 0 */
|
99
|
+
/***/ (function(module, exports, __webpack_require__) {
|
100
|
+
|
101
|
+
// extracted by mini-css-extract-plugin
|
102
|
+
|
103
|
+
/***/ }),
|
104
|
+
/* 1 */
|
105
|
+
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
106
|
+
|
107
|
+
"use strict";
|
108
|
+
__webpack_require__.r(__webpack_exports__);
|
109
|
+
|
110
|
+
// EXTERNAL MODULE: ./contrib/copy-tex/copy-tex.css
|
111
|
+
var copy_tex = __webpack_require__(0);
|
112
|
+
|
113
|
+
// CONCATENATED MODULE: ./contrib/copy-tex/katex2tex.js
|
114
|
+
// Set these to how you want inline and display math to be delimited.
|
115
|
+
var defaultCopyDelimiters = {
|
116
|
+
inline: ['$', '$'],
|
117
|
+
// alternative: ['\(', '\)']
|
118
|
+
display: ['$$', '$$'] // alternative: ['\[', '\]']
|
119
|
+
|
120
|
+
}; // Replace .katex elements with their TeX source (<annotation> element).
|
121
|
+
// Modifies fragment in-place. Useful for writing your own 'copy' handler,
|
122
|
+
// as in copy-tex.js.
|
123
|
+
|
124
|
+
var katexReplaceWithTex = function katexReplaceWithTex(fragment, copyDelimiters) {
|
125
|
+
if (copyDelimiters === void 0) {
|
126
|
+
copyDelimiters = defaultCopyDelimiters;
|
127
|
+
}
|
128
|
+
|
129
|
+
// Remove .katex-html blocks that are preceded by .katex-mathml blocks
|
130
|
+
// (which will get replaced below).
|
131
|
+
var katexHtml = fragment.querySelectorAll('.katex-mathml + .katex-html');
|
132
|
+
|
133
|
+
for (var i = 0; i < katexHtml.length; i++) {
|
134
|
+
var element = katexHtml[i];
|
135
|
+
|
136
|
+
if (element.remove) {
|
137
|
+
element.remove(null);
|
138
|
+
} else {
|
139
|
+
element.parentNode.removeChild(element);
|
140
|
+
}
|
141
|
+
} // Replace .katex-mathml elements with their annotation (TeX source)
|
142
|
+
// descendant, with inline delimiters.
|
143
|
+
|
144
|
+
|
145
|
+
var katexMathml = fragment.querySelectorAll('.katex-mathml');
|
146
|
+
|
147
|
+
for (var _i = 0; _i < katexMathml.length; _i++) {
|
148
|
+
var _element = katexMathml[_i];
|
149
|
+
|
150
|
+
var texSource = _element.querySelector('annotation');
|
151
|
+
|
152
|
+
if (texSource) {
|
153
|
+
if (_element.replaceWith) {
|
154
|
+
_element.replaceWith(texSource);
|
155
|
+
} else {
|
156
|
+
_element.parentNode.replaceChild(texSource, _element);
|
157
|
+
}
|
158
|
+
|
159
|
+
texSource.innerHTML = copyDelimiters.inline[0] + texSource.innerHTML + copyDelimiters.inline[1];
|
160
|
+
}
|
161
|
+
} // Switch display math to display delimiters.
|
162
|
+
|
163
|
+
|
164
|
+
var displays = fragment.querySelectorAll('.katex-display annotation');
|
165
|
+
|
166
|
+
for (var _i2 = 0; _i2 < displays.length; _i2++) {
|
167
|
+
var _element2 = displays[_i2];
|
168
|
+
_element2.innerHTML = copyDelimiters.display[0] + _element2.innerHTML.substr(copyDelimiters.inline[0].length, _element2.innerHTML.length - copyDelimiters.inline[0].length - copyDelimiters.inline[1].length) + copyDelimiters.display[1];
|
169
|
+
}
|
170
|
+
|
171
|
+
return fragment;
|
172
|
+
};
|
173
|
+
/* harmony default export */ var katex2tex = (katexReplaceWithTex);
|
174
|
+
// CONCATENATED MODULE: ./contrib/copy-tex/copy-tex.js
|
175
|
+
// Global copy handler to modify behavior on .katex elements.
|
176
|
+
|
177
|
+
document.addEventListener('copy', function (event) {
|
178
|
+
var selection = window.getSelection();
|
179
|
+
|
180
|
+
if (selection.isCollapsed) {
|
181
|
+
return; // default action OK if selection is empty
|
182
|
+
}
|
183
|
+
|
184
|
+
var fragment = selection.getRangeAt(0).cloneContents();
|
185
|
+
|
186
|
+
if (!fragment.querySelector('.katex-mathml')) {
|
187
|
+
return; // default action OK if no .katex-mathml elements
|
188
|
+
} // Preserve usual HTML copy/paste behavior.
|
189
|
+
|
190
|
+
|
191
|
+
var html = [];
|
192
|
+
|
193
|
+
for (var i = 0; i < fragment.childNodes.length; i++) {
|
194
|
+
html.push(fragment.childNodes[i].outerHTML);
|
195
|
+
}
|
196
|
+
|
197
|
+
event.clipboardData.setData('text/html', html.join('')); // Rewrite plain-text version.
|
198
|
+
|
199
|
+
event.clipboardData.setData('text/plain', katex2tex(fragment).textContent); // Prevent normal copy handling.
|
200
|
+
|
201
|
+
event.preventDefault();
|
202
|
+
});
|
203
|
+
// CONCATENATED MODULE: ./contrib/copy-tex/copy-tex.webpack.js
|
204
|
+
/**
|
205
|
+
* This is the webpack entry point for KaTeX. As ECMAScript doesn't support
|
206
|
+
* CSS modules natively, a separate entry point is used.
|
207
|
+
*/
|
208
|
+
|
209
|
+
|
210
|
+
|
211
|
+
/***/ })
|
212
|
+
/******/ ])["default"];
|
213
|
+
});
|
@@ -0,0 +1 @@
|
|
1
|
+
.katex,.katex-display{user-select:all;-moz-user-select:all;-webkit-user-select:all;-ms-user-select:all}
|
@@ -0,0 +1 @@
|
|
1
|
+
!function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var n=t();for(var r in n)("object"==typeof exports?exports:e)[r]=n[r]}}("undefined"!=typeof self?self:this,function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=1)}([function(e,t,n){},function(e,t,n){"use strict";n.r(t);n(0);var r={inline:["$","$"],display:["$$","$$"]},o=function(e,t){void 0===t&&(t=r);for(var n=e.querySelectorAll(".katex-mathml + .katex-html"),o=0;o<n.length;o++){var l=n[o];l.remove?l.remove(null):l.parentNode.removeChild(l)}for(var i=e.querySelectorAll(".katex-mathml"),a=0;a<i.length;a++){var u=i[a],f=u.querySelector("annotation");f&&(u.replaceWith?u.replaceWith(f):u.parentNode.replaceChild(f,u),f.innerHTML=t.inline[0]+f.innerHTML+t.inline[1])}for(var c=e.querySelectorAll(".katex-display annotation"),d=0;d<c.length;d++){var p=c[d];p.innerHTML=t.display[0]+p.innerHTML.substr(t.inline[0].length,p.innerHTML.length-t.inline[0].length-t.inline[1].length)+t.display[1]}return e};document.addEventListener("copy",function(e){var t=window.getSelection();if(!t.isCollapsed){var n=t.getRangeAt(0).cloneContents();if(n.querySelector(".katex-mathml")){for(var r=[],l=0;l<n.childNodes.length;l++)r.push(n.childNodes[l].outerHTML);e.clipboardData.setData("text/html",r.join("")),e.clipboardData.setData("text/plain",o(n).textContent),e.preventDefault()}}})}]).default});
|