-
Notifications
You must be signed in to change notification settings - Fork 55
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
How can I set language for code? #16
Comments
this would be awesome feature to have the ability to set language per snippet |
|
Under the hood simple textarea, adding third party syntax highlight like highlight.js not resolve the issue. Need add code editor like codemirror for highlight on input. I think for this better create new block tool or include code editor into current block tool. |
I have a solution without highlighting the code. I'm a new learner. /**
* Build styles
*/
require('./codeplus.css').toString();
class CodePlus {
static get toolbox() {
return {
icon: '<svg width="14" height="14" viewBox="0 -1 14 14" xmlns="http://www.w3.org/2000/svg" > <path d="M3.177 6.852c.205.253.347.572.427.954.078.372.117.844.117 1.417 0 .418.01.725.03.92.02.18.057.314.107.396.046.075.093.117.14.134.075.027.218.056.42.083a.855.855 0 0 1 .56.297c.145.167.215.38.215.636 0 .612-.432.934-1.216.934-.457 0-.87-.087-1.233-.262a1.995 1.995 0 0 1-.853-.751 2.09 2.09 0 0 1-.305-1.097c-.014-.648-.029-1.168-.043-1.56-.013-.383-.034-.631-.06-.733-.064-.263-.158-.455-.276-.578a2.163 2.163 0 0 0-.505-.376c-.238-.134-.41-.256-.519-.371C.058 6.76 0 6.567 0 6.315c0-.37.166-.657.493-.846.329-.186.56-.342.693-.466a.942.942 0 0 0 .26-.447c.056-.2.088-.42.097-.658.01-.25.024-.85.043-1.802.015-.629.239-1.14.672-1.522C2.691.19 3.268 0 3.977 0c.783 0 1.216.317 1.216.921 0 .264-.069.48-.211.643a.858.858 0 0 1-.563.29c-.249.03-.417.076-.498.126-.062.04-.112.134-.139.291-.031.187-.052.562-.061 1.119a8.828 8.828 0 0 1-.112 1.378 2.24 2.24 0 0 1-.404.963c-.159.212-.373.406-.64.583.25.163.454.342.612.538zm7.34 0c.157-.196.362-.375.612-.538a2.544 2.544 0 0 1-.641-.583 2.24 2.24 0 0 1-.404-.963 8.828 8.828 0 0 1-.112-1.378c-.009-.557-.03-.932-.061-1.119-.027-.157-.077-.251-.14-.29-.08-.051-.248-.096-.496-.127a.858.858 0 0 1-.564-.29C8.57 1.401 8.5 1.185 8.5.921 8.5.317 8.933 0 9.716 0c.71 0 1.286.19 1.72.574.432.382.656.893.671 1.522.02.952.033 1.553.043 1.802.009.238.041.458.097.658a.942.942 0 0 0 .26.447c.133.124.364.28.693.466a.926.926 0 0 1 .493.846c0 .252-.058.446-.183.58-.109.115-.281.237-.52.371-.21.118-.377.244-.504.376-.118.123-.212.315-.277.578-.025.102-.045.35-.06.733-.013.392-.027.912-.042 1.56a2.09 2.09 0 0 1-.305 1.097c-.2.323-.486.574-.853.75a2.811 2.811 0 0 1-1.233.263c-.784 0-1.216-.322-1.216-.934 0-.256.07-.47.214-.636a.855.855 0 0 1 .562-.297c.201-.027.344-.056.418-.083.048-.017.096-.06.14-.134a.996.996 0 0 0 .107-.396c.02-.195.031-.502.031-.92 0-.573.039-1.045.117-1.417.08-.382.222-.701.427-.954z" /> </svg>',
title: 'Code'
}
}
static get contentless() {
return true;
}
static get enableLineBreaks(){
return true;
}
static get DEFAULT_CODE_PLACEHOLDER() {
return 'Enter some code';
}
static get DEFAULT_LANGUAGE_PLACEHOLDER() {
return 'Select a format';
}
static get DEFAULT_FORMAT_CONFIG() {
return ['Python', 'Matlab', 'R', 'Javascript', 'C', 'HTML'];
}
get CSS() {
return {
baseClass: this.api.styles.block,
wrapper: 'cdx-codeplus',
input: this.api.styles.input,
language: 'cdx-codeplus__language',
textarea: 'cdx-codeplus__textarea'
};
}
constructor({
data,
config,
api
}) {
this.api = api;
this.textPlaceholder = config.textPlaceholder || CodePlus.DEFAULT_CODE_PLACEHOLDER;
this.languagePlaceholder = config.languagePlaceholder || CodePlus.DEFAULT_LANGUAGE_PLACEHOLDER;
this.format = config.format || CodePlus.DEFAULT_FORMAT_CONFIG;
this.data = {
language: data.language || '',
text: data.text || ''
};
}
render() {
const container = this._make('div', [this.CSS.baseClass, this.CSS.wrapper]);
const text = this._make('textarea', [this.CSS.input, this.CSS.textarea], {
contentEditable: true,
innerHTML: this.data.text
});
const selectwrapper=this._make('div',this.CSS.input);
const language = this._make('select', this.CSS.language);
text.dataset.placeholder = this.textPlaceholder;
language.dataset.placeholder = this.languagePlaceholder;
const format = this.format;
for (let f in format) {
let option = document.createElement('option');
let v = document.createAttribute('value');
let t = document.createTextNode(format[f]);
v.value = format[f];
option.appendChild(t);
option.setAttributeNode(v);
language.appendChild(option);
}
language.value = this.data.language;
selectwrapper.appendChild(language);
container.appendChild(selectwrapper);
container.appendChild(text);
return container;
}
onPaste(event) {
const content = event.detail.data;
this.data = {
text: content.textContent
};
}
save(codeElement) {
const text = codeElement.querySelector(`.${this.CSS.textarea}`);
const language = codeElement.querySelector(`.${this.CSS.language}`);
let index = language.selectedIndex;
return Object.assign(this.data, {
text: text.value,
language: language.options[index].value
});
}
static get sanitize() {
return {
language: {},
text: {}
};
}
_make(tagName, classNames = null, attributes = {}) {
let el = document.createElement(tagName);
if (Array.isArray(classNames)) {
el.classList.add(...classNames);
} else if (classNames) {
el.classList.add(classNames);
}
for (let attrName in attributes) {
el[attrName] = attributes[attrName];
}
return el;
}
static get pasteConfig() {
return {
tags: ['pre'],
};
}
}
module.exports = CodePlus; and the style file: .cdx-codeplus__textarea {
min-height: 200px;
font-family: Menlo, Monaco, Consolas, Courier New, monospace;
color: #41314e;
line-height: 1.6em;
font-size: 12px;
background: #f8f7fa;
border: 1px solid #f1f1f4;
box-shadow: none;
white-space: pre;
word-wrap: normal;
overflow-x: auto;
resize: vertical;
}
.cdx-codeplus__language {
width: 100%;
cursor: pointer;
padding-right: 2em;
border: none;
background: transparent;
background-image: none;
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
text-indent: 0.01px;
text-overflow: '';
} |
@dukesx, and where is your solution? Give us the link |
@dukesx, dude where is the solution for this implementation? Can you please share the link here, would really appreciate it. |
Sorry guys, I have been really busy with other projects. This implementation was actually for my cms project that I made and which went down in flames. Now I am remaking that cms, and I will be using editor.js with same implementation. I will upload the snippet here sometime later when I am out of design phase or you can follow my project "Write Grand CMS" to see updates on what's going on. |
@PolinaShneider any update on this one :-D |
Hi all, Check out new CodeBox tool. If you use React in your project, the ERR tool might be useful to you. It helps with rendering your saved block data into styled and flexible react components. PS: Enjoy! |
I've created a https://github.com/alexiej/editorjs-codemirror There are couple of bugs from editor.js:
I've done with this on the editor.js to modificationsObserver.ts. Now OnChange only raises when there is a real change. |
I have created a fork from this repo, that lets you select the language code (supported by prismJs). |
I have added a pull request here for this issue which allows the user to add their own language with a custom label |
I found great solution here https://github.com/calumk/editorjs-codeflask |
The method by @Al3bad no longer works with the switch to typescript. I think a few attempts have been made to add this feature to the tool - some of which still have open PRs. It would be great to get confirmation from the maintainers if there is a desire to support this feature. If so, I'd be happy to re-issue the PR against the typescript database. If not, it might make sense to just close this for now as out of scope. |
Ex: php, css, js, ...
The text was updated successfully, but these errors were encountered: