/** * Dispatch a DOMNodeInsertedIntoDocument/DOMNodeRemovedFromDocument event * * \param doc The document object * \param et The EventTarget object * \param type "DOMNodeInserted" or "DOMNodeRemoved" * \param success Whether this event's default action get called * \return DOM_NO_ERR on success, appropriate dom_exception on failure. */ dom_exception __dom_dispatch_node_change_document_event(dom_document *doc, dom_event_target *et, dom_mutation_type change, bool *success) { struct dom_mutation_event *evt; dom_string *type = NULL; dom_exception err; err = _dom_mutation_event_create(doc, &evt); if (err != DOM_NO_ERR) return err; if (change == DOM_MUTATION_ADDITION) { type = dom_string_ref(doc->_memo_domnodeinsertedintodocument); } else if (change == DOM_MUTATION_REMOVAL) { type = dom_string_ref(doc->_memo_domnoderemovedfromdocument); } else { assert("Should never be here" == NULL); } /* Initialise the event with corresponding parameters */ err = dom_mutation_event_init(evt, type, true, false, NULL, NULL, NULL, NULL, change); dom_string_unref(type); if (err != DOM_NO_ERR) goto cleanup; err = dom_event_target_dispatch_event(et, evt, success); if (err != DOM_NO_ERR) goto cleanup; cleanup: _dom_mutation_event_destroy(evt); return err; }
/** * Dispatch a DOMNodeInserted/DOMNodeRemoved event * * \param doc The document object * \param et The EventTarget object * \param type "DOMNodeInserted" or "DOMNodeRemoved" * \param related The parent of the removed/inserted node * \param success Whether this event's default action get called * \return DOM_NO_ERR on success, appropriate dom_exception on failure. */ dom_exception __dom_dispatch_node_change_event(dom_document *doc, dom_event_target *et, dom_event_target *related, dom_mutation_type change, bool *success) { struct dom_mutation_event *evt; dom_string *type = NULL; dom_exception err; err = _dom_mutation_event_create(doc, &evt); if (err != DOM_NO_ERR) return err; if (change == DOM_MUTATION_ADDITION) { err = dom_string_create((const uint8_t *) "DOMNodeInserted", SLEN("DOMNodeInserted"), &type); if (err != DOM_NO_ERR) goto cleanup; } else if (change == DOM_MUTATION_REMOVAL) { err = dom_string_create((const uint8_t *) "DOMNodeRemoval", SLEN("DOMNodeRemoved"), &type); if (err != DOM_NO_ERR) goto cleanup; } else { assert("Should never be here" == NULL); } /* Initialise the event with corresponding parameters */ err = dom_mutation_event_init(evt, type, true, false, related, NULL, NULL, NULL, change); dom_string_unref(type); if (err != DOM_NO_ERR) { goto cleanup; } err = dom_event_target_dispatch_event(et, evt, success); if (err != DOM_NO_ERR) goto cleanup; cleanup: _dom_mutation_event_destroy(evt); return err; }