UNPKG

periodicjs.ext.asyncadmin

Version:

An authentication extension for periodicjs that uses passport to authenticate user sessions.

310 lines (270 loc) 11.8 kB
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>JSDoc: Source: resources/js/datalist.js</title> <script src="scripts/prettify/prettify.js"> </script> <script src="scripts/prettify/lang-css.js"> </script> <!--[if lt IE 9]> <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script> <![endif]--> <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css"> <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css"> </head> <body> <div id="main"> <h1 class="page-title">Source: resources/js/datalist.js</h1> <section> <article> <pre class="prettyprint source linenums"><code>'use strict'; var util = require('util'), events = require('events'), classie = require('classie'), extend = require('util-extend'), request = require('superagent'), Bindie = require('bindie'); var get_checkbox_template = function () { return document.querySelector('#compose_taxonomies_template').innerHTML; //returnTemplateHTML; }; var makeNiceName = function (makenicename) { return makenicename.replace(/[^a-z0-9]/gi, '-'); }; /** * A module that represents a tsdatalist object, a componentTab is a page composition tool. * @{@link https://github.com/typesettin/tsdatalist} * @author Yaw Joseph Etse * @copyright Copyright (c) 2014 Typesettin. All rights reserved. * @license MIT * @constructor tsdatalist * @requires module:events * @requires module:util-extend * @requires module:util * @param {object} options configuration options * @example tsdatalist_id: token(), push_state_support: true, replacecallback: function (data) { console.log(data); }, popcallback: function (data) { console.log(data); }, pushcallback: function (data) { console.log(data); } */ var tsdatalist = function (options) { events.EventEmitter.call(this); var defaultOptions = { element: {}, dataitems: {} }; this.options = extend(defaultOptions, options); this.init = this.__init; this.init(); // this.addBinder = this._addBinder; }; util.inherits(tsdatalist, events.EventEmitter); tsdatalist.prototype.__updateBindie = function () { var new_data_items = this.options.dataitems; this.options.datalistbindie.update({ data: { dataitems: { dataelements: new_data_items } } }); }; var get_data_element_doc = function (options) { var data = options.data, ajaxprop = options.ajaxprop, returnObject = { id: data._id, name: data.name, title: data.title, checkboxname: ajaxprop, source_data: options.data }; return returnObject; }; var get_generic_doc = function (options) { var dataobjtouse = options.data; // console.log('dataobjtouse', dataobjtouse); dataobjtouse.name = (dataobjtouse.username) ? dataobjtouse.username : dataobjtouse.name; dataobjtouse.title = (dataobjtouse.username) ? dataobjtouse.username : dataobjtouse.title; return dataobjtouse; }; tsdatalist.prototype.__addValueToDataList = function () { var _csrfToken = document.querySelector('input[name="_csrf"]'); this.options.inputelement.disabled = 'disabled'; request .post(this.options.ajaxhref + '/' + makeNiceName(this.options.inputelement.value)) .set({ _csrf: _csrfToken.value, Accept: 'application/json' }) .send({ format: 'json', _csrf: _csrfToken.value, title: this.options.inputelement.value }) .query({ format: 'json', }) .withCredentials() .end(function (err, res) { this.options.inputelement.removeAttribute('disabled'); if (err) { if (window.showErrorNotificaton) { window.showErrorNotificaton({ message: err.message }); } else { console.error(err); } } else if (res.body.error) { window.showErrorNotificaton({ message: res.body.error }); } else if (res.body.data &amp;&amp; res.body.data.error) { window.showErrorNotificaton({ message: 'could not add data: ' + res.body.data.error }); } else { // console.log('res.body', res.body); var dataobjectresponse = (res.body.data) ? res.body.data.doc : res.body.author, dataobjtouse; if (typeof dataobjectresponse === 'undefined') { dataobjectresponse = res.body; } dataobjtouse = get_generic_doc({ data: dataobjectresponse }); this.options.dataitems[dataobjtouse._id] = get_data_element_doc({ data: dataobjtouse, ajaxprop: this.options.ajaxprop }); this.__updateBindie(); this.options.inputelement.value = ''; this.options.inputelement.focus(); // console.log('this.options', this.options); } // console.log('err, res', err, res); }.bind(this)); }; /** * sets detects support for history push/pop/replace state and can set initial data * @emits initialized */ tsdatalist.prototype.__init = function () { var datalistcontainer = document.createElement('div'), datalistelement = document.createElement('datalist'), selectelement = document.createElement('select'), checkboxcontainerelement = document.createElement('div'), inputelementcontainer = document.createElement('div'), inputelement = document.createElement('input'), submitbuttonelement = document.createElement('input'), initialinputelement = this.options.element, presetdata, initializing = true; checkboxcontainerelement.id = 'datalist-tagged-cb-container-' + this.options.element.id; classie.add(checkboxcontainerelement, 'ts-datalist-cb'); checkboxcontainerelement.addEventListener('click', function (e) { // console.log(e.target); if (classie.has(e.target, 'datalistcheckbox')) { if (e.target.checked === false) { delete this.options.dataitems[e.target.value]; this.__updateBindie(); } // console.log('e.target.checked', e.target.checked); } }.bind(this), false); this.options.parentElement = this.options.element.parentElement; this.options.ajaxprop = this.options.element.getAttribute('data-ajax-prop'); this.options.elementid = this.options.element.id; this.options.inputelement = inputelement; this.options.ajaxhref = this.options.element.getAttribute('data-ajax-source'); inputelementcontainer.setAttribute('class', 'ts-row ts-form-row'); inputelement.setAttribute('class', 'ts-col-span8 ts-button'); inputelement.id = this.options.element.id; inputelement.setAttribute('placeholder', this.options.element.getAttribute('placeholder')); inputelement.setAttribute('data-bindiecallback', initialinputelement.getAttribute('data-bindiecallback')); inputelement.setAttribute('data-ajax-setdata-variable', this.options.element.getAttribute('data-ajax-setdata-variable')); inputelement.setAttribute('data-ajax-formie', this.options.element.getAttribute('data-ajax-formie')); inputelement.addEventListener('keydown', function (e) { if (e.which === 13 || e.keyCode === 13) { this.__addValueToDataList(); } }.bind(this), false); submitbuttonelement.setAttribute('class', 'ts-col-span4 ts-button ts-text-center'); submitbuttonelement.value = 'add'; submitbuttonelement.type = 'button'; submitbuttonelement.addEventListener('click', function () { this.__addValueToDataList(); }.bind(this), false); inputelementcontainer.appendChild(inputelement); inputelementcontainer.appendChild(submitbuttonelement); datalistelement.appendChild(selectelement); datalistcontainer.appendChild(datalistelement); datalistcontainer.appendChild(inputelementcontainer); datalistcontainer.appendChild(checkboxcontainerelement); this.options.parentElement.appendChild(datalistcontainer); this.options.parentElement.removeChild(this.options.element); this.options.formietosubmit = (this.options.inputelement.getAttribute('data-ajax-formie') &amp;&amp; this.options.inputelement.getAttribute('data-ajax-formie') !== null) ? this.options.inputelement.getAttribute('data-ajax-formie') : false; this.options.datalistbindie = new Bindie({ ejsdelimiter: '?' }); this.options.datalistbindie.addBinder({ prop: 'dataitems', elementSelector: '#' + checkboxcontainerelement.getAttribute('id'), binderType: 'template', binderTemplate: get_checkbox_template(), binderCallback: function (cbdata) { var successsubmitFunctionString = inputelement.getAttribute('data-bindiecallback'), successfn = window[successsubmitFunctionString]; // is object a function? if (typeof successfn === 'function') { successfn(cbdata); } if (this.options.formietosubmit &amp;&amp; initializing === false &amp;&amp; window.AdminFormies[this.options.formietosubmit]) { window.AdminFormies[this.options.formietosubmit].submit(); } }.bind(this) }); if (this.options.inputelement.getAttribute('data-ajax-setdata-variable')) { presetdata = window[this.options.inputelement.getAttribute('data-ajax-setdata-variable')]; if (presetdata) { for (var z = 0; z &lt; presetdata.length; z++) { this.options.dataitems[presetdata[z]._id] = get_data_element_doc({ data: get_generic_doc({ data: presetdata[z] }), ajaxprop: this.options.ajaxprop }); } this.__updateBindie(); } } initializing = false; this.emit('initialized'); }; module.exports = tsdatalist; </code></pre> </article> </section> </div> <nav> <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-authController.html">authController</a></li><li><a href="module-settingsController.html">settingsController</a></li><li><a href="module-userroleController.html">userroleController</a></li><li><a href="periodicjs.ext.module_admin.html">admin</a></li></ul><h3>Classes</h3><ul><li><a href="filterlist.html">filterlist</a></li><li><a href="sortlist.html">sortlist</a></li><li><a href="StylieTextEditor.html">StylieTextEditor</a></li><li><a href="tsdatalist.html">tsdatalist</a></li><li><a href="tsmedialist.html">tsmedialist</a></li><li><a href="tstagmanager.html">tstagmanager</a></li></ul><h3>Global</h3><ul><li><a href="global.html#get_edit_page">get_edit_page</a></li><li><a href="global.html#get_index_page">get_index_page</a></li><li><a href="global.html#get_new_page">get_new_page</a></li><li><a href="global.html#get_show_page">get_show_page</a></li><li><a href="global.html#getHomepageStats">getHomepageStats</a></li><li><a href="global.html#getMarkdownReleases">getMarkdownReleases</a></li><li><a href="global.html#index">index</a></li><li><a href="global.html#load_app_settings">load_app_settings</a></li><li><a href="global.html#load_extension_settings">load_extension_settings</a></li><li><a href="global.html#load_theme_settings">load_theme_settings</a></li><li><a href="global.html#restart_app">restart_app</a></li><li><a href="global.html#sendSettingEmail">sendSettingEmail</a></li><li><a href="global.html#settings_faq">settings_faq</a></li><li><a href="global.html#settings_index">settings_index</a></li><li><a href="global.html#show">show</a></li><li><a href="global.html#styleWindowResizeEventHandler">styleWindowResizeEventHandler</a></li><li><a href="global.html#update_app">update_app</a></li><li><a href="global.html#update_app_settings">update_app_settings</a></li><li><a href="global.html#update_config_json_files">update_config_json_files</a></li><li><a href="global.html#update_ext_filedata">update_ext_filedata</a></li><li><a href="global.html#update_theme_filedata">update_theme_filedata</a></li><li><a href="global.html#update_theme_settings">update_theme_settings</a></li><li><a href="global.html#userrole_new">userrole_new</a></li></ul> </nav> <br class="clear"> <footer> Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Wed Jun 15 2016 16:57:18 GMT-0400 (EDT) </footer> <script> prettyPrint(); </script> <script src="scripts/linenumber.js"> </script> </body> </html>