Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Text περιεχόμενα ενός Master Page στο PreRender ...

Îåêßíçóå áðü ôï ìÝëïò anjelinio. Τελευταία δημοσίευση από το μέλος Panagiotis Kefalidis στις 14-12-2010, 14:22. Υπάρχουν 10 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  08-12-2010, 17:37 61389

    Text περιεχόμενα ενός Master Page στο PreRender ...

    Καλησπέρα σε όλους ...


    Γράφοντας ένα νέο site, και "for the sake of compliance & good behavior", θέλαμε να μαζέψουμε όλα τα scripts ( javascript, client-side ) σε ένα μέρος, στον πάτο της σελίδας, και να τα κάνουμε αυτόματα minify ... ( strip comments, spaces, new lines κτλ κτλ ).

    Για αυτό το λόγο, ορίσαμε 2 ContentPlaceHolders στη master page μας, και στις κανονικές μας σελίδες, γράφουμε όλο το script code μέσα σε αυτά, ώστε να βρεθούν στο σωστό σημείο όταν γίνει το τελικό render.

    Πάνω απο αυτό, ήθελα να μπώ να κάνω το "minify". Έτσι, στο pre_render της master page,  έκανα το εξής:

    IEnumerable<Control> inlineScriptControls = this.InlineScriptsContainer.Controls.Cast<Control>();
    
    IEnumerable<Control> onloadScriptControls = this.OnLoadScriptsContainer.Controls.Cast<Control>();
    
    IEnumerable<Control> allControls = inlineScriptControls.Concat(onloadScriptControls);

    ... και μετά, ήλπιζα ότι θα κάνω ένα foreach στα controls αυτά, και θα χρησιμοποιούσα τη minify() μέθοδό μου στα περιεχόμενά τους.

    Έλα όμως που ... το allControls είναι ... άδειο !

    Στη σελίδα μου ( όχι τη master ) μέσα στα placeholders είμαι κάπως έτσι:

    <asp:Content ID="inlineScript" ContentPlaceHolderID="InlineScriptsContainer" runat="server">
        var routingCheck = "";
        var themap;
        var theRouter;
        var dimensions = new Object;
        var mapState = new Object;
        this.mapState.MapExpanded = true;
        this.mapState.SidebarEnabled = false;
        var userPref;
        var center = "";
        var start = null, middle = null, end = null;
        var siteRoot ="<%= WebSiteUtils.WebSiteAbsoluteRoot %>";
        var startTbx = '#StartTbx';
        var endTbx = '#EndTbx';
       
        var _uiStateManager;
    </asp:Content>

    ... αντίστοιχα, στο master page μου, είμαι έτσι:

     <%= "<script type='text/javascript'>" %>
     
      <asp:ContentPlaceHolder ID="InlineScriptsContainer" runat="server">
     
      </asp:ContentPlaceHolder>
     
      $(document).ready(function() {
      <asp:ContentPlaceHolder ID="OnLoadScriptsContainer" runat="server">
     
      </asp:ContentPlaceHolder>
      });
      <%= "</script>" %>
     
      </form>
      </body>

    ... και παρα το ότι όλα φαινονται "σωστά", και η rendered σελίδα έχει τα scripts στο σωστό σημείο, στο PreRender της master page, ο κώδικας απο πιο πάνω μου δίνει ... 0 controls !
    Ούτε ένα literal, τίποτα !

    Καμμιά ιδέα κανείς;;;

    O:]




    Angel
    O:]
  •  08-12-2010, 19:19 61390 σε απάντηση της 61389

    Απ: Text περιεχόμενα ενός Master Page στο PreRender ...

    Δεν είμαι και τόσο σίγουρος για την προσέγγισή σου είναι σωστή - controls δεν έχεις γιατί μέσα στα containers δεν βάζεις server controls.

    Προσωπικά αν θα ήθελα να κάνω minify τη javascript θα το έκανα στο render του container - η ακόμα καλύτερα, θα δημιουργούσα ένα server control που θα κληρονομούσε το ContentPlaceholder και θα πείραζα το Render() event του, ώστε να έχω τον απόλυτο έλεγχο στην διαδικασία...

     

    George J.

     


    George J. Capnias: Χειροπρακτικός Υπολογιστών, Ύψιστος Γκουράρχης της Κουμπουτερολογίας
    w: capnias.org, t: @gcapnias, l: gr.linkedin.com/in/gcapnias
    dotNETZone.gr News
  •  08-12-2010, 19:43 61391 σε απάντηση της 61389

    Απ: Text περιεχόμενα ενός Master Page στο PreRender ...

    Έχεις την ίδια συμπεριφορά και όταν γίνεται raised το PreRender event του κάθε ContentPlaceHolder ξεχωριστά; Αν όχι, μία λύση θα ήταν να επεξεργαστείς ξεχωριστά τις δύο λίστες.

    ΕΠΙΠΟΛΑΙΟΟΟΟΟΤΗΤΑ!! Έκανα το post πριν διαβάσω σωστά την απάντηση του Γιώργου Καπνιά.

    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
  •  08-12-2010, 20:33 61392 σε απάντηση της 61390

    Απ: Text περιεχόμενα ενός Master Page στο PreRender ...

    George J. Capnias:
    Δεν είμαι και τόσο σίγουρος για την προσέγγισή σου είναι σωστή - controls δεν έχεις γιατί μέσα στα containers δεν βάζεις server controls.

    Προσωπικά αν θα ήθελα να κάνω minify τη javascript θα το έκανα στο render του container - η ακόμα καλύτερα, θα δημιουργούσα ένα server control που θα κληρονομούσε το ContentPlaceholder και θα πείραζα το Render() event του, ώστε να έχω τον απόλυτο έλεγχο στην διαδικασία...

    Πρέπει να είμαι και ο μόνος που κάνω quote στον ευατό μου... Που έχω φτάσει!

    Μου άρεσε η ιδέα του Άγγελου και έπαιξα μαζί της λίγο...

    Και το αποτέλεσμα:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    using System.IO;
    using System.Text;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    
    namespace Web.UI.WebControls
    {
        public class ScriptContentPlaceHolder : ContentPlaceHolder
        {
            public ScriptContentPlaceHolder() { }
    
            protected override void Render(HtmlTextWriter writer)
            {
                StringBuilder sb = new StringBuilder(); 
                HtmlTextWriter htw = new HtmlTextWriter(new StringWriter(sb)); 
                base.Render(htw); 
                string html = sb.ToString(); 
    
                // Do what ever you like here with html..
    
                writer.Write("<script type=\"text/javascript\">");
                writer.Write(html);
                writer.Write("</script>");
            }
    
        }
    }

    Το παραπάνω "κλέβει" τον html κώδικα του content control και μπορείς να παίξεις μαζί τους...

     

    George J.


    George J. Capnias: Χειροπρακτικός Υπολογιστών, Ύψιστος Γκουράρχης της Κουμπουτερολογίας
    w: capnias.org, t: @gcapnias, l: gr.linkedin.com/in/gcapnias
    dotNETZone.gr News
  •  09-12-2010, 11:45 61404 σε απάντηση της 61392

    Απ: Text περιεχόμενα ενός Master Page στο PreRender ...

    ... είσαι ο ήρωάς μου για σήμερα, πολύ καλή ιδέα ! :)

    Angel
    O:]
  •  09-12-2010, 12:33 61406 σε απάντηση της 61404

    Απ: Text περιεχόμενα ενός Master Page στο PreRender ...

    ... και μιας και φτάσαμε μέχρι εδώ ... [ δουλεύει μια χαρά φίλε George o κώδικάς σου ]

        public static string ToMinifiedScript(this string originalScriptString) {
                if (string.IsNullOrEmpty(originalScriptString))
                    return string.Empty;
    
                string regExReplace = "([^\"\'/]+|\"[^\"\\]*(?:\\.[^\"\\]*)*\"[^\"\'/]*|'[^'\\]*(?:\\.[^'\\]*)*'[^\"\'/]*)|/\\*.*?\\*/";
                // Remove all instances of /* .... */ spanning multiple lines if necessary
                string optimized = Regex.Replace(originalScriptString, regExReplace, "$1", RegexOptions.Singleline);
                // Remove comments and whitespace, line-by-line:
                // "^\s*//.*$\n?" - Single-line comment, also look for leading whitespace and trailing newline
                // "^\s*$\n" - Blank line (with or without whitespace) and trailing newline
                // "^\s+" - Leading whitespace
                // "\s+$" - Trailing whitespace
                optimized = Regex.Replace(optimized, @"^\s*//.*$\n?|^\s*$\n|^\s+|\s+$", "", RegexOptions.Multiline);
    
                return optimized;
            }

    Υ.Γ. ... a tribute to open source development ?? :D

    Angel
    O:]
  •  09-12-2010, 12:38 61407 σε απάντηση της 61406

    Απ: Text περιεχόμενα ενός Master Page στο PreRender ...

    Άγγελε, το RegExp το έγραψες με το χέρι ή το έκανες verify με κανένα tool;

    Παναγιώτης Κεφαλίδης

    "Για να επιτύχεις, θα πρέπει το πάθος σου για την επιτυχία να είναι μεγαλύτερο απο τον φόβο σου για την αποτυχία"

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Παρακαλώ διαβάστε τους όρους χρήσης.
  •  09-12-2010, 12:55 61408 σε απάντηση της 61407

    Απ: Text περιεχόμενα ενός Master Page στο PreRender ...

    ... χεχε ... "κουτό" .. το πήρα   φ υ σ ι κ ά  απο κάποιο forum που δε θυμάμαι καν πια !

    ( αλλά μου έπαιξε μια χαρά όπου το χρησιμοποίησα - δεν κόβει τα new line chars, αλλά μάλλον είναι πιο "ασφαλές" για syntax errors έτσι τελικά  )

    Angel
    O:]
  •  09-12-2010, 16:02 61412 σε απάντηση της 61408

    Απ: Text περιεχόμενα ενός Master Page στο PreRender ...

    Αχ, crap.. οκ. Έλεγα μήπως είχες κανά άλλο tool, έχω κανα δυο regexp builders αλλα πάντα κοιτάω για κάτι καλύτερο, if you get what I mean.. Smile

    Παναγιώτης Κεφαλίδης

    "Για να επιτύχεις, θα πρέπει το πάθος σου για την επιτυχία να είναι μεγαλύτερο απο τον φόβο σου για την αποτυχία"

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Παρακαλώ διαβάστε τους όρους χρήσης.
  •  09-12-2010, 20:41 61415 σε απάντηση της 61412

    Απ: Text περιεχόμενα ενός Master Page στο PreRender ...

    Trasys ??? Brussels ??? ... ρε 'συ, σε καιρούς κρίσης τα καλά μυαλά πρέπει να τα κρατάμε στη χώρα ρε ... :(

    Angel
    O:]
  •  14-12-2010, 14:22 61633 σε απάντηση της 61415

    Απ: Text περιεχόμενα ενός Master Page στο PreRender ...

    anjelinio:
    Trasys ??? Brussels ??? ... ρε 'συ, σε καιρούς κρίσης τα καλά μυαλά πρέπει να τα κρατάμε στη χώρα ρε ... :(

    Συμφωνώ Άγγελε, αλλά δεν υπήρχε καμιά αξιόλογη προσφορά στην Ελλάδα, οπότε.. Smile


    Παναγιώτης Κεφαλίδης

    "Για να επιτύχεις, θα πρέπει το πάθος σου για την επιτυχία να είναι μεγαλύτερο απο τον φόβο σου για την αποτυχία"

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Παρακαλώ διαβάστε τους όρους χρήσης.
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems