差分
このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
| javascript:requirejs [2019/08/22 09:59] – ともやん | javascript:requirejs [2020/08/30 13:05] (現在) – ともやん | ||
|---|---|---|---|
| 行 1: | 行 1: | ||
| < | < | ||
| - | <script src='/ | + | <style> | 
| - |  | + | # | 
| + | # | ||
| + | display: none; | ||
| + | } | ||
| + | </style> | ||
| < | < | ||
| - | jQuery(function($) { | + |  | 
| - | require(['jquery', 'ace'], | + | const $ = jQuery; | 
| - |  | + | const BASE_URL = '/ | 
| - | self.editors = []; | + | let url; | 
| - | const modes = ['html', 'javascript', 'html', 'javascript', 'javascript']; | + | |
| - | let lines = 0; | + |  | 
| + |  | ||
| + | await $.ajax({ | ||
| + | url: BASE_URL + url, | ||
| + | type: 'GET', | ||
| + | dataType: | ||
| + | }).done((data) => { | ||
| + |  | ||
| + | console.log(' | ||
| + | }).fail((jqXHR, textStatus, errorThrown) => { | ||
| + | // | ||
| + | console.log(' | ||
| + |  | ||
| + | }); | ||
| + | |||
| + | url = 'settings.js'; | ||
| + | await $.ajax({ | ||
| + | url: BASE_URL + url, | ||
| + | type: 'GET', | ||
| + | dataType: | ||
| + | }).done((data) => { | ||
| + | //alert('settings.js loaded!'); | ||
| + | console.log(' | ||
| + | }).fail((jqXHR, textStatus, errorThrown) => { | ||
| + | // | ||
| + | console.log('settings.js | ||
| + | console.log(errorThrown); | ||
| + | }); | ||
| + | |||
| + | try { | ||
| + | require([' | ||
| + | } | ||
| + | catch (ex) { | ||
| + | console.log(' | ||
| + | console.log(ex); | ||
| + | } | ||
| + | |||
| + | console.log(' | ||
| + | require([' | ||
| + |  | ||
| + | |||
| + | // RequireJS failback! | ||
| + | if (!!!$ || !!!ace) { | ||
| + | // | ||
| + | console.log(' | ||
| + | console.log(' | ||
|  |  | ||
| - |  | + |  | 
| - | editors.push(ace.edit(' | + |  | 
| - | + | ||
| - | editors[i].setTheme(' | + | |
| - | editors[i].session.setOptions({ | + | |
| - | mode: ' | + | |
| - | tabSize: 2, | + | |
| - | useSoftTabs: | + | |
| - | }); // setOptions | + | |
| - |  | + | |
| - | editors[i].setOptions({maxLines: lines}); | + | |
| - | editors[i].setReadOnly(true); | + | |
| - | } | + | |
|  |  | ||
| - |  | + |  | 
| - |  | + | $('head').append($('< | 
| - | url: '/ | + | {src: '/ | 
| - |  | + |  | 
| - |  | + | } | 
| - |  | + | } | 
| - |  | + | |
| - |  | + | $.fn.regex = function(pattern, fn_a) { | 
| + | var fn = $.fn.attr || $.fn.text; | ||
| + | return this.filter(function() { | ||
| + |  | ||
| }); | }); | ||
| - |  | + | }; | 
| - | lines = editors[3].getSession().getDocument().getLength(); | + | |
| + | self.editors = []; | ||
| + | self.codes = []; | ||
| + | const modes = [ | ||
| + | ' | ||
| + | ]; | ||
| + | |||
| + | function setAceEditorStyle(editor, | ||
| + | let lines = 0; | ||
| + | |||
| + | editor.setTheme(' | ||
| + | editor.session.setOptions({ | ||
| + | mode: ' | ||
| + | tabSize: 2, | ||
| + | useSoftTabs: | ||
| + | }); // setOptions | ||
| + | editor.setValue(editor.getValue().trim(), | ||
| + | |||
| + | lines = editor.getSession().getDocument().getLength(); | ||
| + | editor.setOptions({maxLines: | ||
| + | |||
| + | editor.setReadOnly(true); | ||
| + | } | ||
| + | |||
| + | const $aceEditors = $(' | ||
| + | // | ||
| + | for (let i = 0; i < $aceEditors.length; | ||
| + | editors.push(ace.edit($aceEditors[i].id)); | ||
| + | const mode = !!modes[i] ? modes[i] : ' | ||
| + | console.log(`mode: | ||
| + | |||
| + | setAceEditorStyle(editors[i], | ||
| + | |||
| + | $($aceEditors[i]).fadeIn(' | ||
| + | } | ||
| + | |||
| + | const $aceCodes = $(' | ||
| + | console.log(' | ||
| + | console.dir($aceCodes[0]); | ||
| + | for (let i = 0; i < $aceCodes.length; | ||
| + | codes.push(ace.edit($aceCodes[i])); | ||
| + | |||
| + | setAceEditorStyle(codes[i], | ||
| + | } | ||
| + | |||
| + | $.ajax({ | ||
| + | url: BASE_URL + ' | ||
| + | type: ' | ||
| + | }).done((data) => { | ||
| + |  | ||
| + |  | ||
| editors[3].setOptions({maxLines: | editors[3].setOptions({maxLines: | ||
|  |  | ||
| - |  | + |  | 
| - | $.ajax({ | + | $('# | 
| - | url: '/ | + |  | 
| - | type: ' | + | }).fail((jqXHR, | 
| - |  | + | |
| - | success: function(data) | + | }); | 
| - | require_js_text | + | |
| - | } | + |  | 
| - | }); | + | url: BASE_URL + ' | 
| - | editors[4].setValue(require_js_text, -1); | + | type: ' | 
| + |  | ||
| + | editors[4].setValue(data, -1); | ||
| editors[4].setOptions({maxLines: | editors[4].setOptions({maxLines: | ||
| - |  | + | }).fail((jqXHR, | 
| - | }); // jQuery | + | |
| + | }); | ||
| + |  | ||
| + | })(); // async function end | ||
| </ | </ | ||
| </ | </ | ||
| 行 55: | 行 151: | ||
| 本家: [[https:// | 本家: [[https:// | ||
| ソースコード: | ソースコード: | ||
| + | \\ | ||
| + | 今となっては、[[https:// | ||
| + | 古いブラウザーにも対応しており **require.config** で細かいモジュール設定が可能である。\\ | ||
| ===== 使い方 ===== | ===== 使い方 ===== | ||
| + | **index.html**\\ | ||
| + | <WRAP prewrap 100% # | ||
| + | %%< | ||
| < | < | ||
| - | <p>< | + |  | 
| - | <pre id=" | + |  | 
| - | & | + | <script data-main=" | 
| - | & | + | </head> | 
| - |  | + | <body> | 
| - | <title>My Page</title> | + | <h1>My Sample Page</h1> | 
| - | & | + | </body> | 
| - | & | + | </html>%% | 
| - | & | + | </WRAP> | 
| - | & | + | **scripts/ | 
| - | & | + | <WRAP prewrap 100% #aceeditor1> | 
| - | </html> | + | %%require([' | 
| - | </pre> | + | console.log($('# | 
| - | <br/> | + | self.editor = ace.edit(' | 
| - | < | + | editor.setTheme(' | 
| - | <pre id=" | + | editor.session.setOptions({ | 
| - | require([' | + | mode: ' | 
| - | function($, ace) { | + | tabSize: 2, | 
| - | console.log($('# | + | useSoftTabs: | 
| - | self.editor = ace.edit(' | + | }); | 
| - | editor.setTheme(' | + | });%% | 
| - | editor.session.setOptions({ | + | </WRAP> | 
| - | mode: ' | + | |
| - | tabSize: 2, | + | ==== DokuWiki に埋め込む方法 ==== | 
| - | useSoftTabs: | + | <WRAP prewrap 100% acecode_html> | 
| - | }); | + | < | 
| - | }); | + | < | 
| - | </pre> | + | <script src="/ | 
| + | <script src="/ | ||
| </ | </ | ||
| + | </ | ||
| + | </ | ||
| + | |||
| ===== settings.js を書く方法 ===== | ===== settings.js を書く方法 ===== | ||
| + | **index.html**\\ | ||
| + | <WRAP prewrap 100% # | ||
| + | %%< | ||
| < | < | ||
| - | <p>< | + |  | 
| - | <pre id=" | + | <title>My Page</title> | 
| - | & | + | <script src=" | 
| - | & | + | <script src=" | 
| - | & | + | </head> | 
| - | & | + | <body> | 
| - | & | + | <h1>My Sample Page</h1> | 
| - | & | + | </body> | 
| - | & | + | </html>%% | 
| - | & | + | </WRAP> | 
| - | & | + | **scripts/settings.js**\\ | 
| - | & | + | <html>< | 
| - | </html> | + | <WRAP prewrap 100% #aceeditor3> | 
| - | </pre> | + | </WRAP> | 
| - | <br/> | + | |
| - | <p>< | + | |
| - | <pre id=" | + | |
| - | </pre> | + | |
| - | </ | + | |
| ===== RequireJS のコード ===== | ===== RequireJS のコード ===== | ||
| - | < | + | **require.js**\\ | 
| - | < | + | <WRAP prewrap 100% #aceeditor4> | 
| - | <pre id=" | + | </WRAP> | 
| - | </pre> | + | |
| - | </html> | + | ===== ES6 class を RequireJS で定義する方法 ===== | 
| + | <WRAP prewrap 100% # | ||
| + | %%// 定義方法 | ||
| + | define(' | ||
| + |  | ||
| + | static get CODE_START() { | ||
| + | return '<!--[code-start]-->'; | ||
| + | } | ||
| + | |||
| + | constructor() { | ||
| + | this.MEDIA_AJAX_URL = '/lib/ | ||
| + | } | ||
| + | |||
| + | async getMediaList(ns, | ||
| + | let grep = !!grep_ ? grep_ : ''; | ||
| + | //... | ||
| + | } | ||
| + | }; // class end | ||
| + | }); // define end | ||
| + | |||
| + | // 使い方 | ||
| + | require([' | ||
| + | const dokuWiki = new DokuWiki(); | ||
| + | });%% | ||
| + | </WRAP> | ||
| + | ※**class** を **return** するように記述する。\\ | ||
| ===== 参考文献 ===== | ===== 参考文献 ===== | ||
| 行 119: | 行 248: | ||
| [[https:// | [[https:// | ||
| [[https:// | [[https:// | ||
| - | |||
