156 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			156 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 'use strict';
 | |
| 
 | |
| var obsidian = require('obsidian');
 | |
| 
 | |
| /*! *****************************************************************************
 | |
| Copyright (c) Microsoft Corporation.
 | |
| 
 | |
| Permission to use, copy, modify, and/or distribute this software for any
 | |
| purpose with or without fee is hereby granted.
 | |
| 
 | |
| THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
 | |
| REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
 | |
| AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
 | |
| INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
 | |
| LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
 | |
| OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 | |
| PERFORMANCE OF THIS SOFTWARE.
 | |
| ***************************************************************************** */
 | |
| /* global Reflect, Promise */
 | |
| 
 | |
| var extendStatics = function(d, b) {
 | |
|     extendStatics = Object.setPrototypeOf ||
 | |
|         ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
 | |
|         function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
 | |
|     return extendStatics(d, b);
 | |
| };
 | |
| 
 | |
| function __extends(d, b) {
 | |
|     extendStatics(d, b);
 | |
|     function __() { this.constructor = d; }
 | |
|     d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
 | |
| }
 | |
| 
 | |
| var WikilinksToMdlinks = /** @class */ (function (_super) {
 | |
|     __extends(WikilinksToMdlinks, _super);
 | |
|     function WikilinksToMdlinks() {
 | |
|         return _super !== null && _super.apply(this, arguments) || this;
 | |
|     }
 | |
|     WikilinksToMdlinks.prototype.onload = function () {
 | |
|         var _this = this;
 | |
|         console.log('loading wikilinks-to-mdlinks plugin...');
 | |
|         this.addCommand({
 | |
|             id: "toggle-wiki-md-links",
 | |
|             name: "Toggle selected wikilink to markdown link and vice versa",
 | |
|             checkCallback: function (checking) {
 | |
|                 var currentView = _this.app.workspace.getActiveLeafOfViewType(obsidian.MarkdownView);
 | |
|                 if ((currentView == null) || (currentView.getMode() !== 'source')) {
 | |
|                     return false;
 | |
|                 }
 | |
|                 if (!checking) {
 | |
|                     _this.toggleLink();
 | |
|                 }
 | |
|                 return true;
 | |
|             },
 | |
|             hotkeys: [{
 | |
|                     modifiers: ["Mod", "Shift"],
 | |
|                     key: "L"
 | |
|                 }]
 | |
|         });
 | |
|     };
 | |
|     WikilinksToMdlinks.prototype.onunload = function () {
 | |
|         console.log('unloading wikilinks-to-mdlinks plugin');
 | |
|     };
 | |
|     WikilinksToMdlinks.prototype.toggleLink = function () {
 | |
|         var currentView = this.app.workspace.getActiveLeafOfViewType(obsidian.MarkdownView);
 | |
|         var editor = currentView.sourceMode.cmEditor;
 | |
|         var cursor = editor.getCursor();
 | |
|         var line = editor.getDoc().getLine(cursor.line);
 | |
|         var regexHasExtension = /^([^\\]*)\.(\w+)$/;
 | |
|         var regexWiki = /\[\[([^\]]+)\]\]/;
 | |
|         var regexParenthesis = /\((.*?)\)/;
 | |
|         var regexWikiGlobal = /\[\[([^\]]*)\]\]/g;
 | |
|         var regexMdGlobal = /\[([^\]]*)\]\(([^\(]*)\)/g;
 | |
|         var wikiMatches = line.match(regexWikiGlobal);
 | |
|         var mdMatches = line.match(regexMdGlobal);
 | |
|         var ifFoundMatch = false;
 | |
|         // If there are wikiMatches find if the cursor is inside the selected text
 | |
|         var i = 0;
 | |
|         if (wikiMatches) {
 | |
|             for (var _i = 0, wikiMatches_1 = wikiMatches; _i < wikiMatches_1.length; _i++) {
 | |
|                 var item = wikiMatches_1[_i];
 | |
|                 var temp = line.slice(i, line.length);
 | |
|                 var index = i + temp.indexOf(item);
 | |
|                 var indexEnd = index + item.length;
 | |
|                 i = indexEnd;
 | |
|                 if ((cursor.ch >= index) && (cursor.ch <= indexEnd)) {
 | |
|                     ifFoundMatch = true;
 | |
|                     var text = item.match(regexWiki)[1];
 | |
|                     // Check if it is a markdown file
 | |
|                     var matches = text.match(regexHasExtension);
 | |
|                     var newText = text;
 | |
|                     if (matches) {
 | |
|                         var filename = matches[1];
 | |
|                         var extension = matches[2];
 | |
|                     }
 | |
|                     else {
 | |
|                         newText = newText + ".md";
 | |
|                     }
 | |
|                     var encodedText = encodeURI(newText);
 | |
|                     var newItem = "[" + text + "](" + encodedText + ")";
 | |
|                     var cursorStart = {
 | |
|                         line: cursor.line,
 | |
|                         ch: index
 | |
|                     };
 | |
|                     var cursorEnd = {
 | |
|                         line: cursor.line,
 | |
|                         ch: indexEnd
 | |
|                     };
 | |
|                     editor.replaceRange(newItem, cursorStart, cursorEnd);
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|         i = 0;
 | |
|         if (ifFoundMatch == false) {
 | |
|             if (mdMatches) {
 | |
|                 for (var _a = 0, mdMatches_1 = mdMatches; _a < mdMatches_1.length; _a++) {
 | |
|                     var item = mdMatches_1[_a];
 | |
|                     var temp = line.slice(i, line.length);
 | |
|                     var index = i + temp.indexOf(item);
 | |
|                     var indexEnd = index + item.length;
 | |
|                     i = indexEnd;
 | |
|                     if ((cursor.ch >= index) && (cursor.ch <= indexEnd)) {
 | |
|                         ifFoundMatch = true;
 | |
|                         var text = item.match(regexParenthesis)[1];
 | |
|                         text = decodeURI(text);
 | |
|                         // Check if it is a markdown file
 | |
|                         var matches = text.match(regexHasExtension);
 | |
|                         if (matches) {
 | |
|                             var filename = matches[1];
 | |
|                             var extension = matches[2];
 | |
|                             if (extension == 'md') {
 | |
|                                 text = filename;
 | |
|                             }
 | |
|                         }
 | |
|                         var newItem = "[[" + text + "]]";
 | |
|                         var cursorStart = {
 | |
|                             line: cursor.line,
 | |
|                             ch: index
 | |
|                         };
 | |
|                         var cursorEnd = {
 | |
|                             line: cursor.line,
 | |
|                             ch: indexEnd
 | |
|                         };
 | |
|                         editor.replaceRange(newItem, cursorStart, cursorEnd);
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|     };
 | |
|     return WikilinksToMdlinks;
 | |
| }(obsidian.Plugin));
 | |
| 
 | |
| module.exports = WikilinksToMdlinks;
 | |
| 
 | |
| 
 | |
| /* nosourcemap */ |