チェンジセット 1673 (default)


以下の違いを無視:
日時:
2024/08/30 14:59:09 (5週前)
更新者:
hizuya@…
ログメッセージ:
  • Confirm でクライアントスクリプトを使用して事前に評価する仕組みを追加。
場所:
framework/trunk
ファイル:
4個の更新

凡例:

未変更
追加
削除
  • framework/trunk/WebApplication/UI/WebControls/ConfirmPage.aspx

    r1671 r1673  
    197197                ConfirmControl="Confirm404" 
    198198                ConfirmArgument="arg<span style="text-decoration: overline">404</span>   Argument
line2" 
     199                OnClick="Button_Click" /> 
     200 
     201 
     202            <h2>クライアントスクリプト</h2> 
     203 
     204            <h3>OnClientPreExpression プロパティ (true or false)</h3> 
     205            <input type="text" id="InputText501"/> 
     206            <sff:Confirm ID="Confirm501" runat="server" 
     207                Text="Confirm501 ?" 
     208                Title="confirm title" 
     209                OnClientPreExpression="document.getElementById('InputText501').value.length > 0" /> 
     210            <sff:Button ID="Button501" runat="server" 
     211                Text="Confirm501" 
     212                ConfirmControl="Confirm501" 
     213                OnClick="Button_Click" /> 
     214 
     215            <h3>OnClientPreExpression プロパティ (true or null)</h3> 
     216            <input type="text" id="InputText502"/> 
     217            <sff:Confirm ID="Confirm502" runat="server" 
     218                Text="Confirm502 ?" 
     219                Title="confirm title" 
     220                OnClientPreExpression="document.getElementById('InputText502').value.length > 0 ? true : null" /> 
     221            <sff:Button ID="Button502" runat="server" 
     222                Text="Confirm502" 
     223                ConfirmControl="Confirm502" 
     224                OnClick="Button_Click" /> 
     225 
     226            <h3>OnClientPreExpression プロパティ (true or undefined)</h3> 
     227            <input type="text" id="InputText503"/> 
     228            <sff:Confirm ID="Confirm503" runat="server" 
     229                Text="Confirm503 ?" 
     230                Title="confirm title" 
     231                OnClientPreExpression="document.getElementById('InputText503').value.length > 0 ? true : void(0)" /> 
     232            <sff:Button ID="Button503" runat="server" 
     233                Text="Confirm503" 
     234                ConfirmControl="Confirm503" 
    199235                OnClick="Button_Click" /> 
    200236 
  • framework/trunk/WebApplication/UI/WebControls/ConfirmPage.aspx.designer.cs

    r1671 r1673  
    284284         
    285285        /// <summary> 
     286        /// Confirm501 コントロール。 
     287        /// </summary> 
     288        /// <remarks> 
     289        /// 自動生成されたフィールド。 
     290        /// 変更するには、フィールドの宣言をデザイナー ファイルから分離コード ファイルに移動します。 
     291        /// </remarks> 
     292        protected global::FCSoft.SilverFrost.Framework.Web.UI.WebControls.Confirm Confirm501; 
     293         
     294        /// <summary> 
     295        /// Button501 コントロール。 
     296        /// </summary> 
     297        /// <remarks> 
     298        /// 自動生成されたフィールド。 
     299        /// 変更するには、フィールドの宣言をデザイナー ファイルから分離コード ファイルに移動します。 
     300        /// </remarks> 
     301        protected global::FCSoft.SilverFrost.Framework.Web.UI.WebControls.Button Button501; 
     302         
     303        /// <summary> 
     304        /// Confirm502 コントロール。 
     305        /// </summary> 
     306        /// <remarks> 
     307        /// 自動生成されたフィールド。 
     308        /// 変更するには、フィールドの宣言をデザイナー ファイルから分離コード ファイルに移動します。 
     309        /// </remarks> 
     310        protected global::FCSoft.SilverFrost.Framework.Web.UI.WebControls.Confirm Confirm502; 
     311         
     312        /// <summary> 
     313        /// Button502 コントロール。 
     314        /// </summary> 
     315        /// <remarks> 
     316        /// 自動生成されたフィールド。 
     317        /// 変更するには、フィールドの宣言をデザイナー ファイルから分離コード ファイルに移動します。 
     318        /// </remarks> 
     319        protected global::FCSoft.SilverFrost.Framework.Web.UI.WebControls.Button Button502; 
     320         
     321        /// <summary> 
     322        /// Confirm503 コントロール。 
     323        /// </summary> 
     324        /// <remarks> 
     325        /// 自動生成されたフィールド。 
     326        /// 変更するには、フィールドの宣言をデザイナー ファイルから分離コード ファイルに移動します。 
     327        /// </remarks> 
     328        protected global::FCSoft.SilverFrost.Framework.Web.UI.WebControls.Confirm Confirm503; 
     329         
     330        /// <summary> 
     331        /// Button503 コントロール。 
     332        /// </summary> 
     333        /// <remarks> 
     334        /// 自動生成されたフィールド。 
     335        /// 変更するには、フィールドの宣言をデザイナー ファイルから分離コード ファイルに移動します。 
     336        /// </remarks> 
     337        protected global::FCSoft.SilverFrost.Framework.Web.UI.WebControls.Button Button503; 
     338         
     339        /// <summary> 
    286340        /// Button901 コントロール。 
    287341        /// </summary> 
  • framework/trunk/WebLibrary/Resources/Script/UIConfirm.js

    r1543 r1673  
    6565                        keepSpaceArgument: false, 
    6666                        keepBreakArgument: false, 
     67                        preExpression: null, 
    6768                        confirmed: null 
    6869                }, 
     
    168169                        var selectedCallback = null; 
    169170 
     171                        var notifyResult = function (event, selectedButton) { 
     172                                if (closeCallback) { 
     173                                        closeCallback(selectedButton); 
     174                                } 
     175                                self._trigger('confirmed', event, selectedButton); 
     176                        } 
     177 
     178                        var preExpression = options.preExpression; 
     179                        if (preExpression != null) { 
     180                                var preExpressionResult = typeof preExpression === 'function' ? preExpression() : preExpression; 
     181                                if (preExpressionResult === true || preExpressionResult === false) { 
     182                                        notifyResult(null, preExpressionResult ? 0 : 1); 
     183                                        return; 
     184                                } 
     185                        } 
     186 
    170187                        var width = options.width; 
    171188                        if (width == null) { 
     
    228245                                        selectedCallback(event); 
    229246                                } 
    230                                 if (closeCallback) { 
    231                                         closeCallback(selectedButton); 
    232                                 } 
    233                                 self._trigger('confirmed', event, selectedButton); 
     247                                notifyResult(event, selectedButton); 
    234248                        }); 
    235249                        this._dialog.dialog('open'); 
     
    238252 
    239253        $.extend($.ui.confirm, { 
    240                 version: '1.2' 
     254                version: '1.3' 
    241255        }); 
    242256 
  • framework/trunk/WebLibrary/Sources/UI/WebControls/Confirm.cs

    r1672 r1673  
    2525    using System; 
    2626    using System.ComponentModel; 
     27    using System.Text.RegularExpressions; 
    2728    using System.Web; 
    2829    using System.Web.UI; 
     
    9798        private const string CancelValidationGroupKey = "CancelValidationGroup"; 
    9899 
     100        /// <summary> 
     101        /// <see cref="OnClientPreExpression"/> プロパティ用のキー。 
     102        /// </summary> 
     103        private const string OnClientPreExpressionKey = "OnClientPreExpression"; 
     104 
    99105 
    100106        /// <summary> 
     
    107113        /// </summary> 
    108114        private static readonly object EventCanceledKey = new object(); 
     115 
     116 
     117        /// <summary> 
     118        /// <c>return</c> で始まるクライアントスクリプトの式かどうかを判別する正規表現。 
     119        /// </summary> 
     120        private static readonly Regex ReturnClientScriptRegex 
     121            = new Regex(@"^\s*return\s+"); 
    109122 
    110123 
     
    365378 
    366379        /// <summary> 
     380        /// クライアントサイドで事前評価を行う式を取得及び設定します。 
     381        /// </summary> 
     382        /// <value> 
     383        /// クライアントサイドで事前評価を行う式。 
     384        /// 既定値は空文字列。 
     385        /// </value> 
     386        /// <remarks> 
     387        /// <para> 
     388        /// <see cref="Button.ConfirmControl"/> 等により表示しようとした時のみ使用されます。 
     389        /// <see cref="Show(bool, bool)"/> で表示しようとしたときは無視されます。 
     390        /// </para> 
     391        /// <para> 
     392        /// このプロパティで指定された式が <see langword="true"/> 
     393        /// を返した場合は <c>Ok</c> ボタンを押したことと同じになります。 
     394        /// <see langword="false"/> 
     395        /// を返した場合は <c>Cancel</c> ボタンを押したことと同じになります。 
     396        /// 何も返さない場合や <see langword="null"/> 
     397        /// を返した場合は確認ダイアログが表示されます。 
     398        /// </para> 
     399        /// </remarks> 
     400        [Themeable(false)] 
     401        [DefaultValue("")] 
     402        [WebCategory("Behavior")] 
     403        [WebDescription("Description_Behavior")] 
     404        public virtual string OnClientPreExpression 
     405        { 
     406            get 
     407            { 
     408                return (string)(ViewState[OnClientPreExpressionKey] ?? string.Empty); 
     409            } 
     410 
     411            set 
     412            { 
     413                ViewState[OnClientPreExpressionKey] = value; 
     414            } 
     415        } 
     416 
     417        /// <summary> 
    367418        /// サーバー コントロールを UI としてページに表示するかどうかを示す値を取得または設定します。 
    368419        /// </summary> 
     
    462513        /// 引数。 
    463514        /// </param> 
     515        /// <remarks> 
     516        /// このメソッドは <c>PreRender</c> 以降で呼び出す必要があります。 
     517        /// </remarks> 
    464518        internal void RegisterOnClientClick(Control control, string argument) 
    465519        { 
     
    534588            // 親を呼び出す 
    535589            base.OnPreRender(e); 
     590 
     591            string preExpression = OnClientPreExpression; 
     592            if (!string.IsNullOrWhiteSpace(preExpression)) 
     593            { 
     594                // ReSharper disable once ExceptionNotDocumented 
     595                if (ReturnClientScriptRegex.IsMatch(preExpression)) 
     596                { 
     597                    // return XXX 
     598                    preExpression = "function() { " + preExpression + "; }"; 
     599                } 
     600                else 
     601                { 
     602                    // property.value や value == 'XX' や (a ? b : c) や functionName() など 
     603                    preExpression = "function() { return (" + preExpression + "); }"; 
     604                } 
     605            } 
     606            else 
     607            { 
     608                preExpression = "null"; 
     609            } 
    536610 
    537611            StyleUtility.RegisterJQueryConfirm(); 
     
    548622        htmlEncodeArgument: " + HtmlEncode.ToString().ToLowerInvariant() + @", 
    549623        keepSpaceArgument: " + KeepSpace.ToString().ToLowerInvariant() + @", 
    550         keepBreakArgument: " + KeepBreak.ToString().ToLowerInvariant() + @" 
     624        keepBreakArgument: " + KeepBreak.ToString().ToLowerInvariant() + @", 
     625        preExpression: " + preExpression + @" 
    551626    })" + (showOnRender ? @".confirm('confirm', null, function(selectedButton) { 
    552627        if (selectedButton == 0) {" 
詳しい使い方は TracChangeset を参照してください。