PageSourceSearch

https://www.ui.ac.ir/uploads/assets/js/jQuery.print.js

js ui.ac.ir collected 2026-09-24 09:13:24 UTC 11,274 bytes, 279 lines download raw bytes

1/* @license 
2 * jQuery.print, version 1.6.0
3 *  (c) Sathvik Ponangi, Doers' Guild
4 * Licence: CC-By (http://creativecommons.org/licenses/by/3.0/)
5 *--------------------------------------------------------------------------*/
6(function ($) {
7    "use strict";
8    // A nice closure for our definitions
9
10    function jQueryCloneWithSelectAndTextAreaValues(elmToClone, withDataAndEvents, deepWithDataAndEvents) {
11        // Replacement jQuery clone that also clones the values in selects and textareas as jQuery doesn't for performance reasons - https://stackoverflow.com/questions/742810/clone-isnt-cloning-select-values
12        // Based on https://github.com/spencertipping/jquery.fix.clone
13        var $elmToClone = $(elmToClone),
14            $result           = $elmToClone.clone(withDataAndEvents, deepWithDataAndEvents),
15            $my_textareas     = $elmToClone.find('textarea').add($elmToClone.filter('textarea')),
16            $result_textareas = $result.find('textarea').add($result.filter('textarea')),
17            $my_selects       = $elmToClone.find('select').add($elmToClone.filter('select')),
18            $result_selects   = $result.find('select').add($result.filter('select')),
19            i, l, j, m;
20
21        for (i = 0, l = $my_textareas.length; i < l; ++i) {
22            $($result_textareas[i]).val($($my_textareas[i]).val());
23        }
24        for (i = 0, l = $my_selects.length;   i < l; ++i) {
25            for (j = 0, m = $my_selects[i].options.length; j < m; ++j) {
26                if ($my_selects[i].options[j].selected === true) {
27                    $result_selects[i].options[j].selected = true;
28                }
29            }
30        }
31        return $result;
32    }
33
34    function getjQueryObject(string) {
35        // Make string a vaild jQuery thing
36        var jqObj = $("");
37        try {
38            jqObj = jQueryCloneWithSelectAndTextAreaValues(string);
39        } catch (e) {
40            jqObj = $("<span />")
41                .html(string);
42        }
43        return jqObj;
44    }
45
46    function printFrame(frameWindow, content, options) {
47        // Print the selected window/iframe
48        var def = $.Deferred();
49        try {
50            frameWindow = frameWindow.contentWindow || frameWindow.contentDocument || frameWindow;
51            var wdoc = frameWindow.document || frameWindow.contentDocument || frameWindow;
52            if(options.doctype) {
53                wdoc.write(options.doctype);
54            }
55            wdoc.write(content);
56            wdoc.close();
57            var printed = false,
58                callPrint = function () {
59                    if(printed) {
60                        return;
61                    }
62                    // Fix for IE : Allow it to render the iframe
63                    frameWindow.focus();
64                    try {
65                        // Fix for IE11 - printng the whole page instead of the iframe content
66                        if (!frameWindow.document.execCommand('print', false, null)) {
67                            // document.execCommand returns false if it failed -http://stackoverflow.com/a/21336448/937891
68                            frameWindow.print();
69                        }
70                        // focus body as it is losing focus in iPad and content not getting printed
71                        $('body').focus();
72                    } catch (e) {
73                        frameWindow.print();
74                    }
75                    frameWindow.close();
76                    printed = true;
77                    def.resolve();
78                };
79            // Print once the frame window loads - seems to work for the new-window option but unreliable for the iframe
80            $(frameWindow).on("load", callPrint);
81            // Fallback to printing directly if the frame doesn't fire the load event for whatever reason
82            setTimeout(callPrint, options.timeout);
83        } catch (err) {
84            def.reject(err);
85        }
86        return def;
87    }
88
89    function printContentInIFrame(content, options) {
90        var $iframe = $(options.iframe + "");
91        var iframeCount = $iframe.length;
92        if (iframeCount === 0) {
93            // Create a new iFrame if none is given
94            $iframe = $('<iframe height="0" width="0" border="0" wmode="Opaque"/>')
95                .prependTo('body')
96                .css({
97                    "position": "absolute",
98                    "top": -999,
99                    "left": -999
100                });
101        }
102        var frameWindow = $iframe.get(0);
103        return printFrame(frameWindow, content, options)
104            .done(function () {
105                // Success
106                setTimeout(function () {
107                    // Wait for IE
108                    if (iframeCount === 0) {
109                        // Destroy the iframe if created here
110                        $iframe.remove();
111                    }
112                }, 1000);
113            })
114            .fail(function (err) {
115                // Use the pop-up method if iframe fails for some reason
116                console.error("Failed to print from iframe", err);
117                printContentInNewWindow(content, options);
118            })
119            .always(function () {
120                try {
121                    options.deferred.resolve();
122                } catch (err) {
123                    console.warn('Error notifying deferred', err);
124                }
125            });
126    }
127
128    function printContentInNewWindow(content, options) {
129        // Open a new window and print selected content
130        var frameWindow = window.open();
131        return printFrame(frameWindow, content, options)
132            .always(function () {
133                try {
134                    options.deferred.resolve();
135                } catch (err) {
136                    console.warn('Error notifying deferred', err);
137                }
138            });
139    }
140
141    function isNode(o) {
142        /* http://stackoverflow.com/a/384380/937891 */
143        return !!(typeof Node === "object" ? o instanceof Node : o && typeof o === "object" && typeof o.nodeType === "number" && typeof o.nodeName === "string");
144    }
145    $.print = $.fn.print = function () {
146        // Print a given set of elements
147        var options, $this, self = this;
148        // console.log("Printing", this, arguments);
149        if (self instanceof $) {
150            // Get the node if it is a jQuery object
151            self = self.get(0);
152        }
153        if (isNode(self)) {
154            // If `this` is a HTML element, i.e. for
155            // $(selector).print()
156            $this = $(self);
157            if (arguments.length > 0) {
158                options = arguments[0];
159            }
160        } else {
161            if (arguments.length > 0) {
162                // $.print(selector,options)
163                $this = $(arguments[0]);
164                if (isNode($this[0])) {
165                    if (arguments.length > 1) {
166                        options = arguments[1];
167                    }
168                } else {
169                    // $.print(options)
170                    options = arguments[0];
171                    $this = $("html");
172                }
173            } else {
174                // $.print()
175                $this = $("html");
176            }
177        }
178        // Default options
179        var defaults = {
180            globalStyles: true,
181            mediaPrint: false,
182            stylesheet: null,
183            noPrintSelector: ".no-print",
184            iframe: true,
185            append: null,
186            prepend: null,
187            manuallyCopyFormValues: true,
188            deferred: $.Deferred(),
189            timeout: 750,
190            title: null,
191            doctype: '<!doctype html>'
192        };
193        // Merge with user-options
194        options = $.extend({}, defaults, (options || {}));
195        var $styles = $("");
196        if (options.globalStyles) {
197            // Apply the stlyes from the current sheet to the printed page
198            $styles = $("style, link, meta, base, title");
199        } else if (options.mediaPrint) {
200            // Apply the media-print stylesheet
201            $styles = $("link[media=print]");
202        }
203        if (options.stylesheet) {
204            // Add a custom stylesheet if given
205            $styles = $.merge($styles, $('<link rel="stylesheet" href="' + options.stylesheet + '">'));
206        }
207        // Create a copy of the element to print
208        var copy = jQueryCloneWithSelectAndTextAreaValues($this);
209        // Wrap it in a span to get the HTML markup string
210        copy = $("<span/>")
211            .append(copy);
212        // Remove unwanted elements
213        copy.find(options.noPrintSelector)
214            .remove();
215        // Add in the styles
216        copy.append(jQueryCloneWithSelectAndTextAreaValues($styles));
217        // Update title
218        if (options.title) {
219            var title = $("title", copy);
220            if (title.length === 0) {
221                title = $("<title />");
222                copy.append(title);                
223            }
224            title.text(options.title);            
225        }
226        // Appedned content
227        copy.append(getjQueryObject(options.append));
228        // Prepended content
229        copy.prepend(getjQueryObject(options.prepend));
230        if (options.manuallyCopyFormValues) {
231            // Manually copy form values into the HTML for printing user-modified input fields
232            // http://stackoverflow.com/a/26707753
233            copy.find("input")
234                .each(function () {
235                    var $field = $(this);
236                    if ($field.is("[type='radio']") || $field.is("[type='checkbox']")) {
237                        if ($field.prop("checked")) {
238                            $field.attr("checked", "checked");
239                        }
240                    } else {
241                        $field.attr("value", $field.val());
242                    }
243                });
244            copy.find("select").each(function () {
245                var $field = $(this);
246                $field.find(":selected").attr("selected", "selected");
247            });
248            copy.find("textarea").each(function () {
249                // Fix for https://github.com/DoersGuild/jQuery.print/issues/18#issuecomment-96451589
250                var $field = $(this);
251                $field.text($field.val());
252            });
253        }
254        // Get the HTML markup string
255        var content = copy.html();
256        // Notify with generated markup & cloned elements - useful for logging, etc
257        try {
258            options.deferred.notify('generated_markup', content, copy);
259        } catch (err) {
260            console.warn('Error notifying deferred', err);
261        }
262        // Destroy the copy
263        copy.remove();
264        if (options.iframe) {
265            // Use an iframe for printing
266            try {
267                printContentInIFrame(content, options);
268            } catch (e) {
269                // Use the pop-up method if iframe fails for some reason
270                console.error("Failed to print from iframe", e.stack, e.message);
271                printContentInNewWindow(content, options);
272            }
273        } else {
274            // Use a new window for printing
275            printContentInNewWindow(content, options);
276        }
277        return this;
278    };
279})(jQuery);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.