【Stellarium】リモートコントロールプラグインWebインターフェイス公式リファレンス日本語訳

# 初めに
無料プラネタリウムソフト[「Stellarium」](https://stellarium.org/)の
リモートコントロールプラグイン Web インターフェイスの公式ドキュメントを日本語訳（ほどんど機械翻訳：Google翻訳及びDeepLを使用）したものです。間違い等あると思いますが、ご理解の上お使いください。

https://stellarium.org/doc/24.0/remoteControlWeb.html

# 概要
RemoteControlプラグインは、デフォルトで、RemoteControl APIを提供するのと同じ統合HTTPサーバーを介してHTMLウェブインターフェースを提供します。data/webrootフォルダにあるすべてのコンテンツが提供されます。api/パスはHTTP API用に予約されているため、フォルダとして使用できないことに注意してください。index.htmlファイルはルートにマッピングされているので、デフォルトのポート設定8090で[http://localhost:8090](http://localhost:8090)。7インチタブレットやその他のタッチデバイス用に若干修正された代替インターフェイス（今のところ主に大きなボタン）は、[http://localhost:8090/tablet7in.html](http://localhost:8090/tablet7in.html)。

インターフェイスにアクセスするには、適度に最新のブラウザが必要です。HTML5とCSS3の一部の機能が使用されています。

インターフェイスは、JavaScript コーディングを容易にするため、jQueryに大きく依存しています。コードはモジュールに構造化されており、依存関係とロード順序を自動的に解決するrequire.jsを使用してロードされます。

# ファイルとディレクトリの構造
ここにはすべてのファイルがリストされているわけではなく、特に重要なファイルのみがリストされていることに注意してください。

* webroot/ - ルートディレクトリ
    * Index.html - デフォルトのインターフェイス。ルート フォルダーにもマップされます
    * style.css - メインのスタイルシート
    * table7in.html - タブレット デバイス用に変更されたインターフェイス
    * style_tablet7in.css - table7in.html の追加スタイルシート
    * translation_files - StelTranslatorを介して渡されるファイルを定義します。翻訳情報を参照してください
    * iframestyle.css - 内部フレーム (風景の説明など) のスタイルを定義します
    * /js/ - インターフェースに必要な JavaScript ファイルが含まれています
        * main.js - これは require.js の構成ファイルです。ui/mainuiをメインモジュールとしてロードします
        * settings.js - Web インターフェイスのいくつかの構成オプションが含まれています
        * translationdata.js - StelTranslatorを通じて翻訳する文字列を含む自動生成ファイル。翻訳情報を参照
        * /api/ - RemoteControl APIへの接続を定義する .js モジュールが含まれています
            * api/remotecontrol.js
            * api/actions.js
            * api/flags.js
            * api/location.js
            * api/properties.js
            * api/scripts.js
            * api/search.js
            * api/time.js
            * api/updatequeue.js
            * api/viewcontrol.js
            * api/viewoption.js
        * /ui/ - /api/ .js モジュールに依存する UI 関連の .js モジュールが含まれています
            * ui/mainui.js
            * ui/action.js
            * ui/conbobox.js
            * ui/jqueryuifixes.js
            * ui/location.js
            * ui/scripts.js
            * ui/search.js
            * ui/time.js
            * ui/viewcontrol.js
            * ui/viewoptions.js
            
# インターフェースの編集
HTML、CSS、および JavaScript (後者は基本的な変更には必要ありません) の知識があれば、インターフェイスをカスタマイズできます。

## 基本拡張
標準の JavaScript を使用する場合、定義済みの CSS "マーカー" クラスを使用することができます。このクラスは要素自体のスタイルを設定しませんが（つまり .css ファイルにエントリがありません）、JavaScript コードを編集せずに HTML 要素に機能を追加することができます。これらのクラスの中には、要素にさらなる属性（通常は HTML5 データ属性）を追加して、その振る舞いをさらにカスタマイズできるものもあります。

## UIコントロールクラス
一部のクラスでは、デスクトップ アプリに期待されるものと同様の UI コントロールを生成できます。これらは、いくつかの変更を加えたjQuery UIを使用します。

## スピナー
HTMLinput要素に追加すると、コントロールが数値スピナー ウィジェットとして設定されます ([jQuery UI](https://api.jqueryui.com/spinner/)を使用: )。次のオプションのパラメータがサポートされています。

* data-min- スピナーの最小値を定義します
* data-max- スピナーの最大値を定義します
* data-step- スピナーの希望のステップ サイズを定義します。デフォルトは 1 です。数値形式とは異なる場合があります。
* data-numberformat- globalize.js 0.1.1 構文を使用して、数値の形式を定義します。
* spinuserinputこの要素は、(ボタンまたは直接キーボード入力によって) 値が変更されるたびにカスタム イベントを発行します。スピナーがどのように作成され処理されるかを示す例:

```html
//-50 から 50 までのスピナーを作成し、常に小数点以下 2 つを表示し、クリックごとに 0.1 ずつ刻みます
<input id = "myspinner"  class = "spinner" data-min= "-50" data-max= "50" data-step= "0.1" data-numberformat= "n2" />
```

```javascript
//JavaScriptでの入力処理
$( "#myspinner" ).on( "spinuserinput" , function (evt,ui) {
    // 新しい値を出力します
    console.log(ui.value);
});
```

## スライダー
HTMLdiv要素に追加すると、コントロールが数値スライダー ウィジェットとして設定されます ([jQuery UI](https://api.jqueryui.com/slider/) を使用)。次のオプションのパラメータがサポートされています。

* data-min- スライダーの最小値を定義します
* data-max- スライダーの最大値を定義します
* data-step- スライダーの希望のステップ サイズを定義します。デフォルトは 1 です。数値形式とは異なる場合があります。
* slideスライダーが移動すると、要素はイベントを発行します。

```html
// -50 から 50 までのスライダーを作成し、ステップサイズは 0.1
<div id = "myslider"  class = "slider" data-min= "-50" data-max= "50" data-step= "0.1" />
```

 ```javascript
//JavaScriptでの入力処理
$( "#myslider" ).on( "スライド" , function (evt,ui) {
    // 新しい値を出力します
    console.log(ui.value);
});
```

## jQueryボタン
HTMLbutton要素に追加すると、それがjQuery UI ボタン​​に変換されます。主にです。

## 選択メニュー
HTMLselect要素に追加すると、そこからjQuery UI selectmenuが作成されます。これにより、単純なポップアップ選択メニュー (QComboBox など) が可能になります。

## 特別行動クラス
これらのクラスにより、Stellarium で定義されたStelProperty 要素およびStelAction要素への自動接続が可能になり、Web インターフェイスの特に簡単な拡張が可能になります。

## stelproperty (StelProperty への接続)
要素をStelPropertyへ直接接続できるようにします。つまり、Stellarium の値が変更されるたびに、変更のソースに関係なく、要素は自動的に更新されます。変更のソースは、メイン GUI、スクリプト、または他のRemoteControl Web インターフェイス インスタンスからも可能です。上記のUI コントロール クラスと組み合わせることで、標準の Stellarium インターフェイス要素を厳密かつ簡単に再作成できます。これは以下に対してサポートされています。

* inputクラスを持つ要素spinner(数値プロパティの場合)使用する<br>
StelPropertyは、標準input属性によって識別されますname。StelPropertyが変更されたときvalueに のプロパティを更新し、イベントに反応してプロパティを更新します。inputspinuserinput
* inputcheckboxタイプ( `<input type="checkbox">`(ブール型プロパティの場合)の要素。使用する<br>
StelPropertyは標準input属性によって識別されますname。checkedプロパティとclickイベントを使用します。
* divクラスを持つ要素slider(数値プロパティの場合)使用する<br>
StelPropertyは、カスタム属性によって識別されますdata-prop。sliderウィジェットのプロパティに接続しますvalue。
* select要素 (オプションのselectmenuクラスもサポート)使用する<br>
StelPropertyは、標準のselect属性によって識別されますname。StelProperty値とoption同じ値を設定します。可能性のリストから 1 つを選択する場合に便利です。value
* span要素、オプションの数値形式による読み取り専用プロパティ表示用使用する<br>
StelPropertyは、カスタム属性によって識別されますdata-prop。値は要素のテキスト内容を使用して表示されます。オプションの属性は、 globalize.js 0.1.1 構文data-numberformatを使用した数値形式に使用されます。
* buttonまたは要素。クリックされたときにStelPropertyを事前定義された値に`input[type="button"]`書き込み専用に設定します。使用する StelProperty は標準属性 で識別され、それに設定する値は属性 で定義されます。namevalue

MilkyWay.intensity StelPropertyのスピナーを設定する例:

```html
<!-- 必要なのはこれだけです。残りは自動的に行われます -->
<input class="spinner stelproperty" name="MilkyWay.intensity" data-min="0" data-max="10" data-step="0.1" data-numberformat="n2"/>
```

index.htmlコードを調べると、さらに多くの例が見つかります。

# stelaction (StelAction への接続)
このクラスが button 要素や type="button" や type="checkbox" の input 要素に追加されると、コントロールは StelAction に接続されます。アクションは name 属性によって識別されます。アクションがブール値のアクションの場合（すなわちStelAction::isCheckableがtrueの場合）、チェックボックスはアクションの現在の状態を表示し、ボタンはアクションが現在trueの場合に割り当てられるアクティブなCSSクラスを取得します。

例:

```html
これはメインの下部ボタン バーの定義方法です -->
<ul class="ui-corner-all ui-widget-content button32list margin-vertical">
      <li><button class="stelaction icon32 btConstellationLines" name="actionShow_Constellation_Lines"></button></li>
      <li><button class="stelaction icon32 btConstellationLabels" name="actionShow_Constellation_Labels"></button></li>
      <li><button class="stelaction icon32 btConstellationArt" name="actionShow_Constellation_Art"></button></li>
      <li><button class="stelaction icon32 btEquatorialGrid" name="actionShow_Equatorial_Grid"></button></li>
      <li><button class="stelaction icon32 btAzimuthalGrid" name="actionShow_Azimuthal_Grid"></button></li>
      <li><button class="stelaction icon32 btGround" name="actionShow_Ground">​​</button></li>
      <li><button class="stelaction icon32 btCardinalPoints" name="actionShow_Cardinal_Points"></button></li>
      <li><button class="stelaction icon32 btAtmosphere" name="actionShow_Atmosphere"></button></li>
      <li><button class="stelaction icon32 btNebula" name="actionShow_Nebulas"></button></li>
      <li><button class="stelaction icon32 btPlanets" name="actionShow_Planets_Labels"></button></li>
      <li><button class="stelaction icon32 btEquatorialMount" name="actionSwitch_Equatorial_Mount"></button></li>
      <li><button class="stelaction icon32 btGotoSelectedObject" name="actionSet_Tracking"></button></li>
      <li><button class="stelaction icon32 btNightView" name="actionShow_Night_Mode"></button></li>
      <li><button class="stelaction icon32 btFullScreen" name="actionSet_Full_Screen_Global"></button></li>
</ul>
 
<!-- これはチェックボックスを設定する方法です -->
<label><input type="checkbox" class="stelaction" name="actionShow_Planets" /><?= tr("Show Solar System object")?></label>
<label><input type="checkbox" class="stelaction" name="actionShow_Planets_Hints" /><?= tr("惑星マーカーを表示")?></label>
<label><input type="checkbox" class="stelaction" name="actionShow_Planets_Orbits" /><?= tr("惑星の軌道を表示")?></label>
```

## stelssc (スクリプトの直接実行)
このクラスは、Stellarium Scripting Engineのコードを直接実行するボタンを定義することができます。button型のbutton要素とinput要素に対応しています。実行するコードは、要素のvalueプロパティの中に格納する必要があります。カスタム属性のdata-useincludes属性が追加されている場合(値は任意)、デフォルトのインクルードフォルダが追加されます。

例：
```html
<!-- ビューを事前定義された角度に移動するいくつかのボタン -->
<button type="button" class="stelssc" value="core.moveToAltAzi(0., 0., 3.)">0°</button>
<button type="button" class="stelssc" value="core.moveToAltAzi(0., 30., 3.)">30°</button>
<button type="button" class="stelssc" value="core.moveToAltAzi(0., 60., 3.)">60°</button>
<button type="button" class="stelssc" value="core.moveToAltAzi(0., 90., 3.)">90°</button>
<button type="button" class="stelssc" value="core.moveToAltAzi(0., 120., 3.)">120°</button>
<button type="button" class="stelssc" value="core.moveToAltAzi(0., 150., 3.)">150°</button>
<button type="button" class="stelssc" value="core.moveToAltAzi(0., 180., 3.)">180°</button>
<button type="button" class="stelssc" value="core.moveToAltAzi(0., 210., 3.)">210°</button>
<button type="button" class="stelssc" value="core.moveToAltAzi(0., 240., 3.)">240°</button>
<button type="button" class="stelssc" value="core.moveToAltAzi(0., 270., 3.)">270°</button>
<button type="button" class="stelssc" value="core.moveToAltAzi(0., 300., 3.)">300°</button>
<button type="button" class="stelssc" value="core.moveToAltAzi(0., 330., 3.)">330°</button>
```

:::note warn
警告
このstelsscアプローチにはいくつかの欠点があるため、必要な場合にのみ使用するようにしてください。
* Web インターフェイスによって提供される他のメソッドよりも、Stellarium の内部で大きなオーバーヘッドが発生します
* Stellarium は ENABLE_SCRIPTING を定義してビルドされている必要があります (デフォルト)
* 別のスクリプトが現在実行中の場合、スクリプトは実行できません。この場合、エラー メッセージが表示されます
    * これには、ユーザーがstelsscボタンをクリックする速度が速すぎることも含まれます
:::

# stelplugin (プラグイン固有のセクション)
CSSクラスstelpluginを使うと、指定したプラグインがStellariumに読み込まれているときだけ表示される特別なHTMLセクションを作ることができます。プラグインが読み込まれていない場合、要素全体とその子要素はDOMから削除されます。このクラスは任意の要素に追加することができます。必要なプラグインはdata-plugin属性で定義され、プラグインIDを設定する必要があります。

オプションのdata-pluginjs属性を使用すると、プラグインがロードされたときにのみロードされる追加のJavaScriptモジュールを定義できます。これは、必要であれば、JSを通して追加の動作を実装するために使用することができます。これらのモジュールは webroot/js/plugins フォルダに置くことをお勧めします。

# ArchaeoLines プラグインのプラグイン パネルを定義する例:
```html
<div id = "vo_archaeolines"  class = "smallblock stelplugin" data-plugin= "ArchaeoLines" data-pluginjs= "plugins/archaeolines" >
  <h3><label><input type= "checkbox"  class = "stelaction valign-middle" name= "actionShow_Archaeo_Lines" /><?= tr( "ArchaeoLines" )?></label></h3>
  <div class = "インラインブロックブロックラベル" >
    <label><input type= "checkbox"  class = "stelaction" name= "actionAL_showEquinoxLine" /><?= tr( "Equinox" )?></label>
    <label><input type= "checkbox"  class = "stelaction" name= "actionAL_showSolsticeLines" /><?= tr( "Solstices" )?></label>
    <label><input type= "checkbox"  class = "stelaction" name= "actionAL_showCrossquartLines" /><?= tr( "Crossquards" )?></label>
    <label><input type= "checkbox"  class = "stelaction" name= "actionAL_showMajorStandstillLines" /><?= tr( "Major Standstill" )?></label>
    <label><input type= "checkbox"  class = "stelaction" name= "actionAL_showMinorStandstillLines" /><?= tr( "Minor Standstill" )?></label>
  </div>
  <div class = "インラインブロックブロックラベル" >
    <label><input type= "checkbox"  class = "stelaction" name= "actionAL_showZenithPassageLine" /><?= tr( "Zenith Passage" )?></label>
    <label><input type= "checkbox"  class = "stelaction" name= "actionAL_showNadirPassageLine" /><?= tr( "Nadir Passage" )?></label>
    <label><input type= "checkbox"  class = "stelaction" name= "actionAL_showSelectedObjectLine" /><?= tr( "Selected Object" )?></label>
    <label><input type= "checkbox"  class = "stelaction" name= "actionAL_showCurrentSunLine" /><?= tr( "Current Sun" )?></label>
    <label><input type= "checkbox"  class = "stelaction" name= "actionAL_showCurrentMoonLine" /><?= tr( "Current Moon" )?></label>
  </div>
  <label class = "display-block"  for = "select_ArchaeoLines_enumShowCurrentPlanet" ><?= tr( "Current Planet:" )?></label>
  <select id = "select_ArchaeoLines_enumShowCurrentPlanet"  class = "selectmenu stelproperty display-block" name= "ArchaeoLines.enumShowCurrentPlanet" >
    <option value= "10" ><?= tr( "None" )?></option>
    <option value= "11" ><?= tr( "Mercury" )?></option>
    <option value= "12" ><?= tr( "Venus" )?></option>
    <option value= "13" ><?= tr( "Mars" )?></option>
    <option value= "14" ><?= tr( "Jupiter" )?></option>
    <option value= "15" ><?= tr( "Saturn" )?></option>
  </選択>
</div>
 
//plugins/archaeolines.js の内容
定義([ "jquery" ],関数($){
        "厳密な使用" ;
 
        //これは、動的にロードされる追加のプラグイン ファイルを使用する方法の単なる例です
        console.log( "こんにちは、これは非同期でロードされたプラグイン JavaScript ファイルです!" );
 
});
```

# 翻訳情報
インターフェイスは、メインプログラムと同様のメソッドを使って翻訳できる。HTMLマークアップの中で翻訳すべき文字列はすべて、擬似PHPスタイルのタグとtr関数の間に書くことで、C++のq_()マクロと同じ効果を得ることができる：

```html
<label>
    <input type= "checkbox"  class = "stelaction" name= "actionShow_Planets" /><?= tr( "Show Solar System object" )?>
</label>
```

webroot/translate_files ファイルにリストされているすべてのファイルが解析され、現在のアプリケーション言語の StelTranslator を使用して、すべての <?= tr("----")?> タグが置き換えられます。

JavaScriptで翻訳された文字列が必要な場合は、api/remotecontrolモジュールのtrメソッドを使用します。新しいJavaScript文字列が追加されるたびに、RemoteControl-update-translationdataを実行する必要があります。これにより、webroot/js/translationdata.jsファイルが現在のすべてのtr()文字列で更新されます。この操作にはPythonがインストールされている必要があります。

メインプログラムと同様に、gettext/xgettextを使ってHTML/JSコードから文字列を抽出することができます。C++のコードと同様に、このためのCMakeターゲットがあります(generate-pot-stellarium-remotecontrol、update-po-stellarium-remotecontrolなど)。

# JavaScriptモジュールリファレンス
すべてのインターフェース・コードはrequire.jsモジュールを使って開発されている。これにより、各モジュールの依存関係を定義することができ、保守性も容易になります。各モジュールは、それ自身の.jsファイルで定義する必要があります。モジュールIDは、拡張子を除いた.jsファイル名に対応します。

要するに、モジュールを定義するには、それをdefine呼び出しでラップし、オプションで依存関係を追加します。基本的な例（より多くの方法はrequire.jsドキュメントを参照）：

```javascript:mywesomemodule.js
//依存関係の ID が最初のパラメータとして配列にリストされます
// 2 番目のパラメータは通常、依存関係の実際のインスタンスをパラメータとして受け取る関数です。
// 配列内の順序と同じです!
define([ "jquery" , "api/remotecontrol" ], function ($,rc) {
    "use strict" ; //各モジュールには厳密モードを使用することをお勧めします
 
    //このモジュールがロードされるとすぐに何かを実行します
    console.log( "私の素晴らしいモジュールがロードされています!" );
 
    //DOM の準備ができたら何かを実行します (モジュールが最初にロードされる間は保証されていないため)。
    $(rc(){
        console.log( "ドキュメントの準備ができました。今すぐ要素にアクセスできます!" );
        // 要素にアクセスして変更する
        $( "#myelement" ).text( "おい、これはすごい" );
    });
 
    //リモートコントロールモジュールのserverDataReceivedイベントに反応します
    $(rc).on( "serverDataReceived" , function (evt,data) {
        console.log( "Stellarium が新しいデータを送信しました!" );
        console.log( "現在の jDay は " + data.time);
    });
 
    // 他のモジュールが呼び出すことができるパブリック メソッドをいくつか提供します
    return{
        myAwesomeMethod: function () {
            console.log( "こんにちは!" );
        }
    };
});
 
//（別のファイル内の）別のモジュールが依存関係としてモジュールを参照し、ロードしてそのメソッドを使用できるようになりました
define([ "jquery" , "mywesomemodule" ], function ($, 素晴らしい) {
 
    awesome.myAwesomeMethod(); //「こんにちは!」を出力します。
});
```

UI モジュールは、API モジュールおよび他の UI モジュールに依存できます。 API モジュールは他の API モジュールに依存することができます。循環依存関係は当然避けるべきです。

# API/remotecontrol
これはメイン API モジュールであり、他の API モジュールへの依存関係はありません。

主な機能は、定期的に（デフォルトでは毎秒）MainServiceのステータス操作をポーリングすることで、ステータスの自動更新を提供することです。このポーリングが成功するたびに、serverDataReceivedカスタム・イベントが、サーバーのJSON応答をデータ・パラメーターとして発行されます。他のAPIモジュールはこのイベントを使用し、興味のあるデータを処理する必要があります。また、StelActionやStelPropertyの変更も追跡し、必要に応じてstelActionsChangedやstelPropertiesChangedを発行します。これはそれぞれapi/actionsモジュールとapi/propertiesモジュールの仕事です。サーバーとの接続が切れた場合（ポーリングがエラーを返した場合）、serverDataErrorイベントが送られます。

postCmdもう 1 つの主な機能は、サーバーにコマンドを送信するために他のモジュールによって使用される AJAX POST 呼び出しの単純なラッパーであるメソッドを提供することです。 JS 文字列の翻訳trに使用されるメソッドも含まれています。

最後に、このモジュールはロード時にプラグイン固有のセクションも処理します。

# api/actions
StelAction関連のイベントを処理します。ブール値のStelActionが変更されたことを検出すると、次の 2 つのイベントが生成されます。

* アクションIDをパラメータとする汎用イベントstelActionChanged。アクションリストのように）すべてのアクションの変更に関わるときに使用できます。
* stelActionChanged:<actionId>は、イベント名の一部にactionIdを含む特殊なイベントです。これは特定のアクションだけをリッスンするときに使用できます。

インターフェイスの最初のロード時に、すべてのアクションのリストを (ActionServicelistオペレーションを使用して) ロードし、actionListLoadedこのデータが利用可能となったときにイベントを発行します。

アクションを実行/切り替えするには、executeActionパラメーターとしてアクション ID を必要とするだけのパブリック メソッドが提供されます。アクションが現在チェックされているかどうかを確認するには、isCheckedメソッドを使用します。

# api/flags
これはユーティリティモジュールで、enumフラグ型のチェックボックスを実装するために使用できます。このモジュールはnewで構築する必要があり、コンストラクタはチェックボックスのリストの親要素(チェックボックス型の入力)と、内部値が変更されたとき(すなわち、ユーザがチェックボックスをクリックしたとき)にコールバックされるメソッドを受け取ります。これは、現在の値を設定し、正しいチェックボックスをチェックするためのsetValueメソッドを提供します。各入力のビット値は、valueプロパティとして16進数文字列形式（例えば0x0004）で指定します。

# api/location
LocationServiceとLocationSearchServiceに接続するモジュール。指定されたフィールドが変更されるたびに、次のイベントを発行します: planetChanged、nameChanged、countryChanged、altitudeChanged、latitudeChanged、longitudeChanged、positionChanged(緯度または経度のいずれかが変更されたときに発行されます)

setこれらのフィールドのメソッドもあります。さらに、performLocationSearch特定の検索文字列で事前定義された場所を検索する と、performNearbySearch現在の惑星上の特定の緯度/経度に近い事前定義された場所を検索する が提供されます。これらのメソッドはコールバック パラメータを受け取り、呼び出し元に結果を通知します。このsetLocationByIdメソッドを使用して、これら 2 つのメソッドの結果に位置を設定できます。

また、指定されたリストをロードし、コールバックで結果を返す とloadCountryListも提供します。loadPlanetList

# API/properties
StelProperty関連のものを処理します。api/actionsモジュールと同様に、 StelPropertyの変更を検出すると 2 つのイベントを発行します。

をパラメータとしてstelPropertyChanged持つ一般的なイベント。propertyIdこれは、すべてのプロパティの変更 (リストなど) に興味がある場合に使用できます。
イベント名の一部に がstelPropertyChanged:<propertyId>含まれる特別なイベント。propertyIdこれは、特定のプロパティのみをリッスンする場合に使用できます。
StelPropertyの値を取得および設定するメソッドgetStelPropと、複数の高速インターフェイス変更 (スライダーやスピナーなどによる) を 1 つの呼び出しにまとめて、変更がないまま少し時間が経過した後にのみ実行される便利なメソッドも提供します。 。setStelPropsetStelPropQueuedsetStelProp

また、propertyListLoaded型情報を含む StelProperties の完全なリストを最初にロードするときにもイベントを発行します。

# API/scripts
このモジュールはスクリプトの実行 (つまり、ScriptService への接続) を処理します。次のメソッドが提供されます。

loadScriptList- すべてのスクリプトのリストをロードし、コールバックを受け取ってこのデータを返します
runScript- 指定されたスクリプトIDを実行します
runDirectScript- 指定されたスクリプト コードを直接実行します。
stopScript- 現在実行中のスクリプトを停止します
また、activeScriptChanged現在のスクリプトが変更または開始/停止されたことを検出したときにもイベントを発行します。

# API/search
オブジェクト検索機能を実装し、ObjectServiceおよびSimbadServiceに接続します。次のメソッドが提供されています。

* loadObjectTypes- オブジェクトタイプのリストをロードし、コールバックを受け取ります
* loadObjectList- 指定されたタイプのオブジェクトのリストをロードし、英語またはローカライズされた名前を返すことができます
* selectObjectByName- 指定された名前に一致するオブジェクトを選択します
* focusPosition- J2000 フレーム内の指定された座標 (3 つの数値の配列) に焦点を当てます
* performSearch- Stellarium の内部カタログと Simbad でオブジェクトの検索を実行します。検索文字列に加えて、2 つのコールバックをパラメーターとして指定する必要があります。1 つはカタログ結果用、もう 1 つは simbad 結果用です。検索が現在実行中の場合、検索は中止されます (つまり、古い検索に対してコールバックは呼び出されません)。ユーザーが入力している間、このメソッドを繰り返し呼び出すことができます。 Simbad 検索は、外部 Web リクエストのオーバーヘッドを軽減するために、入力せずに少し時間が経過した後にのみ開始されます

検索の実行中に、simbadStateChange検索の現在の状態を UI に通知するイベントを発行します。

# API/time
StelCoreと同様の、時間関連の関数と変換が含まれています。このモジュールは、Stellarium の現在時刻を独自に保持し、 API/リモートコントロールstatusモジュールのポーリング間でも更新されたインターフェイスを提供します。

次のメソッドが提供されます。

* getCurrentTime- 現在の Stellarium シミュレーション時間に対する最良の推測を計算します。これは、最後のポーリングで受信した情報status、最後のデータを受信して​​からの時間、および最後に時刻変更が実行された時刻によって異なります
* isRealTimeSpeed- シミュレーション時間が現在実時間と同じ速度 (1 秒あたり 1 秒) で流れている場合は true
* jdayToDate- jDay (単一の数値) を日/月/年の形式に変換します。これは、制限のため、JS Date オブジェクトの代わりにday、 、month、フィールドを含む JS オブジェクトを返します。year
* jdayToDate- 指定された jDay の時間コンポーネントを、フィールドを持つ JS オブジェクトとしてhour返しますminute。second
* dateTimeToJd- Y/M/DH/MIN/S 形式で指定された時刻を jDay に変換します
* dateTimeForRollover- StelUtils::changeDateTimeForRollover のような
* isTimeUpdatePending- true の場合、サーバーにまだ送信されていない時刻変更があります
* increaseTimeRate- Stellarium シミュレーション時間レートを増加します ( StelCore::increaseTimeSpeedなど)
* decreaseTimeRate- Stellarium シミュレーション時間レートを減少させます ( StelCore::decreaseTimeSpeedなど)
* isRewind- 現在時間が逆方向に流れている場合 (少なくとも -0.99 秒/秒)、true を返します
* isFastForward- 現在時間がリアルタイムよりも速く流れている場合は true を返します
* isTimeNow- 現在のシミュレーション時間が実際のシステム時間に非常に近い場合は true を返します
* isTimeStopped- シミュレーション時間レートがゼロの場合は true を返します
* togglePlayPause- タイムレートを 0 秒/秒と 1 秒/秒の間で切り替えます
* setDateNow- シミュレーション時間を現在のシステム時間に設定します
* setJDay- 時間を指定された JDay に設定します
* setTimeFromTimeObj- 次の形式で日付と時刻の両方を含む「時刻オブジェクト」から時刻を設定します

```json
{
    date : {
        year, month, day
    },
    time : {
        hour, minute, second
    }
}
```
* getTimeData- サーバーからの最後の応答 (タイムゾーン情報などを含む) を含む現在の時刻データを返しますtimeDataUpdated。これが変更されるたびにイベントが送信されます

# API/更新キュー
これは、ユーザーがその間何もしなかった場合に、指定された間隔の後にサーバーを更新する単純な更新キュー クラスを実装します。これは、更新がサーバーに送信される速度を制限するために使用されます。コンストラクUpdateQueueターは URL と結果のコールバックを受け取り、インターフェイスが更新を送信する必要がある場合、enqueue送信するデータを使用して呼び出すことができます。

# API/ビューコントロール
FOV アクセスおよびビューポート移動メソッドを実装します。setFOVFOV を設定するために使用します。FOVfovChangedが変更されるたびにイベントが送信されます。ユーザーがビューポートを移動できるようにするメソッドには、 、 などがmoveRightありmoveUpます。moveUpRight動きを止めるには、 を使用しますstopMovement。

# API/ビューオプション
投影、風景、スカイカルチャーのリストの読み込みを実装します。

# ui/mainui
これはインターフェースのメインモジュールです。他のすべての UI モジュールが依存関係としてリストされます。これは、モジュールの外観の更新を開始し、特殊なコントロールrcApiRemotecontrolの自動生成とStelProperty コントロールの接続を処理し、タイム コントロールのスムーズなアニメーションを実行します。また、ユーザーが現在いるインターフェイス タブを追跡し、ページがリロードされるとそれを復元します。

# UI/actions
アクション リストとStelAction ボタンとチェックボックスを実装します。

# UI/conbobox
jQuery UI コントロールの上にカスタム コンボボックス コントロールを実装しますautocomplete。これは、たとえば位置制御で使用されます。

# ui/jqueryuifixes
標準の jQuery UI コントロール クラス、特にスピナーに対するいくつかの修正が含まれており、統合された変更イベントを提供し、数値以外の入力を防止し、タッチ サポートを改善します。このモジュールは、他のモジュールが「jquery-ui」モジュールをロードするたびに自動的にロードされます。

# UI/location
クリックできる地図や現在の場所のコンボボックスなどの場所コントロールを実装します。

# UI/scripts
スクリプト リストを実装し、アクティブなスクリプトを表示します。

# UI/search
オブジェクト検索パネルとクイック選択ボタンを実装します。

# UI/time
時間コントロールを実装します。このメソッドは、 ui/mainuiupdateTimeDisplayモジュールによってアニメーションとして繰り返し呼び出されます。

# ui/viewcontrol
ビューポート移動用の FOV スライダーと「仮想ジョイスティック」を実装します。

# ui/viewoptions
投影法、風景、スカイカルチャーのリスト、および他のビュー オプションに関連するいくつかのマイナーなものを実装します。