Advertisement
Guest User

Untitled

a guest
Sep 26th, 2011
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // ==UserScript==
  2. // @author: ymi@ya.ru
  3. // @name           DiaryPlugin
  4. // @namespace      $diaryPlugin
  5. // @include http://diary.ru/*
  6. // @include http://*.diary.ru/*
  7. // @title: Some useful utilites for Diary.RU
  8. // @description: Some useful utilites for Diary.RU
  9. // @version: 1.0.10
  10. // ==/UserScript==
  11.  
  12.  
  13. var $diaryPlugin = {
  14.     filters : [
  15.         {enable: 0, name: "поднятая запись", filters: [
  16.             {regExp: 0, pattern: "запись создана"}
  17.         ]},
  18.         {enable: 0, name: "куклы", filters: [
  19.             {regExp: 0, pattern: "мейк"},
  20.             {regExp: 0, pattern: "мэйк"},
  21.             {regExp: 0, pattern: "бжд"},
  22.             {regExp: 0, pattern: "Soom"},
  23.             {regExp: 0, pattern: "клир"}
  24.         ]},
  25.         {enable: 0, name: "слэш", filters: [
  26.             {regExp: 0, pattern: "косплей"},
  27.             {regExp: 0, pattern: "яой"},
  28.             {regExp: 0, pattern: "yaoi"},
  29.             {regExp: 0, pattern: "пейринг"},
  30.             {regExp: 0, pattern: "peyring"},
  31.             {regExp: 0, pattern: "pg-13"},
  32.             {regExp: 0, pattern: "pg-18"},
  33.             {regExp: 0, pattern: "pg-24"},
  34.             {regExp: 0, pattern: "nc-13"},
  35.             {regExp: 0, pattern: "nc-18"},
  36.             {regExp: 0, pattern: "nc-24"},
  37.             {regExp: 0, pattern: "слеш"},
  38.             {regExp: 0, pattern: "B-13"},
  39.             {regExp: 1, pattern: "\\sфик(?|.|..)\\s"}
  40.         ]},
  41.         {enable: 0, name: "флешмобы, тесты, анкеты", filters: [
  42.             {regExp: 0, pattern: "aeterna"},
  43.             {regExp: 0, pattern: "флешмоб"},
  44.             {regExp: 0, pattern: "флэшмоб"},
  45.             {regExp: 0, pattern: "flashmob"},
  46.             {regExp: 1, pattern: "\\sвы\\s*отмечаетесь\\s*в\\s*ком*ент"},
  47.             {regExp: 1, pattern: "\\sпсихологич.*\\sтест"},
  48.             {regExp: 0, pattern: "осальте"},
  49.             {regExp: 0, pattern: "осалить"},
  50.             {regExp: 0, pattern: "осалил"},
  51.             {regExp: 0, pattern: "uborshizzza"},
  52.             {regExp: 1, pattern: "\\\\s.*\\sдаю\\s.*\\s\\d*\\s.*и\\s"},
  53.             {regExp: 0, pattern: "Пройти тест"}
  54.         ]},
  55.         {enable: 0, name: "остальное", filters: [
  56.             {regExp: 0, pattern: "Проголосуй за цитату"},
  57.             {regExp: 0, pattern: "пикспам"}
  58.         ]}
  59.     ],
  60.     init : function(doc) {
  61.         alert('init');
  62.         jQuery.noConflict();
  63.  
  64.         if (doc.__dp$already) return;
  65.         else doc.__dp$already = true;
  66.  
  67.         try {
  68.             var d = doc, context = this;
  69.             jQuery(doc).ready(function() {
  70.                 context.addMyDesignTool(d);
  71.                 context.extendPage(d);
  72.                 try {
  73.                     context.addFilterEditorTool(d);
  74.                 } catch(e) {
  75.                     $diaryPlugin.debug(e);
  76.                 }
  77.                 context.applyFilters(doc);
  78.             });
  79.         } catch(e) {
  80.             doc.__dp$already = false;
  81.             $diaryPlugin.debug(e);
  82.             throw e;
  83.         }
  84.     },
  85.     debug : function(e) {
  86. //        var msg = e.message;
  87. //        msg += "\n";
  88. //        if (e.stack) msg += e.stack;
  89. //        alert(msg);
  90.     },
  91.     addFilterEditorTool : function(doc) {
  92.         // restore
  93.         var filters = unsafeWindow.localStorage ? unsafeWindow.localStorage['blockFilterSettings diary.ru'] : null;
  94.         if (filters) this.filters = (eval(filters));
  95.  
  96.         var check = jQuery(doc).find('#writeThisDiary');
  97.         if (check.length < 1) return;
  98.  
  99.         var action = jQuery('<a href="javascript:;">Мои фильтры</a>');
  100.         action.appendTo(jQuery('<li id="editMyFilters"></li>').insertBefore(check));
  101.  
  102.         var context = this;
  103.  
  104.         var pane = jQuery('<div class="settingsPane"><style>.filterEnabled div.filterGroupHead{background-color:#506050;color:white;} .filterDisabled div.filterGroupHead{background-color:#605050;color:white;} .filterEnabled{background-color:#f0fff0;} .filterDisabled{background-color:#fff0f0;} div.settingsPane div,div.settingsPane span,div.settingsPane td,div.settingsPane input{font-size:x-small;font-family:sans-serif;font-weight:normal;font-style:normal;text-decoration:none;color:black;}</style><div style="position:fixed;top:0;left:0;bottom:0;right:0;background-color:#000000;opacity:0.6;"><br/></div><div style="position:fixed;left:100px;right:100px;top:50px;bottom:50px;"><div style="color:white;font-size:x-large;font-weight:bolder;padding:0;padding-bottom:1px;margin:0;text-align:left;float:left;">настройка фильтров:</div><div style="text-align:right;"><span class="closeAction" style="font-size:large;font-weight:bolder;color:#ffc0c0;cursor:pointer;">закрыть</span><span class="saveAction" style="font-size:large;font-weight:bolder;color:#ffffc0;cursor:pointer;">&nbsp; сохранить</span></div><div style="background-color:white;position:fixed;left:100px;right:100px;top:60pt;bottom:50pt;overflow-y:auto;margin:0;padding:2pt;text-align:left;" class="contentPane"></div></div></div>');
  105.         pane.appendTo(jQuery(doc).find('body'));
  106.         pane.hide();
  107.  
  108.         var contentPane = pane.find("div.contentPane");
  109.         var closeAction = pane.find("span.closeAction");
  110.         var saveAction = pane.find("span.saveAction");
  111.  
  112.         function enableSaveAction() {
  113.             saveAction.show()
  114.         }
  115.  
  116.         var body = jQuery(doc).find('body');
  117.         var st = body.scrollTop();
  118.  
  119.         function hideForm() {
  120.             saveAction.hide();
  121.             contentPane.children("*").remove();
  122.             pane.hide();
  123.             filters = (eval(unsafeWindow.JSON.stringify(context.filters)));
  124.             try {
  125.                 body.scrollTop(st - 10);
  126.             } catch(e) {
  127.             }
  128.             try {
  129.                 body.scrollTop(st + 10);
  130.             } catch(e) {
  131.             }
  132.             try {
  133.                 body.scrollTop(st);
  134.             } catch(e) {
  135.             }
  136.             st = body.scrollTop();
  137.         }
  138.  
  139.         function showForm() {
  140.             hideForm();
  141.  
  142.             var p = jQuery('<form action="javascript:;"></form>').appendTo(contentPane);
  143.  
  144.             function addFilter(g, f) {
  145.                 var d = jQuery('<div class="filter" id="filterGroup' + g + 'id' + f + '">RegExp:&nbsp;</div>').appendTo(p.find("#filterGroup" + g));
  146.  
  147.                 var di = jQuery('<input class="filterIsRegExp" type="checkbox">').appendTo(d);
  148.                 di[0].checked = !!filters[g].filters[f].regExp;
  149.                 di.click(function() {
  150.                     var di = jQuery(this);
  151.                     var d = di.parents("div.filter");
  152.                     var g = d[0].id.split("filterGroup")[1];
  153.                     var f = g.split("id")[1];
  154.                     g = g.split("id")[0];
  155.                     if (this.checked) {
  156.                         if (filters[g].filters[f].length < 1) {
  157.                             alert("строка с регулярным выражением не может быть пустой");
  158.                             this.checked = false;
  159.                         } else {
  160.                             try {
  161.                                 new RegExp(filters[g].filters[f].pattern, "i");
  162.                             } catch(e) {
  163.                                 alert("неверный синтаксис регулярного выражения: " + filters[g].filters[f].pattern);
  164.                                 this.checked = false;
  165.                             }
  166.                         }
  167.                     }
  168.  
  169.                     filters[g].filters[f].regExp = this.checked;
  170.                     enableSaveAction();
  171.                 });
  172.  
  173.                 jQuery('<strong>&nbsp;</strong>').appendTo(d);
  174.                 di = jQuery('<input class="filterPattern" type="text" size="40">').appendTo(d);
  175.                 di.val(filters[g].filters[f].pattern);
  176.                 di.click(enableSaveAction);
  177.                 di.change(function() {
  178.                     enableSaveAction();
  179.                     var di = jQuery(this);
  180.                     var d = di.parents("div.filter");
  181.                     var g = d[0].id.split("filterGroup")[1];
  182.                     var f = g.split("id")[1];
  183.                     g = g.split("id")[0];
  184.                     if (filters[g].filters[f].regExp) {
  185.                         try {
  186.                             new RegExp(di.val(), "i");
  187.                         } catch(e) {
  188.                             alert("неверный синтаксис регулярного выражения: " + di.val());
  189.                             d.find(".filterIsRegExp").checked(false);
  190.                         }
  191.                     }
  192.                     filters[g].filters[f].pattern = di.val();
  193.                 });
  194.  
  195.                 jQuery('<strong>&nbsp;</strong>').appendTo(d);
  196.                 di = jQuery('<input class="filterButton" type="button" value="Удалить">').appendTo(d);
  197.                 di.click(function() {
  198.                     enableSaveAction();
  199.                     var di = jQuery(this);
  200.                     var d = di.parents("div.filter");
  201.                     var g = d[0].id.split("filterGroup")[1];
  202.                     var f = g.split("id")[1];
  203.                     g = g.split("id")[0];
  204.                     filters[g].filters[f] = false;
  205.                     d.remove();
  206.                 });
  207.             }
  208.  
  209.             function addGroup(g) {
  210.                 var r = jQuery('<div class="filterGroup" id="filterGroup' + g + '"/>').prependTo(p);
  211.  
  212.                 for (var f = 0; f < filters[g].filters.length; f++) addFilter(g, f);
  213.  
  214.                 var t = jQuery('<div class="filterGroupHead"><strong>Группа фильтров:&nbsp;</strong></div>').prependTo(r);
  215.                 var ti = jQuery('<input type="text" size="40" class="groupName">').appendTo(t);
  216.                 ti.val(filters[g].name);
  217.                 ti.click(enableSaveAction);
  218.                 ti.change(function() {
  219.                     enableSaveAction();
  220.                     var ti = jQuery(this);
  221.                     var r = ti.parents("div.filterGroup");
  222.                     var g = r[0].id.split("filterGroup")[1];
  223.                     filters[g].name = ti.val();
  224.                 });
  225.  
  226.                 jQuery('<strong>&nbsp;</strong>').appendTo(t);
  227.                 ti = jQuery('<input class="filterButton" type="button">').appendTo(t);
  228.                 if (filters[g].enable) {
  229.                     r.addClass("filterEnabled");
  230.                     ti.val("Выключить группу");
  231.                 } else {
  232.                     r.addClass("filterDisabled");
  233.                     ti.val("Включить группу");
  234.                 }
  235.                 ti.click(function() {
  236.                     enableSaveAction();
  237.                     var ti = jQuery(this);
  238.                     var r = ti.parents("div.filterGroup");
  239.                     var g = r[0].id.split("filterGroup")[1];
  240.                     filters[g].enable = !filters[g].enable;
  241.                     if (filters[g].enable) {
  242.                         r.removeClass("filterDisabled");
  243.                         r.addClass("filterEnabled");
  244.                         ti.val("Выключить группу");
  245.                     } else {
  246.                         r.removeClass("filterEnabled");
  247.                         r.addClass("filterDisabled");
  248.                         ti.val("Включить группу");
  249.                     }
  250.                 });
  251.  
  252.                 jQuery('<strong>&nbsp;</strong>').appendTo(t);
  253.                 ti = jQuery('<input class="filterButton" type="button" value="Удалить группу">').appendTo(t);
  254.                 ti.click(function() {
  255.                     enableSaveAction();
  256.                     var ti = jQuery(this);
  257.                     var r = ti.parents("div.filterGroup");
  258.                     var g = r[0].id.split("filterGroup")[1];
  259.                     filters[g] = false;
  260.                     r.remove();
  261.                 });
  262.  
  263.                 jQuery('<strong>&nbsp;</strong>').appendTo(t);
  264.                 ti = jQuery('<input class="filterButton" type="button" value="Добавить фильтр">').appendTo(t);
  265.                 ti.click(function() {
  266.                     enableSaveAction();
  267.                     var ti = jQuery(this);
  268.                     var r = ti.parents("div.filterGroup");
  269.                     var g = r[0].id.split("filterGroup")[1];
  270.                     var f = filters[g].filters.length;
  271.                     filters[g].filters[f] = {regExp: 0, pattern: ""};
  272.                     addFilter(g, f);
  273.                 });
  274.             }
  275.  
  276.             for (var g = 0; g < filters.length; g++) addGroup(g);
  277.  
  278.             var t = jQuery('<div class="filterGroup"/>').prependTo(p);
  279.             t = jQuery('<div class="filterGroupHead"></div>').appendTo(t);
  280.             t = jQuery('<input class="filterButton" type="button" value="Добавить новую группу">').appendTo(t);
  281.             t.click(function() {
  282.                 enableSaveAction();
  283.                 var g = filters.length;
  284.                 filters[g] = {enable: 1, name: "Группа (" + g + ")", filters:[]};
  285.                 addGroup(g);
  286.             });
  287.  
  288.             pane.show();
  289.         }
  290.  
  291.         closeAction.click(function() {
  292.             if (saveAction.css("display") == 'block') {
  293.                 if (confirm("закрыть без сохранения?")) {
  294.                     hideForm();
  295.                 }
  296.             } else hideForm();
  297.         });
  298.  
  299.         saveAction.click(function() {
  300.             // store filters:
  301.             context.filters = [];
  302.             for (var i = 0; i < filters.length; i++)
  303.                 if (filters[i]) {
  304.                     var fg = {enable: filters[i].enable, name: filters[i].name, filters:[]};
  305.                     for (var j = 0; j < filters[i].filters.length; j++)
  306.                         if (filters[i].filters[j])
  307.                             if (filters[i].filters[j].pattern.length > 0)
  308.                                 fg.filters[fg.filters.length] = filters[i].filters[j];
  309.                     context.filters[context.filters.length] = fg;
  310.                 }
  311.  
  312.             var stored = unsafeWindow.JSON.stringify(context.filters);
  313.             if (unsafeWindow.localStorage) {
  314.                 unsafeWindow.localStorage['blockFilterSettings diary.ru'] = stored;
  315.             } else {
  316.                 alert('Ваш браузер не поддерживает сохранение.\nВы можете самостоятельно изменить скрипт, заменив значение filters : {...} на:\nfilters : stored');
  317.             }
  318.  
  319.             hideForm();
  320.         });
  321.  
  322.         action.click(showForm);
  323.     },
  324.     applyFilters : function(doc, parentDoc) {
  325.         if (!parentDoc) parentDoc = doc;
  326.         if (!this.blockCounter) this.blockCounter = 0;
  327.  
  328.         var posts = jQuery(doc).find('div.postInner div.paragraph');
  329.         for (var i = 0; i < posts.length; i++) {
  330.             var post = jQuery(posts[i]);
  331.             var text = posts[i].innerHTML.toLowerCase();
  332.             for (var g = 0; g < this.filters.length; g++)
  333.                 if (this.filters[g].enable) {
  334.                     var group = this.filters[g];
  335.                     var filterResult = false;
  336.                     for (var f = 0; f < group.filters.length; f++) {
  337.                         var test;
  338.                         if (group.filters[f].regExp) {
  339.                             try {
  340.                                 if (!(group.filters[f].regExp instanceof RegExp))
  341.                                     group.filters[f].regExp = new RegExp(group.filters[f].pattern, 'i');
  342.                                 test = !!text.match(group.filters[f].regExp);
  343.                             } catch(e) {
  344.                                 $diaryPlugin.debug(e);
  345.                             }
  346.                         } else {
  347.                             test = text.indexOf(group.filters[f].pattern.toLowerCase()) >= 0;
  348.                         }
  349.  
  350.                         if (test) {
  351.                             if (!filterResult) filterResult = "<strong>" + group.name + "</strong>: ";
  352.                             else  filterResult += "; ";
  353.                             filterResult += group.filters[f].pattern;
  354.                         }
  355.                     }
  356.                     if (filterResult) {
  357.                         this.blockCounter++;
  358.                         var blockId = 'blocked' + this.blockCounter;
  359.                         var action = jQuery('<a href="#' + blockId + '" class="diaryFilterGroup">[' + filterResult + ']</a>');
  360.                         post.wrapInner('<div id="div' + blockId + '"  class="diaryFilterBlock" style="display:none;"/>');
  361.                         action.prependTo(post);
  362.                         action.click(function() {
  363.                             var post = jQuery(parentDoc).find('#div' + this.href.split('#')[1]);
  364.                             if (post.css('display') == "block") {
  365.                                 post.css('display', 'none');
  366.                             } else {
  367.                                 post.css('display', 'block');
  368.                             }
  369.                         });
  370.                     }
  371.                 }
  372.         }
  373.     },
  374.     extendPage : function(doc) {
  375.         var pg = jQuery(doc).find('#pageBar');
  376.         if (pg.length < 1) return;
  377.  
  378.         var pagePfx = "";
  379.         var pageSfx = "";
  380.  
  381.         function getFrom(href) {
  382.             pagePfx = href.substring(0, href.indexOf("from=") + 5);
  383.             var from = href.substring(href.indexOf("from=") + 5);
  384.             var i = from.indexOf("&");
  385.             if (i > 0) {
  386.                 pageSfx = from.substring(i);
  387.                 from = from.substring(0, i);
  388.             }
  389.             if (from.length) {
  390.                 try {
  391.                     from = 1 * from;
  392.                 } catch(e) {
  393.                     from = 0;
  394.                 }
  395.             }
  396.             return from;
  397.         }
  398.  
  399.         // pages
  400.         var nonCommentPage = doc.location.href.toLowerCase().indexOf(".htm") < 0;
  401.         var cs = nonCommentPage ? jQuery(doc).find('div.singlePost:first') : jQuery(doc).find('#commentsArea_title').next();
  402.         var pager = pg.find('tr:not(.pages_str) > td').children('*');
  403.         var currentPage = false;
  404.         var lastPage = 1;
  405.         var pt = false;
  406.         var pSize = false; // messages on page
  407.         var pages = [];
  408.         for (var i = 0; i < pager.length - 1; i++) {
  409.             if (pager[i].tagName.toLowerCase() == "a") {
  410.                 var title = pager[i].innerHTML;
  411.                 if (title && title.indexOf("…") < 0) {
  412.                     var rP = "rP" + title;
  413.                     var href = "#rPi" + title;
  414.                     jQuery(pager[i]).addClass(rP + "a");
  415.                     var link = jQuery('<a name="rPi' + title + '"/><div class="restorePage ' + rP + '"><a href="' + href + '" class="' + rP + '">[раскрыть страницу №' + title + ']</a></div>');
  416.                     pages[pages.length] = {page:title, href:pager[i].href, link:link, rP:rP};
  417.                     pager[i].href = href;
  418.                     if (currentPage) {
  419.                         link.insertBefore(pg);
  420.                         if (!pSize) if (pages.length > pt + 1) {
  421.                             pSize = getFrom(pages[pages.length - 1].href) - getFrom(pages[pages.length - 2].href);
  422.                         }
  423.                     } else {
  424.                         link.insertBefore(cs);
  425.                         pt = title;
  426.                     }
  427.                     if (lastPage < 1 * title) lastPage = 1 * title;
  428.                 }
  429.             } else {
  430.                 currentPage = 1 * pt + 1;
  431.                 if (pages.length > 2) {
  432.                     pSize = getFrom(pages[pages.length - 1].href) - getFrom(pages[pages.length - 2].href);
  433.                 }
  434.                 pt = pages.length;
  435.                 if (lastPage < 1 * pt) lastPage = 1 * pt;
  436.             }
  437.         }
  438.  
  439.         var elmPrev = jQuery('<a name="elmPrev"/>');
  440.         elmPrev.insertBefore(cs);
  441.         var elmNext = jQuery('<a name="elmNext"/>');
  442.         elmNext.insertBefore(pg);
  443.  
  444.         // get page
  445.         function getPage(p) {
  446.             jQuery.get(p.href, function(data) {
  447.                 try {
  448.                     var ipoint = p.link[0];
  449.                     if (!ipoint) return;
  450.                     ipoint = jQuery(ipoint);
  451.                     p.link = false;
  452.  
  453.                     var dataObj = jQuery(data);
  454.                     context.applyFilters(dataObj, doc);
  455.  
  456.                     var elms = dataObj.find(includeSelector);
  457.                     for (var e = 0; e < elms.length; e++) {
  458.                         try {
  459.                             if (elms[e].id) {
  460.                                 if (!ddoc.find('#' + elms[e].id).length) {
  461.                                     ipoint = jQuery(elms[e]).insertAfter(ipoint);
  462.                                 }
  463.                             } else {
  464.                                 ipoint = jQuery(elms[e]).insertAfter(ipoint);
  465.                             }
  466.                         } catch(ex) {
  467.                             throw {message: '#' + elms[e].id + '\n' + ex};
  468.                         }
  469.                     }
  470.                     jQuery("." + p.rP).css("display", "none").remove();
  471.                     jQuery("." + p.rP + "a").replaceWith('<strong>' + p.page + "</strong>");
  472.  
  473.                     elmNext.remove();
  474.                     elmNext = jQuery('<a name="elmNext"/>');
  475.                     elmNext.insertBefore(pg);
  476.                 } catch(e) {
  477.                     $diaryPlugin.debug(e);
  478.                     alert("error on page extends: " + unsafeWindow.JSON.stringify(e));
  479.                 }
  480.             });
  481.         }
  482.  
  483.         function get(pageNumber) {
  484.             var extended = false;
  485.             for (var p = 0; p < pages.length; p++)
  486.                 if (pages[p].page == pageNumber) {
  487.                     if (pages[p].link) {
  488.                         getPage(pages[p]);
  489.                     }
  490.                     extended = true;
  491.                     break;
  492.                 }
  493.             if (!extended) {
  494.  
  495.                 var link;
  496.                 if (pageNumber < currentPage) {
  497.                     link = elmPrev;
  498.                     jQuery('<strong>' + pageNumber + '</strong>').insertBefore(jQuery(pager[0]));
  499.                 } else {
  500.                     link = elmNext;
  501.                     jQuery('<strong>' + pageNumber + '</strong>').insertAfter(jQuery(pager[pager.length - 1]));
  502.                 }
  503.  
  504.                 getPage({
  505.                     page: pageNumber,
  506.                     href: pagePfx + (pSize * pageNumber) + pageSfx,
  507.                     link: link,
  508.                     rP: "rP" + pageNumber
  509.                 });
  510.             }
  511.         }
  512.  
  513.         //prevous & next pages
  514.         var pn = pg.find('tr.pages_str > td');
  515.  
  516.         var prev = jQuery(pn[0]).children("a");
  517.         if (prev[0]) {
  518.             var prevPage = 1;
  519.             prev[0].href = "#rPi" + (currentPage - prevPage);
  520.             prev.click(function() {
  521.                 var pNumber = currentPage - prevPage;
  522.                 if (pNumber >= 0) {
  523.                     prevPage++;
  524.                     prev[0].href = "#rPi" + pNumber;
  525.                     get(pNumber);
  526.                 } else {
  527.                     prev.hide().remove();
  528.                 }
  529.             });
  530.         }
  531.  
  532.         var next = jQuery(pn[1]).children("a");
  533.         if (next[0]) {
  534.             var nextPage = 1;
  535.             next[0].href = "#rPi" + (currentPage + nextPage);
  536.             next.click(function() {
  537.                 var pNumber = currentPage + nextPage;
  538.                 if (pNumber >= 0) {
  539.                     nextPage++;
  540.                     next[0].href = "#rPi" + pNumber;
  541.                     get(pNumber);
  542.                 }
  543.             });
  544.         }
  545.  
  546.         var context = this;
  547.         var includeSelector = nonCommentPage ? "div.singlePost" : "div.singleComment";
  548.         var ddoc = jQuery(doc);
  549.         for (var i = 0; i < pages.length; i++)if (pages[i]) {
  550.             ddoc.find("a.rP" + pages[i].page + ", a.rP" + pages[i].page + "a").click(function() {
  551.                 var t = this.href.split("#rPi")[1];
  552.                 get(t);
  553.             });
  554.         }
  555.  
  556.         if (currentPage >= 8) {
  557.             jQuery(".rP1").css("display", "none").remove();
  558.             jQuery(".rP1a").replaceWith('');
  559.         }
  560.  
  561.         var pgNav = jQuery('<div style="text-align:center;width:100%;"><span>перейти на страницу: <input id="pgNavPage" value="' + (lastPage + 1) + '" type="text" maxlength="4" size="4"/><input  id="pgNavPageGo" type="button" value="перейти"/></span><div>').insertAfter(pg);
  562.         var navAct = function() {
  563.             var page = pgNav.find('#pgNavPage')[0].value;
  564.             try {
  565.                 page = 1 * page - 1;
  566.                 if (page < 1) return;
  567.                 document.location.href = pagePfx + (pSize * page) + pageSfx;
  568.             } catch(e) {
  569.                 $diaryPlugin.debug(e);
  570.             }
  571.         };
  572.         pgNav.find('#pgNavPageGo').click(navAct);
  573. //        pgNav.find('#pgNavPage').change(navAct);
  574.         pgNav.find('#pgNavPage').keypress(function(key) {
  575.             if (key.keyCode == '13') {
  576.                 navAct();
  577.             }
  578.         });
  579.     },
  580.     addMyDesignTool : function(doc) {
  581.         if (jQuery(doc).find('#communityFav').length < 1 &&
  582.             jQuery(doc).find('#authorFav').length < 1)return;
  583.  
  584.         var action = jQuery('<a href="javascript:;">В моём дизайне</a>');
  585.         action.appendTo(jQuery('<li id="showInMyDesign"></li>').insertBefore(jQuery(doc).find('#writeThisDiary')));
  586.  
  587.         var link = jQuery(doc).find('#myProfileLink > a')[0].href.split('?')[1].split('/')[0];
  588.         link = 'http://static.diary.ru/userdir/' +
  589.             link.substring(0, 1) + '/' +
  590.             link.substring(1, 2) + '/' +
  591.             link.substring(2, 3) + '/' +
  592.             link.substring(3, 4) + '/' +
  593.             link + '/';
  594.  
  595.         var journalStyle = doc.getElementById('link_journal_css');
  596.         var userStyle = doc.getElementById('link_user_css');
  597.         if (!userStyle) {
  598.             userStyle = doc.createElement('link');
  599.             userStyle.setAttribute('rel', 'stylesheet');
  600.             userStyle.setAttribute('href', 'about:blank');
  601.             doc.getElementsByTagName('head').item(0).appendChild(userStyle);
  602.         }
  603.         var thisJournalCSS = journalStyle.href;
  604.         var thisUserCSS = userStyle.href;
  605.         var myJournalCSS = link + 'journal.css';
  606.         var myUserCSS = link + 'user.css';
  607.  
  608.         var myCSS = false;
  609.         action.click(function() {
  610.             if (myCSS) {
  611.                 journalStyle.href = thisJournalCSS;
  612.                 userStyle.href = thisUserCSS;
  613.                 action.html("В моём дизайне");
  614.             } else {
  615.                 journalStyle.href = myJournalCSS;
  616.                 userStyle.href = myUserCSS;
  617.                 action.html("В авторском дизайне");
  618.             }
  619.             myCSS = !myCSS;
  620.         });
  621.     },
  622.     loadScript : function(doc, src) {
  623.         var hd = doc.getElementsByTagName('head');
  624.         var lib = doc.createElement('script');
  625.         lib.src = 'http://yandex.st/jquery/1.4.4/jquery.min.js';
  626.         lib.type = 'text/javascript';
  627.         hd[0].appendChild(lib);
  628.     },
  629.     jqWait : function() {
  630.         alert('jqwait');
  631.         if (typeof unsafeWindow.jQuery == 'undefined') {
  632.             window.setTimeout($diaryPlugin.jqWait, 800);
  633.         } else {
  634.             window.jQuery = unsafeWindow.jQuery;
  635.             $diaryPlugin.init(unsafeWindow.document);
  636.         }
  637.     },
  638.     documentWait : function() {
  639.         alert('docwait');
  640.         var hd = unsafeWindow.document.getElementsByTagName('head');
  641.         if (!hd || hd.length < 1) {
  642.             window.setTimeout($diaryPlugin.documentWait, 800);
  643.         } else {
  644.             $diaryPlugin.loadScript(unsafeWindow.document, 'http://yandex.st/jquery/1.4.4/jquery.min.js');
  645.             if (!unsafeWindow.JSON || !unsafeWindow.JSON.stringify) {
  646.                 $diaryPlugin.loadScript(unsafeWindow.document, 'http://yandex.st/json2/2009-09-29/json2.min.js');
  647.             }
  648.             $diaryPlugin.jqWait();
  649.         }
  650.     }
  651. };
  652.  
  653. unsafeWindow = (typeof unsafeWindow == 'undefined') ? window : unsafeWindow;
  654. if (unsafeWindow.document.location.href.toLowerCase().indexOf("diary.ru") >= 0) $diaryPlugin.documentWait();
  655.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement