Added user custom extension
This commit is contained in:
parent
77f3324873
commit
ec1388fb3f
@ -1,6 +1,6 @@
|
|||||||
|
|
||||||
div.jGrowl {
|
div.jGrowl {
|
||||||
z-index: 1000;
|
z-index: 1050;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
17
js/core.js
17
js/core.js
@ -6,12 +6,13 @@ define([
|
|||||||
"extensionMgr",
|
"extensionMgr",
|
||||||
"mousetrap",
|
"mousetrap",
|
||||||
"text!html/settingsTemplateTooltip.html",
|
"text!html/settingsTemplateTooltip.html",
|
||||||
|
"text!html/settingsUserCustomExtensionTooltip.html",
|
||||||
"storage",
|
"storage",
|
||||||
"config",
|
"config",
|
||||||
"libs/bootstrap",
|
"libs/bootstrap",
|
||||||
"libs/layout",
|
"libs/layout",
|
||||||
"libs/Markdown.Editor"
|
"libs/Markdown.Editor"
|
||||||
], function($, _, utils, settings, extensionMgr, mousetrap, settingsTemplateTooltipHTML) {
|
], function($, _, utils, settings, extensionMgr, mousetrap, settingsTemplateTooltipHTML, settingsUserCustomExtensionTooltipHTML) {
|
||||||
|
|
||||||
var core = {};
|
var core = {};
|
||||||
|
|
||||||
@ -536,6 +537,20 @@ define([
|
|||||||
trigger: 'hover',
|
trigger: 'hover',
|
||||||
title: 'Thanks for supporting StackEdit by adding a backlink in your documents!'
|
title: 'Thanks for supporting StackEdit by adding a backlink in your documents!'
|
||||||
});
|
});
|
||||||
|
$(".tooltip-usercustom-extension").tooltip({
|
||||||
|
html: true,
|
||||||
|
container: '#modal-settings',
|
||||||
|
placement: 'right',
|
||||||
|
trigger: 'manual',
|
||||||
|
title: settingsUserCustomExtensionTooltipHTML
|
||||||
|
}).click(function(e) {
|
||||||
|
$(this).tooltip('show');
|
||||||
|
$(document).on("click.tooltip-usercustom-extension", function(e) {
|
||||||
|
$(".tooltip-usercustom-extension").tooltip('hide');
|
||||||
|
$(document).off("click.tooltip-usercustom-extension");
|
||||||
|
});
|
||||||
|
e.stopPropagation();
|
||||||
|
});
|
||||||
$(".tooltip-template").tooltip({
|
$(".tooltip-template").tooltip({
|
||||||
html: true,
|
html: true,
|
||||||
container: '#modal-settings',
|
container: '#modal-settings',
|
||||||
|
@ -26,6 +26,7 @@ define([
|
|||||||
"extensions/buttonHtmlCode",
|
"extensions/buttonHtmlCode",
|
||||||
"extensions/buttonMarkdownSyntax",
|
"extensions/buttonMarkdownSyntax",
|
||||||
"extensions/buttonViewer",
|
"extensions/buttonViewer",
|
||||||
|
"extensions/userCustom",
|
||||||
"libs/bootstrap",
|
"libs/bootstrap",
|
||||||
"libs/jquery.waitforimages"
|
"libs/jquery.waitforimages"
|
||||||
], function($, _, utils, Extension, settings, settingsExtensionsAccordionHTML) {
|
], function($, _, utils, Extension, settings, settingsExtensionsAccordionHTML) {
|
||||||
@ -37,14 +38,14 @@ define([
|
|||||||
return argument instanceof Extension && argument;
|
return argument instanceof Extension && argument;
|
||||||
}).compact().value();
|
}).compact().value();
|
||||||
|
|
||||||
// Return every named callbacks implemented in extensions
|
// Returns all callbacks with the specified name that are implemented in extensions
|
||||||
function getExtensionCallbackList(hookName) {
|
function getExtensionCallbackList(hookName) {
|
||||||
return _.chain(extensionList).map(function(extension) {
|
return _.chain(extensionList).map(function(extension) {
|
||||||
return extension.config.enabled && extension[hookName];
|
return extension.config.enabled && extension[hookName];
|
||||||
}).compact().value();
|
}).compact().value();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return a function that calls every callbacks from extensions
|
// Return a function that calls every callbacks with the specified name from all extensions
|
||||||
function createHook(hookName, noLog) {
|
function createHook(hookName, noLog) {
|
||||||
var callbackList = getExtensionCallbackList(hookName);
|
var callbackList = getExtensionCallbackList(hookName);
|
||||||
return function() {
|
return function() {
|
||||||
@ -69,6 +70,9 @@ define([
|
|||||||
extension.config = _.extend({}, extension.defaultConfig, extensionSettings[extension.extensionId]);
|
extension.config = _.extend({}, extension.defaultConfig, extensionSettings[extension.extensionId]);
|
||||||
extension.config.enabled = !extension.isOptional || extension.config.enabled === undefined || extension.config.enabled === true;
|
extension.config.enabled = !extension.isOptional || extension.config.enabled === undefined || extension.config.enabled === true;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Call every onInit callbacks
|
||||||
|
createHook("onInit")();
|
||||||
|
|
||||||
// Load/Save extension config from/to settings
|
// Load/Save extension config from/to settings
|
||||||
extensionMgr["onLoadSettings"] = function() {
|
extensionMgr["onLoadSettings"] = function() {
|
||||||
|
63
js/extensions/userCustom.js
Normal file
63
js/extensions/userCustom.js
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
define([
|
||||||
|
"jquery",
|
||||||
|
"underscore",
|
||||||
|
"utils",
|
||||||
|
"classes/Extension",
|
||||||
|
"fileSystem",
|
||||||
|
"settings",
|
||||||
|
"text!html/userCustomSettingsBlock.html",
|
||||||
|
], function($, _, utils, Extension, fileSystem, settings, userCustomSettingsBlockHTML) {
|
||||||
|
|
||||||
|
var userCustom = new Extension("userCustom", "UserCustom extension", true);
|
||||||
|
userCustom.settingsBlock = userCustomSettingsBlockHTML;
|
||||||
|
userCustom.defaultConfig = {
|
||||||
|
code: "",
|
||||||
|
};
|
||||||
|
|
||||||
|
var fileMgr = undefined;
|
||||||
|
userCustom.onFileMgrCreated = function(fileMgrParameter) {
|
||||||
|
fileMgr = fileMgrParameter;
|
||||||
|
};
|
||||||
|
|
||||||
|
var synchronizer = undefined;
|
||||||
|
userCustom.onSynchronizerCreated = function(synchronizerParameter) {
|
||||||
|
synchronizer = synchronizerParameter;
|
||||||
|
};
|
||||||
|
|
||||||
|
var publisher = undefined;
|
||||||
|
userCustom.onPublisherCreated = function(publisherParameter) {
|
||||||
|
publisher = publisherParameter;
|
||||||
|
};
|
||||||
|
|
||||||
|
var extensionMgr = undefined;
|
||||||
|
userCustom.onExtensionMgrCreated = function(extensionMgrParameter) {
|
||||||
|
extensionMgr = extensionMgrParameter;
|
||||||
|
};
|
||||||
|
|
||||||
|
userCustom.onLoadSettings = function() {
|
||||||
|
utils.setInputValue("#textarea-usercustom-code", userCustom.config.code);
|
||||||
|
};
|
||||||
|
|
||||||
|
userCustom.onSaveSettings = function(newConfig, event) {
|
||||||
|
newConfig.code = utils.getInputValue("#textarea-usercustom-code");
|
||||||
|
try {
|
||||||
|
eval(newConfig.code);
|
||||||
|
}
|
||||||
|
catch(e) {
|
||||||
|
extensionMgr.onError(e);
|
||||||
|
// Mark the textarea as error
|
||||||
|
utils.getInputTextValue("#textarea-usercustom-code", event, /^$/);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
userCustom.onInit = function() {
|
||||||
|
try {
|
||||||
|
eval(userCustom.config.code);
|
||||||
|
}
|
||||||
|
catch(e) {
|
||||||
|
console.error(e);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
return userCustom;
|
||||||
|
});
|
@ -7,7 +7,7 @@ Available variables:
|
|||||||
<li><b>publishAttributes</b>: attributes of the publish location
|
<li><b>publishAttributes</b>: attributes of the publish location
|
||||||
(undefined if not publishing)</li>
|
(undefined if not publishing)</li>
|
||||||
</ul>
|
</ul>
|
||||||
Examples:
|
<b>Examples:</b>
|
||||||
<br />
|
<br />
|
||||||
<title><%= documentTitle %></title>
|
<title><%= documentTitle %></title>
|
||||||
<br />
|
<br />
|
||||||
|
16
js/html/settingsUserCustomExtensionTooltip.html
Normal file
16
js/html/settingsUserCustomExtensionTooltip.html
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
Extension variable name:
|
||||||
|
<b>userCustom</b>
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
<b>Example:</b>
|
||||||
|
<br />
|
||||||
|
userCustom.onPreviewFinished = function() {
|
||||||
|
<br />
|
||||||
|
extensionMgr.onMessage("Finished!");
|
||||||
|
<br />
|
||||||
|
};
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
<a target="_blank"
|
||||||
|
href="https://github.com/benweet/stackedit/blob/master/doc/developer-guide.md#architecture">More
|
||||||
|
info</a>
|
12
js/html/userCustomSettingsBlock.html
Normal file
12
js/html/userCustomSettingsBlock.html
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<p>Allows users to implement their own extension.</p>
|
||||||
|
<div class="form-horizontal">
|
||||||
|
<div class="control-group">
|
||||||
|
<label class="control-label" for="textarea-usercustom-code">JavaScript code
|
||||||
|
<a href="#" class="tooltip-usercustom-extension">(?)</a>
|
||||||
|
</label>
|
||||||
|
<div class="controls">
|
||||||
|
<textarea id="textarea-usercustom-code"></textarea>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<span class="help-block pull-right"><a target="_blank" href="https://github.com/benweet/stackedit/blob/master/doc/developer-guide.md#architecture">More info</a></span>
|
0
run_deploy
Normal file → Executable file
0
run_deploy
Normal file → Executable file
Loading…
Reference in New Issue
Block a user