Changeset 8053

Show
Ignore:
Timestamp:
03/17/08 23:16:11 (5 years ago)
Author:
coma2n
Message:

platform/silverlight/Silverlight.JQuery/trunk: イベントメソッドを追加した

Location:
platform/silverlight/Silverlight.JQuery/trunk/src
Files:
3 modified

Legend:

Unmodified
Added
Removed
  • platform/silverlight/Silverlight.JQuery/trunk/src/Silverlight.JQuery.Test/Page.xaml.cs

    r8044 r8053  
    2626using System.Windows; 
    2727using System.Windows.Controls; 
     28using System.Windows.Browser; 
    2829 
    2930#endregion 
     
    5960                                ) 
    6061                        ); 
     62                        new JQuery(":button:first").Click((_s, _e) => { 
     63                                HtmlPage.Window.Alert("button1 click!"); 
     64                        }); 
     65                        new JQuery(":button:last").OnClick += (_s, _e) => { 
     66                                HtmlPage.Window.Alert("button2 click!"); 
     67                        }; 
    6168                } 
    6269 
  • platform/silverlight/Silverlight.JQuery/trunk/src/Silverlight.JQuery.WebTest/index.html

    r8044 r8053  
    1111                height: 300px; 
    1212                border: solid 2px silver; 
     13                margin-bottom: 5px; 
    1314                overflow: scroll; 
    1415    } 
     
    4546    </div> 
    4647     
     48    <input type="button" value="button1" /> 
     49    <input type="button" value="button2" /> 
    4750</body> 
    4851</html> 
  • platform/silverlight/Silverlight.JQuery/trunk/src/Silverlight.JQuery/JQuery/JQuery.cs

    r8044 r8053  
    7878                #region methods 
    7979 
     80                #region Attributes 
     81 
    8082                /// <summary> 
    8183                /// 要素のHTMLを取得します。 
     
    102104                public JQuery Text(string text) { return Set("text", text); } 
    103105 
     106                #endregion 
     107 
     108                #region Manipulation 
     109 
    104110                /// <summary> 
    105111                /// 指定したコンテンツを現在の要素の子要素として後ろから追加します。 
     
    108114                /// <returns>自分自身</returns> 
    109115                /// <exception cref="ArgumentNullException">引数がnullの時</exception> 
    110                 public JQuery Append(params object[] contents) { return AppendInternal("append", contents); } 
     116                public JQuery Append(params object[] contents) { 
     117                        #region ArgumentValidation 
     118                        ArgumentValidation.CheckForNullReference(contents, "contents"); 
     119                        #endregion 
     120 
     121                        return AppendInternal("append", contents); 
     122                } 
    111123 
    112124                /// <summary> 
     
    116128                /// <returns>自分自身</returns> 
    117129                /// <exception cref="ArgumentNullException">引数がnullの時</exception> 
    118                 public JQuery AppendTo(params object[] contents) { return AppendInternal("appendTo", contents); } 
     130                public JQuery AppendTo(params object[] contents) { 
     131                        #region ArgumentValidation 
     132                        ArgumentValidation.CheckForNullReference(contents, "contents"); 
     133                        #endregion 
     134 
     135                        return AppendInternal("appendTo", contents); 
     136                } 
    119137 
    120138                /// <summary> 
     
    124142                /// <returns>自分自身</returns> 
    125143                /// <exception cref="ArgumentNullException">引数がnullの時</exception> 
    126                 public JQuery Prepend(params object[] contents) { return AppendInternal("prepend", contents); } 
     144                public JQuery Prepend(params object[] contents) { 
     145                        #region ArgumentValidation 
     146                        ArgumentValidation.CheckForNullReference(contents, "contents"); 
     147                        #endregion 
     148 
     149                        return AppendInternal("prepend", contents); 
     150                } 
    127151 
    128152                /// <summary> 
     
    132156                /// <returns>自分自身</returns> 
    133157                /// <exception cref="ArgumentNullException">引数がnullの時</exception> 
    134                 public JQuery PrependTo(params object[] contents) { return AppendInternal("prependTo", contents); } 
     158                public JQuery PrependTo(params object[] contents) { 
     159                        #region ArgumentValidation 
     160                        ArgumentValidation.CheckForNullReference(contents, "contents"); 
     161                        #endregion 
     162 
     163                        return AppendInternal("prependTo", contents); 
     164                } 
     165 
     166                #endregion 
     167 
     168                #region Events 
     169 
     170                /// <summary> 
     171                /// 指定したハンドラを要素がブラーされた時に呼び出されるイベントに追加します。 
     172                /// </summary> 
     173                /// <param name="handler">ハンドラ</param> 
     174                /// <returns>自分自身</returns> 
     175                /// <exception cref="ArgumentNullException">引数がnullの時</exception> 
     176                public JQuery Blur(EventHandler<HtmlEventArgs> handler) { 
     177                        #region ArgumentValidation 
     178                        ArgumentValidation.CheckForNullReference(handler, "handler"); 
     179                        #endregion 
     180 
     181                        OnBlur += handler; 
     182 
     183                        return this; 
     184                } 
     185                /// <summary> 
     186                /// 要素がブラーされた時に呼び出されます。 
     187                /// </summary> 
     188                public event EventHandler<HtmlEventArgs> OnBlur { 
     189                        add { 
     190                                EachElement(ele => ele.AttachEvent("onblur", value)); 
     191                        } 
     192                        remove { 
     193                                EachElement(ele => ele.DetachEvent("onblur", value)); 
     194                        } 
     195                } 
     196 
     197                /// <summary> 
     198                /// 指定したハンドラを要素の値が変更された時に呼び出されるイベントに追加します。 
     199                /// </summary> 
     200                /// <param name="handler">ハンドラ</param> 
     201                /// <returns>自分自身</returns> 
     202                /// <exception cref="ArgumentNullException">引数がnullの時</exception> 
     203                public JQuery Change(EventHandler<HtmlEventArgs> handler) { 
     204                        #region ArgumentValidation 
     205                        ArgumentValidation.CheckForNullReference(handler, "handler"); 
     206                        #endregion 
     207 
     208                        OnChange += handler; 
     209 
     210                        return this; 
     211                } 
     212                /// <summary> 
     213                /// 要素の値が変更された時に呼び出されます。 
     214                /// </summary> 
     215                public event EventHandler<HtmlEventArgs> OnChange { 
     216                        add { 
     217                                EachElement(ele => ele.AttachEvent("onchange", value)); 
     218                        } 
     219                        remove { 
     220                                EachElement(ele => ele.DetachEvent("onchange", value)); 
     221                        } 
     222                } 
     223 
     224                /// <summary> 
     225                /// 指定したハンドラを要素がクリックされた時に呼び出されるイベントに追加します。 
     226                /// </summary> 
     227                /// <param name="handler">ハンドラ</param> 
     228                /// <returns>自分自身</returns> 
     229                /// <exception cref="ArgumentNullException">引数がnullの時</exception> 
     230                public JQuery Click(EventHandler<HtmlEventArgs> handler) { 
     231                        #region ArgumentValidation 
     232                        ArgumentValidation.CheckForNullReference(handler, "handler"); 
     233                        #endregion 
     234 
     235                        OnClick += handler; 
     236 
     237                        return this; 
     238                } 
     239                /// <summary> 
     240                /// 要素がクリックされた時に呼び出されます。 
     241                /// </summary> 
     242                public event EventHandler<HtmlEventArgs> OnClick { 
     243                        add { 
     244                                EachElement(ele => ele.AttachEvent("onclick", value)); 
     245                        } 
     246                        remove { 
     247                                EachElement(ele => ele.DetachEvent("onclick", value)); 
     248                        } 
     249                } 
     250 
     251                /// <summary> 
     252                /// 指定したハンドラを要素がダブルクリックされた時に呼び出されるイベントに追加します。 
     253                /// </summary> 
     254                /// <param name="handler">ハンドラ</param> 
     255                /// <returns>自分自身</returns> 
     256                /// <exception cref="ArgumentNullException">引数がnullの時</exception> 
     257                public JQuery DblClick(EventHandler<HtmlEventArgs> handler) { 
     258                        #region ArgumentValidation 
     259                        ArgumentValidation.CheckForNullReference(handler, "handler"); 
     260                        #endregion 
     261 
     262                        OnDblClick += handler; 
     263 
     264                        return this; 
     265                } 
     266                /// <summary> 
     267                /// 要素がダブルクリックされた時に呼び出されます。 
     268                /// </summary> 
     269                public event EventHandler<HtmlEventArgs> OnDblClick { 
     270                        add { 
     271                                EachElement(ele => ele.AttachEvent("ondblclick", value)); 
     272                        } 
     273                        remove { 
     274                                EachElement(ele => ele.DetachEvent("ondblclick", value)); 
     275                        } 
     276                } 
     277 
     278                /// <summary> 
     279                /// 指定したハンドラを要素にフォーカスが設定された時に呼び出されるイベントに追加します。 
     280                /// </summary> 
     281                /// <param name="handler">ハンドラ</param> 
     282                /// <returns>自分自身</returns> 
     283                /// <exception cref="ArgumentNullException">引数がnullの時</exception> 
     284                public JQuery Focus(EventHandler<HtmlEventArgs> handler) { 
     285                        #region ArgumentValidation 
     286                        ArgumentValidation.CheckForNullReference(handler, "handler"); 
     287                        #endregion 
     288 
     289                        OnFocus += handler; 
     290 
     291                        return this; 
     292                } 
     293                /// <summary> 
     294                /// 要素にフォーカスが設定された時に呼び出されます。 
     295                /// </summary> 
     296                public event EventHandler<HtmlEventArgs> OnFocus { 
     297                        add { 
     298                                EachElement(ele => ele.AttachEvent("onfocus", value)); 
     299                        } 
     300                        remove { 
     301                                EachElement(ele => ele.DetachEvent("onfocus", value)); 
     302                        } 
     303                } 
     304 
     305                /// <summary> 
     306                /// 指定したハンドラを要素でキーが押下された時に呼び出されるイベントに追加します。 
     307                /// </summary> 
     308                /// <param name="handler">ハンドラ</param> 
     309                /// <returns>自分自身</returns> 
     310                /// <exception cref="ArgumentNullException">引数がnullの時</exception> 
     311                public JQuery KeyDown(EventHandler<HtmlEventArgs> handler) { 
     312                        #region ArgumentValidation 
     313                        ArgumentValidation.CheckForNullReference(handler, "handler"); 
     314                        #endregion 
     315 
     316                        OnKeyDown += handler; 
     317 
     318                        return this; 
     319                } 
     320                /// <summary> 
     321                /// 要素でキーが押下された時に呼び出されます。 
     322                /// </summary> 
     323                public event EventHandler<HtmlEventArgs> OnKeyDown { 
     324                        add { 
     325                                EachElement(ele => ele.AttachEvent("onkeydown", value)); 
     326                        } 
     327                        remove { 
     328                                EachElement(ele => ele.DetachEvent("onkeydown", value)); 
     329                        } 
     330                } 
     331 
     332                /// <summary> 
     333                /// 指定したハンドラを要素でキーが押された時に呼び出されるイベントに追加します。 
     334                /// </summary> 
     335                /// <param name="handler">ハンドラ</param> 
     336                /// <returns>自分自身</returns> 
     337                /// <exception cref="ArgumentNullException">引数がnullの時</exception> 
     338                public JQuery KeyPress(EventHandler<HtmlEventArgs> handler) { 
     339                        #region ArgumentValidation 
     340                        ArgumentValidation.CheckForNullReference(handler, "handler"); 
     341                        #endregion 
     342 
     343                        OnKeyPress += handler; 
     344 
     345                        return this; 
     346                } 
     347                /// <summary> 
     348                /// 要素でキーが押された時に呼び出されます。 
     349                /// </summary> 
     350                public event EventHandler<HtmlEventArgs> OnKeyPress { 
     351                        add { 
     352                                EachElement(ele => ele.AttachEvent("onkeypress", value)); 
     353                        } 
     354                        remove { 
     355                                EachElement(ele => ele.DetachEvent("onkeypress", value)); 
     356                        } 
     357                } 
     358 
     359                /// <summary> 
     360                /// 指定したハンドラを要素でキーが離された時に呼び出されるイベントに追加します。 
     361                /// </summary> 
     362                /// <param name="handler">ハンドラ</param> 
     363                /// <returns>自分自身</returns> 
     364                /// <exception cref="ArgumentNullException">引数がnullの時</exception> 
     365                public JQuery KeyUp(EventHandler<HtmlEventArgs> handler) { 
     366                        #region ArgumentValidation 
     367                        ArgumentValidation.CheckForNullReference(handler, "handler"); 
     368                        #endregion 
     369 
     370                        OnKeyUp += handler; 
     371 
     372                        return this; 
     373                } 
     374                /// <summary> 
     375                /// 要素でキーが離された時に呼び出されます。 
     376                /// </summary> 
     377                public event EventHandler<HtmlEventArgs> OnKeyUp { 
     378                        add { 
     379                                EachElement(ele => ele.AttachEvent("onkeyup", value)); 
     380                        } 
     381                        remove { 
     382                                EachElement(ele => ele.DetachEvent("onkeyup", value)); 
     383                        } 
     384                } 
     385 
     386                /// <summary> 
     387                /// 指定したハンドラを要素がロードされた時に呼び出されるイベントに追加します。 
     388                /// </summary> 
     389                /// <param name="handler">ハンドラ</param> 
     390                /// <returns>自分自身</returns> 
     391                /// <exception cref="ArgumentNullException">引数がnullの時</exception> 
     392                public JQuery Load(EventHandler<HtmlEventArgs> handler) { 
     393                        #region ArgumentValidation 
     394                        ArgumentValidation.CheckForNullReference(handler, "handler"); 
     395                        #endregion 
     396 
     397                        OnLoad += handler; 
     398 
     399                        return this; 
     400                } 
     401                /// <summary> 
     402                /// 要素がロードされた時に呼び出されます。 
     403                /// </summary> 
     404                public event EventHandler<HtmlEventArgs> OnLoad { 
     405                        add { 
     406                                EachElement(ele => ele.AttachEvent("onload", value)); 
     407                        } 
     408                        remove { 
     409                                EachElement(ele => ele.DetachEvent("onload", value)); 
     410                        } 
     411                } 
     412 
     413                /// <summary> 
     414                /// 指定したハンドラを要素でマウスのボタンが押された時に呼び出されるイベントに追加します。 
     415                /// </summary> 
     416                /// <param name="handler">ハンドラ</param> 
     417                /// <returns>自分自身</returns> 
     418                /// <exception cref="ArgumentNullException">引数がnullの時</exception> 
     419                public JQuery MouseDown(EventHandler<HtmlEventArgs> handler) { 
     420                        #region ArgumentValidation 
     421                        ArgumentValidation.CheckForNullReference(handler, "handler"); 
     422                        #endregion 
     423 
     424                        OnMouseDown += handler; 
     425 
     426                        return this; 
     427                } 
     428                /// <summary> 
     429                /// 要素でマウスのボタンが押された時に呼び出されます。 
     430                /// </summary> 
     431                public event EventHandler<HtmlEventArgs> OnMouseDown { 
     432                        add { 
     433                                EachElement(ele => ele.AttachEvent("onmousedown", value)); 
     434                        } 
     435                        remove { 
     436                                EachElement(ele => ele.DetachEvent("onmousedown", value)); 
     437                        } 
     438                } 
     439 
     440                /// <summary> 
     441                /// 指定したハンドラを要素でマウスが移動された時に呼び出されるイベントに追加します。 
     442                /// </summary> 
     443                /// <param name="handler">ハンドラ</param> 
     444                /// <returns>自分自身</returns> 
     445                /// <exception cref="ArgumentNullException">引数がnullの時</exception> 
     446                public JQuery MouseMove(EventHandler<HtmlEventArgs> handler) { 
     447                        #region ArgumentValidation 
     448                        ArgumentValidation.CheckForNullReference(handler, "handler"); 
     449                        #endregion 
     450 
     451                        OnMouseMove += handler; 
     452 
     453                        return this; 
     454                } 
     455                /// <summary> 
     456                /// 要素でマウスが移動された時に呼び出されます。 
     457                /// </summary> 
     458                public event EventHandler<HtmlEventArgs> OnMouseMove { 
     459                        add { 
     460                                EachElement(ele => ele.AttachEvent("onmousemove", value)); 
     461                        } 
     462                        remove { 
     463                                EachElement(ele => ele.DetachEvent("onmousemove", value)); 
     464                        } 
     465                } 
     466 
     467                /// <summary> 
     468                /// 指定したハンドラを要素の上からマウスが外れた時に呼び出されるイベントに追加します。 
     469                /// </summary> 
     470                /// <param name="handler">ハンドラ</param> 
     471                /// <returns>自分自身</returns> 
     472                /// <exception cref="ArgumentNullException">引数がnullの時</exception> 
     473                public JQuery MouseOut(EventHandler<HtmlEventArgs> handler) { 
     474                        #region ArgumentValidation 
     475                        ArgumentValidation.CheckForNullReference(handler, "handler"); 
     476                        #endregion 
     477 
     478                        OnMouseOut += handler; 
     479 
     480                        return this; 
     481                } 
     482                /// <summary> 
     483                /// 要素の上からマウスが外れた時に呼び出されます。 
     484                /// </summary> 
     485                public event EventHandler<HtmlEventArgs> OnMouseOut { 
     486                        add { 
     487                                EachElement(ele => ele.AttachEvent("onmouseout", value)); 
     488                        } 
     489                        remove { 
     490                                EachElement(ele => ele.DetachEvent("onmouseout", value)); 
     491                        } 
     492                } 
     493 
     494                /// <summary> 
     495                /// 指定したハンドラを要素の上をマウスが通った時に呼び出されるイベントに追加します。 
     496                /// </summary> 
     497                /// <param name="handler">ハンドラ</param> 
     498                /// <returns>自分自身</returns> 
     499                /// <exception cref="ArgumentNullException">引数がnullの時</exception> 
     500                public JQuery MouseOver(EventHandler<HtmlEventArgs> handler) { 
     501                        #region ArgumentValidation 
     502                        ArgumentValidation.CheckForNullReference(handler, "handler"); 
     503                        #endregion 
     504 
     505                        OnMouseOver += handler; 
     506 
     507                        return this; 
     508                } 
     509                /// <summary> 
     510                /// 要素の上をマウスが通った時に呼び出されます。 
     511                /// </summary> 
     512                public event EventHandler<HtmlEventArgs> OnMouseOver { 
     513                        add { 
     514                                EachElement(ele => ele.AttachEvent("onmouseover", value)); 
     515                        } 
     516                        remove { 
     517                                EachElement(ele => ele.DetachEvent("onmouseover", value)); 
     518                        } 
     519                } 
     520 
     521                /// <summary> 
     522                /// 指定したハンドラを要素でマウスのボタンが離された時に呼び出されるイベントに追加します。 
     523                /// </summary> 
     524                /// <param name="handler">ハンドラ</param> 
     525                /// <returns>自分自身</returns> 
     526                /// <exception cref="ArgumentNullException">引数がnullの時</exception> 
     527                public JQuery MouseUp(EventHandler<HtmlEventArgs> handler) { 
     528                        #region ArgumentValidation 
     529                        ArgumentValidation.CheckForNullReference(handler, "handler"); 
     530                        #endregion 
     531 
     532                        OnMouseUp += handler; 
     533 
     534                        return this; 
     535                } 
     536                /// <summary> 
     537                /// 要素でマウスのボタンが離された時に呼び出されます。 
     538                /// </summary> 
     539                public event EventHandler<HtmlEventArgs> OnMouseUp { 
     540                        add { 
     541                                EachElement(ele => ele.AttachEvent("onmouseup", value)); 
     542                        } 
     543                        remove { 
     544                                EachElement(ele => ele.DetachEvent("onmouseup", value)); 
     545                        } 
     546                } 
     547 
     548                #endregion 
    135549 
    136550                /// <summary> 
     
    140554                /// <param name="methodName"></param> 
    141555                /// <returns></returns> 
     556                [DebuggerStepThrough] 
    142557                private T Get<T>(string methodName) { 
    143558                        return (T)element.Invoke(methodName); 
     559                } 
     560                /// <summary> 
     561                ///  
     562                /// </summary> 
     563                /// <typeparam name="T"></typeparam> 
     564                /// <param name="methodName"></param> 
     565                /// <param name="args"></param> 
     566                /// <returns></returns> 
     567                [DebuggerStepThrough] 
     568                private T Get<T>(string methodName, params object[] args) { 
     569                        return (T)element.Invoke(methodName, args); 
    144570                } 
    145571 
     
    163589                /// <returns></returns> 
    164590                private JQuery AppendInternal(string methodName, object[] contents) { 
    165                         #region ArgumentValidation 
    166                         ArgumentValidation.CheckForNullReference(contents, "contents"); 
    167                         #endregion 
    168  
    169591                        foreach(var c in contents) { 
    170592                                element.Invoke(methodName, 
     
    175597                } 
    176598 
     599                /// <summary> 
     600                /// 現在の各要素に対して、指定したアクションを実行します。 
     601                /// </summary> 
     602                /// <param name="func">実行するアクション</param> 
     603                private void EachElement(Action<HtmlElement> func) { 
     604                        // 何故かdouble型で返ってくる。 
     605                        var length = (double)element.GetProperty("length"); 
     606 
     607                        for(int i = 0; i < length; i++) { 
     608                                func(Get<HtmlElement>("get", i)); 
     609                        } 
     610                } 
     611 
    177612                #endregion 
    178613