Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 13.02.2012, 05:18
Аспирант
Посмотреть профиль Найти все сообщения от bugmenot
 
Регистрация: 24.07.2009
Сообщений: 62

Сокротить код
<!DOCTYPE html>
<html dir="ltr">
    <head>
        <meta charset="utf-8" />
        <style type="text/css">
            body { font: 14px Tahoma; }                     
        </style>
        <link rel="stylesheet" type="text/css" href="wysiwyg.css" />
        <script type="text/javascript">
            function WYSIWYG(conf) {
                this.mode = "rich";
                this.textarea = document.createElement("textarea");
                this.textarea.name = conf["target"];
                this.url = (conf["url"] === undefined) ? "." : conf["url"];
            }
                                  
            WYSIWYG.prototype.execute = function(command, value) { 
                this.iframeWindow.focus();
                this.iframeWindow.document.execCommand(command, null, value);
            }
            
            WYSIWYG.prototype.setBold = function() {
                this.execute("bold", "");
            }    
            
            WYSIWYG.prototype.setItalic = function() {
                this.execute("italic", "");
            } 
            
            WYSIWYG.prototype.setUnderline = function() {
                this.execute("underline", "");
            } 
            
            WYSIWYG.prototype.setStrike = function() {
                this.execute("strikeThrough", "");
            }
            
            WYSIWYG.prototype.update = function() {             
                var self = this;
                var interval = setInterval(
                    function() {
                        self.textarea.value = self.iframeDocument.body.innerHTML;
                        if (self.mode == "plain") {
                            clearInterval(interval);
                        }
                    },
                    40
                );
            }
            
            WYSIWYG.prototype.replace = function() {                        
                var self = this;                          
                
                // [*вырезано*]
                
                /* кнопки */
                // Bold
                var button = document.createElement("div");
                button.className = "button";
                button.innerHTML = '<span style="font-weight: bold;">B</span>';
                button.title = "Bold";
                button.onclick = function() {
                    self.setBold();
                }
                iframeBar.appendChild(button); 
                // Italic
                button = document.createElement("div");
                button.className = "button";
                button.innerHTML = '<span style="font-style: italic;">I</span>';
                button.title = "Italic";
                button.onclick = function() {
                    self.setItalic();
                }
                iframeBar.appendChild(button); 
                // Underline
                button = document.createElement("div");
                button.className = "button";
                button.innerHTML = '<span style="text-decoration: underline;">U</span>';
                button.title = "Underline";
                button.onclick = function() {
                    self.setUnderline();
                }
                iframeBar.appendChild(button);
                // Striked
                button = document.createElement("div");
                button.className = "button";
                button.innerHTML = '<span style="text-decoration: line-through;">S</span>';
                button.title = "Strike";
                button.onclick = function() {
                    self.setStrike();
                }
                iframeBar.appendChild(button);
                
                // [*вырезано*]
            }          
        </script>        
    </head>
    <body>
        
        <form action="#" method="post">
            <textarea name="content" cols="48" rows="4"></textarea>
        </form>
        
        <script type="text/javascript">
            wysiwyg = new WYSIWYG({"target" : "content"});
            wysiwyg.replace();
        </script>
    </body>
</html>


Меня не устраивают повторяющиеся фрагменты кода, пробовал в массив загонять, но там eval'ом приходиться выполнять, а ещё баг получается что у всех элементов при onclick один и тот же последний метод. Довольно тупой язык...
Ответить с цитированием
  #2 (permalink)  
Старый 13.02.2012, 05:36
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

Сообщение от bugmenot
Довольно тупой язык...
может дело в тебе?
Ответить с цитированием
  #3 (permalink)  
Старый 13.02.2012, 06:41
Профессор
Посмотреть профиль Найти все сообщения от Mахmахmахimus
 
Регистрация: 10.02.2012
Сообщений: 254

блин этот чувак скрипты в шапку подключает, расходимся пасоны...
Ответить с цитированием
  #4 (permalink)  
Старый 13.02.2012, 07:48
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Сообщение от Mахmахmахimus
блин этот чувак скрипты в шапку подключает, расходимся пасоны...
Для отладки можно.
Сообщение от bugmenot
Довольно тупой язык...
Просто не нужно немножко по-дебильному кодить.
Думаете после этого вам ответят?
__________________
"Matreshka is fucking awesome" © чувак с Reddit
Matreshka.js - Три возможности
Ответить с цитированием
  #5 (permalink)  
Старый 13.02.2012, 11:36
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Сообщение от bugmenot
Довольно тупой язык...
Правила организации кода везде одинаковые.
Ответить с цитированием
  #6 (permalink)  
Старый 13.02.2012, 12:10
Аватар для Gozar
Отправить личное сообщение для Gozar Посмотреть профиль Найти все сообщения от Gozar
 
Регистрация: 07.06.2007
Сообщений: 7,504

Сообщение от bugmenot Посмотреть сообщение
Меня не устраивают повторяющиеся фрагменты кода
Чувааак, для этого придумали аргументы в функции передавать!

Сообщение от bugmenot Посмотреть сообщение
а ещё баг получается что у всех элементов при onclick один и тот же последний метод.
А ещё придумали замыкания, чтобы метод последний не был один и тот же у всех onclick. Я уж молчу про addEventListener, хотя тебе наверное уже пора узнать что это такое. Хотя у тебя проблема что ты не в курсе что функции умеют принимать аргументы.

Сообщение от bugmenot Посмотреть сообщение
Довольно тупой язык...
Он таким и будет, пока ты его не изучишь.
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.
Ответить с цитированием
  #7 (permalink)  
Старый 13.02.2012, 12:46
Аспирант
Посмотреть профиль Найти все сообщения от bugmenot
 
Регистрация: 24.07.2009
Сообщений: 62

Ок, почему не работает так?

// Bold
                var button = document.createElement("div");
                button.className = "button";
                button.innerHTML = '<span style="font-weight: bold;">B</span>';
                button.title = "Bold";
                // button.onclick = function() {
                //     self.setBold();
                // }
                button.onclick = this.setBold;
                iframeBar.appendChild(button);


Цитата:
Event thread: click
Uncaught exception: TypeError: 'this.execute' is not a function
Error thrown at line 15, column 16 in <anonymous function: WYSIWYG.prototype.setBold>() in http://localhost/html/editor/blank.htm:
this.execute("bold", "");
Ответить с цитированием
  #8 (permalink)  
Старый 13.02.2012, 13:02
Аспирант
Посмотреть профиль Найти все сообщения от bugmenot
 
Регистрация: 24.07.2009
Сообщений: 62

var buttons = [
                    {
                        "label" : '<span style="font-weight: bold;">B</span>',
                        "title" : "Bold",
                        "method" : "setBold"
                    },
                    
                    {
                        "label" : '<span style="text-decoration: underline;">U</span>',
                        "title" : "Underline",
                        "method" : "setUnderline"
                    }
                    
                ];
                
                for (var i = 0; i < buttons.length; ++i) {
                    var button = document.createElement("div"); 
                    button.className = "button";
                    button.innerHTML = buttons[i]["label"];
                    button.title =  buttons[i]["title"];
                    var method = buttons[i]["method"];
                    button.onclick = function() {
                        var code = "self." + method + "();";
                        alert(code);
                        eval(code);
                    }
                    iframeBar.appendChild(button);                
                }


А так какую бы "кнопку" не нажал выскакивает "self.setUnderline();"
Ответить с цитированием
  #9 (permalink)  
Старый 13.02.2012, 13:05
Аспирант
Посмотреть профиль Найти все сообщения от bugmenot
 
Регистрация: 24.07.2009
Сообщений: 62

Ответить с цитированием
  #10 (permalink)  
Старый 13.02.2012, 13:29
Аватар для Gozar
Отправить личное сообщение для Gozar Посмотреть профиль Найти все сообщения от Gozar
 
Регистрация: 07.06.2007
Сообщений: 7,504

Сообщение от bugmenot Посмотреть сообщение
Ок, почему не работает так?
...
Event thread: click
Uncaught exception: TypeError: 'this.execute' is not a function ...
Я что-то не пойму, ты меня что переводчиком хочешь нанять или учителем для себя?

http://phpclub.ru/faq/WhyForum
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
код нe работает в фаирфохе dadli Javascript под браузер 2 28.01.2012 21:18
Как создать bodyclick код royksopp Общие вопросы Javascript 8 14.10.2011 16:39
код странно отрабатывает комбинацию клавиш ffx Общие вопросы Javascript 4 20.01.2011 10:58
Opera отдаёт неправильный код функциональных клавиш. NT Man Opera, Safari и др. 1 19.01.2010 02:45
Как узнать динамический код страницы? gosha13 Общие вопросы Javascript 5 27.07.2009 13:31