約 4,418,360 件
https://w.atwiki.jp/hirasawa2ch/pages/15.html
[部分編集] 歴代メンバーの公式サイト・Blog、およびTwitterのアドレスです。 [部分編集] 平沢 進 平沢進 Susumu Hirasawa (P-MODEL) Official site NO ROOM - The official site of Susumu Hirasawa (P-MODEL)(ウェイバックマシン) Susumu Hirasawa (hirasawa) on Twitter 平沢進・公式サイト(@Hirasawa_Info) on Twitter(スタッフ) 平沢進・核P-MODELライブ公式(@Hirasawa_Live) on Twitter(スタッフ) susumuhirasawa(@susumuhirasawa) - Instagram hirasawasusumu - YouTube 田中 靖美 1983年に脱退後、音楽活動から身を引き、アジア・アフリカの物品を取り扱う店「ウィージャ」を開いている。 アジアの布・雑貨の店 ウィージャ ウィージャ(ouijashop) on Twitter 田井中 貞利 1984年に脱退後「田井中貞利 Part2」として1987年に再加入。その後、1990年に行われたライブ・イベント「ERROR FORCE」を最後に音楽活動から身を引き、1999年にフィギュア屋「からくり屋」を開いていたが2000年に閉店。その後しばらく消息不明であったが、一般人として生活している。 からくり屋(ウェイバックマシン) 秋山 勝彦 1980年に脱退後、1989年から1998年までバンドグループ「HERE is EDEN」として活動。1991年には解凍P-MODELに加入。現在は「after the rain」としてソロ活動を行なっている。 秋山勝彦の宅録日記(ウェイバックマシン) k.akiyama (kakiyam00970758) on Twitter 菊池 達也(佐久間達也) 1984年に脱退後、レコードショップを経営していた。2013年には平沢の兄が経営する「GAZIO」のオープニングイベントに来店。 COLOUR FIELD INCORPORATED 三浦 俊一 1985年に脱退後、「有頂天」加入を経て、現在は中野テルヲや福間創が所属するインディーズ・レーベル「Beat Surfurs」社長。 miura shunichi (miurashunichi) on Twitter ビートサーファーズ(三浦主催の中野、福間マネジメント会社) ビートサーファーズ(beatsurfersinc) on Twitter(スタッフ) miura_shunichi's_homepage(2002年~2008年アーカイブ。リンク先へ移動後、閲覧したい日付を選択してください。) 横川 理彦 1985年に脱退後、ソロ活動の他、小西健司らと共に「4-D mode1」として活動している。 横川旅日記 荒木 康弘 1987年に脱退後、「恒松正敏GROUP」の1人として活動中。2012年には平沢ソロライブ「PHONON2555」にサポートメンバーとして参加。 なし 高橋 芳一 1987年に脱退後、現在は中野テルヲのサポートをしている。 Takahashi Yoshikazu(UTS_takahashi_y) on Twitter Under Techno System(1999年アーカイブ) YouTube公式チャンネル 中野 照夫(現・テルヲ) 1988年にP-MODEL"凍結"後、ケラらと「LONG VACATION」を活動。現在はソロ活動を行なっている。 中野テルヲWeb 中野テルヲ(teruonakano) on Twitter 中野テルヲ配信局 (PILOTRUN) on Twitter(スタッフ) 中野テルヲWeb(2000年~2009年アーカイブ) 公式facebook YouTube公式チャンネル ことぶき光 1988年にP-MODEL"凍結"後、サポートメンバーとしてソロライブに参加。1991年には解凍P-MODELに再加入。現在はソロ活動の他、「プノンペンモデル」として活動中。 kotobuki hikaru => ことぶき光 ことぶき光 (kotobukirururu) on Twitter Kotobuki hikaru/ことぶき光(2002年~2008年アーカイブ) 藤井 ヤスチカ 1993年にP-MODEL"待機"後、元々所属していた「THE GROOVERS」に戻る。 GROOVEYARD(THE GROOVERS) 小西 健司 2000年にP-MODEL"培養"後、横川理彦らと「4-D mode1」として活動している。 4-D mode1 OFFICIAL WEB SITE 4-D mode1(4_D_mode_1) on Twitter(スタッフ) GenzyInLeipzig(Genzy) on Twitter(ドイツ語) T.K.M.F-Genzy(TKMFGenzy) on Twitter(日本語) Alternative IronBeatManifesto Daily cooshin(2001年~2003年ブログアーカイブ) 零四式空心日誌(2004年~2005年ブログアーカイブ) Tagebuch über Mutter Zeit(2005年~2007年ブログアーカイブ) Tagebuch über Mutter Zeit von zweitausendundacht(2008年~) 上領 亘 1997年に脱退後、ソロ活動の他、プロデュースを行なっている。 Wataru Kamiryo Official Homepage(1996~1997年アーカイブ) WATARU KAMIRYO(1999~2003年アーカイブ。リンク先に移動後、閲覧したい日付を選択してください。) 福間 創 2000年にP-MODEL"培養"後、ソロ活動「Soyuz Project」として活動中。 soyuz web 福間創のセクシー・シンセサイザー 福間創/HajimeFukuma (Hajime1110) on Twitter フクマニッキ(2004年~2009年アーカイブ) SITE SYSTEM.1(1998年~1999年アーカイブ) YouTube公式チャンネル
https://w.atwiki.jp/vertex/pages/5.html
更新履歴 @wikiのwikiモードでは #recent(数字) と入力することで、wikiのページ更新履歴を表示することができます。 詳しくはこちらをご覧ください。 =>http //atwiki.jp/guide/17_117_ja.html たとえば、#recent(20)と入力すると以下のように表示されます。 取得中です。
https://w.atwiki.jp/oblivion1/pages/60.html
原文 Oblivion/新しいHair Meshの作成 This tutorial is intended as an starter aid to those wanting to model Oblivion hair meshes. It does not claim any expertise - I have mostly worked with two existing hair meshes - cropped (style07), and Mohican (ElfMohawk). It relied on key info provided by BetterBodies forum moders (particularly Corwyn). 基本的なhair meshの生成 Blenderによってエクスポートされる既存の20.0.0.4.メッシュを使うことは、可能かもしれません。しかし、それらは重要なデータが不足します: NiStringExtraData - a reference to an insertion point "Bip01 Head" Tangent Space data Vertex coloring data (not supported by the OBJ format, Blender, or fully by Nifskope) NiTexturingProperty - its not clear to me what this is for cause all the switches are off 私は既存のhair meshを使いました。meshの選択は、重要になります(後ほど)。 Create your hair mesh (I used theirs as starters). To create a Bald mesh just dump a small rendered cube inside the original mesh, and delete it (maybe you could get away with no mesh at all). Export as a OBJ file. Load the Bethesda hair NIF into Nifskope and import your OBJ file. Save under a new file name. Your mesh should then be picked up by TES. It will render, but not change color or shape. If you want your hair to change shape, you must provide (renamed) egm and tri files. These contain hair animation data. Naturally the results of the shape change can look like a punks tea party, if they work at all. If you want the hair to change color you must activate vertex coloring; and that s when the trouble starts. It appears that only one mesh/texture can be imported from the OBJ file. Any other meshes in the file will be merged into one. Of cause, this may be a flaw in my OBJ exporter - I don t know. You can put in other items other than hair. However given the restriction on submeshes/extra textures, and the lack of bone support (I found that my particular addon bits did not move with correcly with changes in head geometry) this is an NPC only option (I ve only tried this in the TES, not in the game). It was better in Morrowind - so much for me doing spectacles for my Player. Setup in TES - add the mesh to the hair style list options (Make it playable), and then add the style to the race menu options. Run the game, activate console, type in ShowRaceMenu, select the hair mesh, exit to main chargen "Do you want to be a...?" screen, activate save/load screen, save game, reload game, and use the new haircut. How to color the hair workarounds Hair coloring depends on the use of (up to) 4 (implied) texture maps AND vertex coloring. Vertex coloring is a way of coloring a mesh without a texture by interpolating between vertices. The cropped mesh uses what may be default settings - 255 for each node. The mohawk mesh is a complex folded mesh that uses various color settings - possibly for special effect. Blender dose not support the vertex color array needed. Yes it has a vertex coloring facility, but it don t work here - either cause the OBJ format don t use it, or cause the NIF importer/exporter don t. My tests suggest both. That s why you have to chose the correct Bethesda hair mesh NIF to alter. Import your OBJ into the NIF Activate vertex coloring - its a flag in the trishape block at the end of the NIF. Save your NIF - and get a warning message and a totally corrupt NIF The problem is that the number of nodes in the mesh must equal the number of entries in the original (unchanged) vertex array. You will have to either cut out vertices, or add a dummy mesh large enough to supply the extra vertices - NifSkope and the game don t seem to care where they come from, or that there is more than one mesh in the hair (extra materials could be another matter) Re-save the new NIF. If you cannot save the NIF correctly (warning message by NifSkope about invalid array size), it is cause the NIF has degraded (I presume that there has been info loss somewhere and it has become corrupt). Load in the original Bethesda NIF and reload the OBJ , reset the color flag, and try again. It will then save ok (well it does for me). Having done that your mesh should display in the game ok, if it uses the mohawk (gray.dds) texture. If it uses the cropped texture you could be in big trouble. The cropped (short.dds) texture complex contains gaps and transparencies that can show up in the mesh - badly - what shows up differs between (my editor), TES, and the Game. Increasing mesh density along the X axis (may have) removed the problem from my original mesh (I needed a mesh 50% thinner than my original). Trying to remove the problem from the original was pointless - I even duplicated the mesh, shrank it inside the original - no effect, even when the texture was rotated 180 - so it looks like meshes inside meshes are not rendered. The solution was to use the gray.dds map (repositioned), and apply a 90% transparency - the AlphaProperty transparency flags are already pre set in the NIF (and to more than the mere basic 237 needed), so just alter the alpha value. Its not as good as the correct texturing, but adequate. Try 75% transparency for very dense (rendered) textures. Ambient lighting conditions also have an effect.
https://w.atwiki.jp/opengles/pages/28.html
Shaders support texturing using at least MAX_VERTEX_TEXTURE_IMAGE_UNITS images for vertex shaders and at least MAX_TEXTURE_IMAGE_UNITS images for fragment shaders. void ActiveTexture(enum texture); // texture [TEXTURE0..TEXTUREi] where i = MAX_COMBINED_TEXTURE_IMAGE_UNITS-1 Texture Image Specification [3.7.1] void TexImage2D(enum target, int level, int internalformat, sizei width, sizei height, int border, enum format, enum type, void *data); // target TEXTURE_2D, TEXTURE_CUBE_MAP_POSITIVE_{X,Y,Z}, TEXTURE_CUBE_MAP_NEGATIVE_{X,Y,Z} // internalformat ALPHA, LUMINANCE, LUMINANCE_ALPHA, RGB, RGBA // format ALPHA, RGB, RGBA, LUMINANCE, LUMINANCE_ALPHA // type UNSIGNED_BYTE, UNSIGNED_SHORT_5_6_5, UNSIGNED_SHORT_4_4_4_4, UNSIGNED_SHORT_5_5_5_1 Conversion from RGBA pixel components to internal texture components Base Internal Format RGBA Internal Components ALPHA A A LUMINANCE R L LUMINANCE_ALPHA R, A L, A RGB R, G, B R, G, B RGBA R, G, B, A R, G, B, A Alt. Texture Image Specification Commands [3.7.2] Texture images may also be specified using image data taken directly from the framebuffer, and rectangular subregions of existing texture images may be respecified. void CopyTexImage2D(enum target, int level, enum internalformat, int x, int y, sizei width, sizei height, int border); // target TEXTURE_2D, TEXTURE_CUBE_MAP_POSITIVE_{X, Y, Z}, TEXTURE_CUBE_MAP_NEGATIVE_{X, Y, Z} // internalformat See TexImage2D void TexSubImage2D(enum target, int level, int xoffset, int yoffset, sizei width, sizei height, enum format, enum type, void *data); // target TEXTURE_CUBE_MAP_POSITIVE_{X, Y, Z}, TEXTURE_CUBE_MAP_NEGATIVE_{X, Y, Z} // format and type See TexImage2D void CopyTexSubImage2D(enum target, int level, int xoffset, int yoffset, int x, int y, sizei width, sizei height); format and type See TexImage2D Compressed Texture Images [3.7.3] void CompressedTexImage2D(enum target, int level, enum internalformat, sizei width, sizei height, int border, sizei imageSize, void *data); // target and internalformat See TexImage2D void CompressedTexSubImage2D(enum target, int level, int xoffset, int yoffset, sizei width, sizei height, enum format, sizei imageSize, void *data); // target and internalformat See TexImage2D Texture Parameters [3.7.4] void TexParameter{if}(enum target, enum pname, T param); void TexParameter{if}v(enum target, enum pname, T params); // target TEXTURE_2D, TEXTURE_CUBE_MAP // pname TEXTURE_WRAP_{S, T}, TEXTURE_{MIN, MAG}_FILTER Manual Mipmap Generation [3.7.11] void GenerateMipmap(enum target); // target TEXTURE_2D, TEXTURE_CUBE_MAP Texture Objects [3.7.13] void BindTexture(enum target, uint texture); void DeleteTextures(sizei n, uint *textures); void GenTextures(sizei n, uint *textures); Enumerated Queries [6.1.3] void GetTexParameter{if}v(enum target, enum value, T data); // target TEXTURE_2D, TEXTURE_CUBE_MAP // value TEXTURE_WRAP_{S, T}, TEXTURE_{MIN, MAG}_FILTER Texture Queries [6.1.4] boolean IsTexture(uint texture);
https://w.atwiki.jp/vertex/pages/6.html
アーカイブ @wikiのwikiモードでは #archive_log() と入力することで、特定のウェブページを保存しておくことができます。 詳しくはこちらをご覧ください。 =>http //atwiki.jp/guide/25_171_ja.html たとえば、#archive_log()と入力すると以下のように表示されます。 保存したいURLとサイト名を入力して"アーカイブログ"をクリックしてみよう サイト名 URL
https://w.atwiki.jp/karaokehirap/pages/54.html
JOYSOUND P-MODEL 107曲(202001現在) 曲名 あ 青十字 ASHURA CLOCK Astro Notes ATOM-SIBERIA ANOTHER GAME Step 1 Another Day AFFIRMATION HOURGLASS 偉大なる頭脳 いまわし電話 ENN Waste Cabaret Welcome うわばみ 衛星ALONE ECHOES ENOLA Ancient Sounds おやすみDOG HOLLAND ELEMENT オルガン山にて OH MAMA! オール か 回収船 KAMEARI POP COLORS KARKADOR Cluster GRID 子供たちどうも GOES ON GHOST さ サイボーグ 残骸の船 saksit サンシャイン・シティー サンパリーツ Chevron 時間等曲率漏斗館へようこそ ジャングルベッドII JULIA BIRD Coelacanth STONE AGE! Spiritus SPEED TUBE Zebra 1778―1985 ソフィスティケイテッド Solid air ソリトン Zombi た Tide DUSToidよ歩行は快適か? ダンス素凡夫 2D OR NOT 2D different≠another Drums な 七節男 のこりギリギリ NO ROOM は BIKE PIPER はじまりの日 2013/09決定曲 2014/11/06配信 BA-DA-DHA Perspective Perspective II PERSONAL PULSE ハーモニウム 美術館で会った人だろ VISTA Biiig Eye Big Foot HIDDEN PROTOCOL (release 2) PSYCHOID FUNE Black in White フ・ル・ヘッ・ヘッ・ヘッ ブループリント FLOOR Heaven Heaven 2000 ヘルス・エンジェル BOGY 2013/09決定曲 2014/11/06配信 Homo Gestalt ホワイト・シガレット ま Mind Scape MOUTH TO MOUTH 3/4 (March 4th) ミサイル Mirror Image Moon Plant-II メビウスの帯 モノクローム・スクリーン MOMO色トリック や 夢見る力に 幼形成熟BOX ら LAB=01 LICORICE LEAF Rehash LEAK LOOPING OPPOSITION ルームランナー LAYER-GREEN〈ver.1.05 Gold〉 列車 Rocket Shoot Rocket Shoot II 論理空軍 ローレシア わ WIRE SELF
https://w.atwiki.jp/vertex/pages/7.html
動画(youtube) @wikiのwikiモードでは #video(動画のURL) と入力することで、動画を貼り付けることが出来ます。 詳しくはこちらをご覧ください。 =>http //atwiki.jp/guide/17_209_ja.html また動画のURLはYoutubeのURLをご利用ください。 =>http //www.youtube.com/ たとえば、#video(http //youtube.com/watch?v=kTV1CcS53JQ)と入力すると以下のように表示されます。
https://w.atwiki.jp/taziro/pages/36.html
あなたの好きなようにエフェクトを修正することができます。法線マップ、ライティングアルゴリズムなどを追加して下さい。 エフェクトファイルに、最初にこれから使用する変数を宣言します。 // These are required by the Animation libraryfloat4x4 MatrixPalette[56];float4x4 World; // These are notfloat4x4 View;float4x4 Projection;texture BasicTexture; // Stores sampler state info for the texturesampler TextureSampler = sampler_state{ Texture = (BasicTexture);}; MatrixPalette についての説明 頂点シェーダの作成 エフェクトの頂点シェーダを作成します。最初に XNA から頂点シェーダに渡す構造体を宣言します。 // This is passed into our vertex shader from Xnastruct VS_INPUT{ // This is the position of the vertex in the model filefloat4 position POSITION; // The vertex normalfloat3 normal NORMAL0;// This is the texture coordinate for the vertex in the model filefloat2 texcoord TEXCOORD0;// These are the indices (4 of them) that index the bones that affect// this vertex. The indices refer to the MatrixPalette.half4 indices BLENDINDICES0;// These are the weights (4 of them) that determine how much each bone// affects this vertex.float4 weights BLENDWEIGHT0;}; 次に頂点シェーダからハードウェアに渡す構造体を作成して下さい。 // This is passed out from our vertex shader once we have processed the inputstruct VS_OUTPUT{ // The final position of the vertex in world spacefloat4 position POSITION;// The texture coordinate associated with the vertexfloat2 texcoord TEXCOORD0;}; 後でモデルのボーンによって座標変換させる頂点位置を保存する構造体を作成します。 // This is the output from our skinning methodstruct SKIN_OUTPUT{ float4 position; float4 normal;}; 次にボーンによって頂点位置を座標変換するメソッドを作成して下さい。 // This method takes in a vertex and applies the bone transforms to it.SKIN_OUTPUT Skin4( const VS_INPUT input){ SKIN_OUTPUT output = (SKIN_OUTPUT)0; // Since the weights need to add up to one, store 1.0 - (sum of the weights) float lastWeight = 1.0; float weight = 0; // Apply the transforms for the first 3 weights for (int i = 0; i 3; ++i) { weight = input.weights[i]; lastWeight -= weight; output.position += mul( input.position, MatrixPalette[input.indices[i]]) * weight; output.normal += mul( input.normal, MatrixPalette[input.indices[i]]) * weight; } // Apply the transform for the last weight output.position += mul( input.position, MatrixPalette[input.indices[3]])*lastWeight; output.normal += mul( input.normal, MatrixPalette[input.indices[3]])*lastWeight; return output;}; 最後に頂点シェーダメソッドを作成することができます。 void TransformVertex (in VS_INPUT input, out VS_OUTPUT output){ // Calculate the skinned position SKIN_OUTPUT skin = Skin4(input); // This is the final position of the vertex, and where it will be drawn on the screen float4x4 WorldViewProjection = mul(World,mul(View,Projection)); output.position = mul(skin.position, WorldViewProjection); // This is not used by is included to demonstrate how to get the normal in world space float4 transformedNormal = mul(skin.normal, WorldViewProjection); output.texcoord = input.texcoord;} ピクセルシェーダの作成 頂点シェーダと同じように、新しい構造体を宣言する必要があります。最初にピクセルシェーダからハードウェアに渡す構造体(頂点シェーダによって処理された後に生成されます)を宣言します。 // This is passed into our pixel shaderstruct PS_INPUT{ float2 texcoord TEXCOORD0;}; ピクセルシェーダから画面スクリーンに渡す構造体を宣言します。 // This is the final color rendered on the screenstruct PS_OUTPUT{ float4 color COLOR;}; ピクセルシェーダはシンプルに特別なライティング処理は行わないようにしています。 void TransformPixel (in PS_INPUT input, out PS_OUTPUT output){ output.color = tex2D(TextureSampler,input.texcoord);} 最後にテクニックを作成する必要があります。これはエフェクト(今回のケースでは適用されません)で使用されるレンダリングステートの情報を宣言し、頂点シェーダとピクセルシェーダの機能が使われます。 technique TransformTechnique{ pass P0 { VertexShader = compile vs_2_0 TransformVertex(); PixelShader = compile ps_2_0 TransformPixel(); }}
https://w.atwiki.jp/facetrackingar/pages/11.html
Instruction for importing models 日本語解説(JP) Using Model From Vroid Hub(Recommended) Access the Vroid Hub and use its API to import the model. How to 1,In the main menu, select "Using Model from Vroid Hub" 2,the Vroid Hub login screen will come up automatically, log in and select the model you want to use. Directly into iphone s storage This is a way to transfer models directly to your iPhone s storage. You can transfer models from Itune on your Mac PC or Windows PC. How to 1,Connect PC and iPhone with Lightning Cable. 2,Select iPhone from Mac or iTunes and select the File tab. 3,Drag and drop the VRM file into "Character Recorder AR". 4,In the main menu,select "Using a local VRM model". Download model file from external URL(from like GoogleDrive) Transfer the model from URL of the file you have uploaded to online storage. Be sure to follow the model s terms of service and make sure that the URL is not leaked to the outside. How to 1,Upload a VRM file to online storage(Google Drive is recommended) 2,Click the share button of the link in the file and make it available to "everyone who knows the link". 3,In the main menu, select "Download from URL". 4,Paste URL retreved in 2 to InputField and click "Download".if you click "Download and Save",downloaded file will store in your iphones Storage. 5,Stop link share in 2.
https://w.atwiki.jp/takumi-memo/pages/56.html
Overview of the Tutorial このチュートリアルは、特定のコンテントのURLを書き直すためのConfluence Autoconvertの拡張をどのようにするかについて触れる。 次のコンポーネントを構成するプラグインを作成する。 A JavaScript file providing an Autoconvert handler. A plugin descriptor (XML file) to enable the plugin module in the Atlassian application. これらのコンポーネントは全て、単一のJAR Fileに含まれている。 Required Knowledge このチュートリアルを完全なものにするために, JavaScript developmentの基礎についての知識が必要である。 How to create an Atlassian plugin project using the Atlassian Plugin SDK. Step 1. Create the Plugin Project まずはプラグインプロジェクトを作成する。 group-id com.example.plugins.tutorial artifact-id autoconvert-dev-docs Step 2. Add Plugin Metadata to the POM プラグインなどの情報に関するmetadataを加えるために、POM fileを編集する。 1.Edit the pom.xml file in the root folder of your plugin. 2.Update the confluence.version element to at least Confluence 4.1 confluence.version 4.1 /confluence.version 3.Add your company or organisation name and your website to the organization element organization name Example Company /name url /url /organization 4.Update the description element description Changes link text on URLs pasted from developer.atlassian.com. /description 5.Save the file. Step 3. Add a Plugin Module to the Plugin Descriptor src/main/resources/atlassian-plugin.xmlのプラグイン・ディスクリプタにプラグイン・モジュールを追加する。 The extension point for Autoconvert is through JavaScript, so you'll need to add a JavaScript Web Resource Module. Your web resource module needs to specify the location of a js file that will create your autoconvert handler. The things that separate it from other Web Resource Modules are ■It should depend on the core autoconvert plugin so that it will always be loaded after it, and will not be loaded if that plugin is missing. ■It should be loaded whenever the editor is loaded, by specifying the editor context. Here's one I prepared earlier ? !-- Add this to your atlassian-plugin.xml -- web-resource key="autoconvert-dev-docs" name="Autoconvert developer.atlassian.com example handler" description Changes link text for URLs pasted from /description resource type="download" name="autoconvert-dev-docs.js" location="js/autoconvert-dev-docs.js"/ !-- This will ensure the resource is loaded after autoconvert, and only if autoconvert is enabled. -- dependency com.atlassian.confluence.plugins.confluence-paste autoconvert-core /dependency !-- Assuming the dependency above is met, this context means that whenever the editor is loaded, so is your autoconvert handler. -- context editor /context /web-resource Step 4. Write the Code for your Autoconvert Handler Create a js directory in src/main/resources and create a new file called autoconvert-dev-docs.js file in that directory. Note that this matches the location in the resource in the XML descriptor. The simplest possible Autoconvert handler looks like this ? (function(){ AJS.toInit(function($){ // Create a handler that does nothing but call the continuation done() var pasteHandler = function(uri, node, done){ done(); }; // Register the handler tinymce.plugins.Autoconvert.autoConvert.addHandler(pasteHandler); }); })(); Focus on the pasteHandler function. The arguments passed to it are ■uri - a uri object as produced by the parseUri library. ■node - a jquery object for the pasted anchor node. ■done - a continuation function for the pasteHandler to call when it's done. Call it with no arguments when you do not want to change the link, or pass it the replacement or modified node when you do have changes. It should always be called exactly once in all possible code paths. The continuation done may seem very complicated now, but it's helpful for asynchronous conversions, which we won't discuss in this tutorial. Take a look at a simple developer.atlassian.com ("DAC") address, such as https //developer.atlassian.com/display/CONFDEV/Confluence+Developer+Documentation. The parseUri library has a demo page at http //stevenlevithan.com/demo/parseuri/js/. If you paste https //developer.atlassian.com/display/CONFDEV/Confluence+Developer+Documentation into its Input field you will see various uri parts available from the uri object. In this case the following parts are important ■host should be "developer.atlassian.com" ■directory should start with "/display/" ■directory should then contain a space key and a page title ■anchor should be blank for now. Converting links to headings is out of scope for this tutorial. You can split the directory part easily enough using the built-in split function. Note that the directory starts with a slash and split will thus give an array of ["", "display", "CONFDEV", "Confluence+Developer+Documentation"] So start by writing a condition for when you want to do a conversion ? if (uri.host == "developer.atlassian.com" directoryParts.length == 4 directoryParts[0] == "" directoryParts[1] == "display" uri.anchor == "") { Then think about what you want to do when we find such a link. The existing URL is fine, you don't need to change anything about the destination, but you do want to change the text of the link. There are a few things you could change it to. You might want to include the spacekey (directoryParts[2]) or an identifier to say that it's on developer.atlassian.com. Eg ? But it's probably nicer most of the time to leave it out and just go with the page name. There's also some tidying we have to do. You need to decode any special characters in the path using the built-in decodeURIComponent function, and that still won't turn plus characters into spaces, so you have to do that too using replace ? var pageName = decodeURIComponent(directoryParts[3]).replace(/\+/g, " "); node.text(pageName); Then we have to tell the controlling code, via the continuation, that we do want to replace the node. ? done(node); Once the conversion is done, all the handlers will be retried, so the handler has to ensure it doesn't just keep matching forever. The easiest way to do that is add an extra check to the condition, that node.text() == uri.source. All together it looks like this ? (function(){ AJS.toInit(function($){ var pasteHandler = function(uri, node, done){ var directoryParts = uri.directory.split('/'), pageName; if (uri.host == "developer.atlassian.com" directoryParts.length == 4 directoryParts[0] == "" directoryParts[1] == "display" uri.anchor == "" node.text() == uri.source) { pageName = decodeURIComponent(directoryParts[3]).replace(/\+/g, " "); node.text(pageName); done(node); } else { done(); } }; tinymce.plugins.Autoconvert.autoConvert.addHandler(pasteHandler); }); })(); Step 5. Build, Install and Run the Plugin Follow these steps to build and install your plugin, so that you can test your code. If you have not already started the application, start it now ■Open a command window and go to the plugin root folder (where the pom.xml is located). ■Run atlas-run (or atlas-debug if you might want to launch the debugger in your IDE). From this point onwards, you can use FastDev to reinstall your plugin behind the scenes as you work. Use the FastDev servlet to trigger the reload 1.Make the changes to your plugin module. 2.Go to your browser and navigate to the FastDev servlet http //localhost 1990/confluence/plugins/servlet/fastdev. 3.Do a hard refresh of the page ■Shift+Reload in most browsers. ■Ctrl+Reload on Windows or in Internet Explorer. ■In Safari 5, you will need to hold down the Shift key while clicking the Reload icon in the Location bar. 4.Go back to step 1. As an alternative to FastDev, you can keep the application running in one command window and use the CLI (command line interface) in another window to dynamically re-install your plugin after each change. 1.Open a new command window and go to the plugin's root folder (where the pom.xml is located). 2.Run atlas-cli to start the CLI. 3.Wait until you see a message, Waiting for commands. 4.Run pi (plugin install) to compile, package and install the plugin. 5.Go back to your browser. The updated plugin will have been installed into the application, and you can test your changes. (You may need to refresh the browser page first.) 6.Make your changes in your IDE. 7.Go back to step 1. The full instructions are in the SDK guide. Step 6. Try it out. Try copying the URL of this page and pasting it into the editor. The text of the link should change so that it looks like Plugin Tutorial - Extending Autoconvert rather than just the URL. Step 7. Play! Write your own extensions. This is about the simplest autoconvert extension possible, but there are more things you can do. Just quickly, here are a few How-to examples Inserting an image If you want to change the link into an image ? var imageUrl = "the url of the image, maybe uri.source, or maybe a modified form of that". done($(' img class="confluence-embedded-image confluence-external-resource" src="' + imageUrl + '" data-image-src="' + imageUrl + '"/ ')[0]); Inserting a macro If you want to change the link into a Confluence macro (must be a 4.0+ style xhtml macro) ? Inserting arbitrary converted wiki content Sometimes the easiest way to write editor format html is to ask Confluence to produce it from wiki markup. ?