From 8dfbc904e77079188dcba082268193c20dc718e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20Ant=C3=BAnez=20Tar=C3=ADn?= Date: Fri, 18 Oct 2019 13:46:19 +0100 Subject: [PATCH] Show new element on the first row (title) --- extend.php | 1 + js/dist/admin.js.map | 2 +- js/dist/forum.js.map | 2 +- resources/less/_extension.less | 21 +++++++++++++++++++ resources/less/_variables-flarum.less | 9 ++++++++ resources/less/_variables-gg.less | 30 +++++++++++++++++++++++++++ resources/less/forum.less | 3 +++ 7 files changed, 66 insertions(+), 2 deletions(-) create mode 100644 resources/less/_extension.less create mode 100644 resources/less/_variables-flarum.less create mode 100644 resources/less/_variables-gg.less create mode 100644 resources/less/forum.less diff --git a/extend.php b/extend.php index 88aeebe..31af225 100644 --- a/extend.php +++ b/extend.php @@ -19,6 +19,7 @@ return [ (new Extend\Frontend('forum')) ->js(__DIR__.'/js/dist/forum.js') + ->css(__DIR__.'/resources/less/forum.less') ->route('/drafts', 'fof.drafts.view'), (new Extend\Frontend('admin')) diff --git a/js/dist/admin.js.map b/js/dist/admin.js.map index 0d1cd07..7acd7aa 100644 --- a/js/dist/admin.js.map +++ b/js/dist/admin.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://@fof/drafts/webpack/bootstrap","webpack://@fof/drafts/external \"flarum.core.compat['app']\"","webpack://@fof/drafts/external \"flarum.core.compat['components/PermissionGrid']\"","webpack://@fof/drafts/./src/admin/index.js","webpack://@fof/drafts/external \"flarum.core.compat['extend']\""],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","flarum","core","compat","app","initializers","add","extend","PermissionGrid","items","icon","label","translator","trans","permission"],"mappings":"2BACE,IAAIA,EAAmB,GAGvB,SAASC,EAAoBC,GAG5B,GAAGF,EAAiBE,GACnB,OAAOF,EAAiBE,GAAUC,QAGnC,IAAIC,EAASJ,EAAiBE,GAAY,CACzCG,EAAGH,EACHI,GAAG,EACHH,QAAS,IAUV,OANAI,EAAQL,GAAUM,KAAKJ,EAAOD,QAASC,EAAQA,EAAOD,QAASF,GAG/DG,EAAOE,GAAI,EAGJF,EAAOD,QA0Df,OArDAF,EAAoBQ,EAAIF,EAGxBN,EAAoBS,EAAIV,EAGxBC,EAAoBU,EAAI,SAASR,EAASS,EAAMC,GAC3CZ,EAAoBa,EAAEX,EAASS,IAClCG,OAAOC,eAAeb,EAASS,EAAM,CAAEK,YAAY,EAAMC,IAAKL,KAKhEZ,EAAoBkB,EAAI,SAAShB,GACX,oBAAXiB,QAA0BA,OAAOC,aAC1CN,OAAOC,eAAeb,EAASiB,OAAOC,YAAa,CAAEC,MAAO,WAE7DP,OAAOC,eAAeb,EAAS,aAAc,CAAEmB,OAAO,KAQvDrB,EAAoBsB,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQrB,EAAoBqB,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,iBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAKX,OAAOY,OAAO,MAGvB,GAFA1B,EAAoBkB,EAAEO,GACtBX,OAAOC,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOrB,EAAoBU,EAAEe,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,IAAQC,KAAK,KAAMD,IAC9I,OAAOF,GAIRzB,EAAoB6B,EAAI,SAAS1B,GAChC,IAAIS,EAAST,GAAUA,EAAOqB,WAC7B,WAAwB,OAAOrB,EAAgB,SAC/C,WAA8B,OAAOA,GAEtC,OADAH,EAAoBU,EAAEE,EAAQ,IAAKA,GAC5BA,GAIRZ,EAAoBa,EAAI,SAASiB,EAAQC,GAAY,OAAOjB,OAAOkB,UAAUC,eAAe1B,KAAKuB,EAAQC,IAGzG/B,EAAoBkC,EAAI,GAIjBlC,EAAoBA,EAAoBmC,EAAI,I,kBClFrDhC,EAAOD,QAAUkC,OAAOC,KAAKC,OAAY,K,iBCAzCnC,EAAOD,QAAUkC,OAAOC,KAAKC,OAAO,8B,mFCepCC,IAAIC,aAAaC,IAAI,uBAAwB,SAAAF,GACzCG,iBAAOC,IAAeX,UAAW,aAAc,SAAAY,GAC3CA,EAAMH,IAAI,mBAAoB,CAC1BI,KAAM,aACNC,MAAOP,EAAIQ,WAAWC,MAAM,sCAC5BC,WAAY,yB,gBCpBxB9C,EAAOD,QAAUkC,OAAOC,KAAKC,OAAe","file":"admin.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 19);\n","module.exports = flarum.core.compat['app'];","module.exports = flarum.core.compat['components/PermissionGrid'];","/*\r\n *\r\n * This file is part of fof/drafts.\r\n *\r\n * Copyright (c) 2019 FriendsOfFlarum.\r\n *\r\n * For the full copyright and license information, please view the LICENSE.md\r\n * file that was distributed with this source code.\r\n *\r\n */\r\n\r\nimport app from 'flarum/app';\r\nimport { extend } from 'flarum/extend';\r\nimport PermissionGrid from 'flarum/components/PermissionGrid';\r\n\r\napp.initializers.add('fof-username-request', app => {\r\n extend(PermissionGrid.prototype, 'startItems', items => {\r\n items.add('fof-draft-create', {\r\n icon: 'fa fa-edit',\r\n label: app.translator.trans('fof-drafts.admin.permissions.start'),\r\n permission: 'user.saveDrafts',\r\n });\r\n });\r\n});\r\n","module.exports = flarum.core.compat['extend'];"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://@fof/drafts/webpack/bootstrap","webpack://@fof/drafts/external \"flarum.core.compat['app']\"","webpack://@fof/drafts/external \"flarum.core.compat['components/PermissionGrid']\"","webpack://@fof/drafts/./src/admin/index.js","webpack://@fof/drafts/external \"flarum.core.compat['extend']\""],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","flarum","core","compat","app","initializers","add","extend","PermissionGrid","items","icon","label","translator","trans","permission"],"mappings":"2BACE,IAAIA,EAAmB,GAGvB,SAASC,EAAoBC,GAG5B,GAAGF,EAAiBE,GACnB,OAAOF,EAAiBE,GAAUC,QAGnC,IAAIC,EAASJ,EAAiBE,GAAY,CACzCG,EAAGH,EACHI,GAAG,EACHH,QAAS,IAUV,OANAI,EAAQL,GAAUM,KAAKJ,EAAOD,QAASC,EAAQA,EAAOD,QAASF,GAG/DG,EAAOE,GAAI,EAGJF,EAAOD,QA0Df,OArDAF,EAAoBQ,EAAIF,EAGxBN,EAAoBS,EAAIV,EAGxBC,EAAoBU,EAAI,SAASR,EAASS,EAAMC,GAC3CZ,EAAoBa,EAAEX,EAASS,IAClCG,OAAOC,eAAeb,EAASS,EAAM,CAAEK,YAAY,EAAMC,IAAKL,KAKhEZ,EAAoBkB,EAAI,SAAShB,GACX,oBAAXiB,QAA0BA,OAAOC,aAC1CN,OAAOC,eAAeb,EAASiB,OAAOC,YAAa,CAAEC,MAAO,WAE7DP,OAAOC,eAAeb,EAAS,aAAc,CAAEmB,OAAO,KAQvDrB,EAAoBsB,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQrB,EAAoBqB,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,iBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAKX,OAAOY,OAAO,MAGvB,GAFA1B,EAAoBkB,EAAEO,GACtBX,OAAOC,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOrB,EAAoBU,EAAEe,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,IAAQC,KAAK,KAAMD,IAC9I,OAAOF,GAIRzB,EAAoB6B,EAAI,SAAS1B,GAChC,IAAIS,EAAST,GAAUA,EAAOqB,WAC7B,WAAwB,OAAOrB,EAAgB,SAC/C,WAA8B,OAAOA,GAEtC,OADAH,EAAoBU,EAAEE,EAAQ,IAAKA,GAC5BA,GAIRZ,EAAoBa,EAAI,SAASiB,EAAQC,GAAY,OAAOjB,OAAOkB,UAAUC,eAAe1B,KAAKuB,EAAQC,IAGzG/B,EAAoBkC,EAAI,GAIjBlC,EAAoBA,EAAoBmC,EAAI,I,kBClFrDhC,EAAOD,QAAUkC,OAAOC,KAAKC,OAAY,K,iBCAzCnC,EAAOD,QAAUkC,OAAOC,KAAKC,OAAO,8B,mFCepCC,IAAIC,aAAaC,IAAI,uBAAwB,SAAAF,GACzCG,iBAAOC,IAAeX,UAAW,aAAc,SAAAY,GAC3CA,EAAMH,IAAI,mBAAoB,CAC1BI,KAAM,aACNC,MAAOP,EAAIQ,WAAWC,MAAM,sCAC5BC,WAAY,yB,gBCpBxB9C,EAAOD,QAAUkC,OAAOC,KAAKC,OAAe","file":"admin.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 19);\n","module.exports = flarum.core.compat['app'];","module.exports = flarum.core.compat['components/PermissionGrid'];","/*\n *\n * This file is part of fof/drafts.\n *\n * Copyright (c) 2019 FriendsOfFlarum.\n *\n * For the full copyright and license information, please view the LICENSE.md\n * file that was distributed with this source code.\n *\n */\n\nimport app from 'flarum/app';\nimport { extend } from 'flarum/extend';\nimport PermissionGrid from 'flarum/components/PermissionGrid';\n\napp.initializers.add('fof-username-request', app => {\n extend(PermissionGrid.prototype, 'startItems', items => {\n items.add('fof-draft-create', {\n icon: 'fa fa-edit',\n label: app.translator.trans('fof-drafts.admin.permissions.start'),\n permission: 'user.saveDrafts',\n });\n });\n});\n","module.exports = flarum.core.compat['extend'];"],"sourceRoot":""} \ No newline at end of file diff --git a/js/dist/forum.js.map b/js/dist/forum.js.map index 1164a63..8f324a0 100644 --- a/js/dist/forum.js.map +++ b/js/dist/forum.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://@fof/drafts/webpack/bootstrap","webpack://@fof/drafts/external \"flarum.core.compat['app']\"","webpack://@fof/drafts/external \"flarum.core.compat['Model']\"","webpack://@fof/drafts/external \"flarum.core.compat['extend']\"","webpack://@fof/drafts/external \"flarum.core.compat['components/DiscussionComposer']\"","webpack://@fof/drafts/external \"flarum.core.compat['components/Button']\"","webpack://@fof/drafts/external \"flarum.core.compat['models/User']\"","webpack://@fof/drafts/external \"flarum.core.compat['utils/mixin']\"","webpack://@fof/drafts/external \"flarum.core.compat['components/Page']\"","webpack://@fof/drafts/external \"flarum.core.compat['Component']\"","webpack://@fof/drafts/external \"flarum.core.compat['components/LoadingIndicator']\"","webpack://@fof/drafts/external \"flarum.core.compat['helpers/avatar']\"","webpack://@fof/drafts/external \"flarum.core.compat['helpers/icon']\"","webpack://@fof/drafts/external \"flarum.core.compat['helpers/humanTime']\"","webpack://@fof/drafts/external \"flarum.core.compat['utils/string']\"","webpack://@fof/drafts/external \"flarum.core.compat['components/HeaderSecondary']\"","webpack://@fof/drafts/external \"flarum.core.compat['components/NotificationsDropdown']\"","webpack://@fof/drafts/external \"flarum.core.compat['components/Alert']\"","webpack://@fof/drafts/./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","webpack://@fof/drafts/./src/forum/models/Draft.js","webpack://@fof/drafts/./src/forum/components/DraftsList.js","webpack://@fof/drafts/./src/forum/components/DraftsPage.js","webpack://@fof/drafts/./src/forum/components/DraftsDropdown.js","webpack://@fof/drafts/./src/forum/index.js","webpack://@fof/drafts/./src/forum/addDraftsDropdown.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","flarum","core","compat","_inheritsLoose","subClass","superClass","constructor","__proto__","Draft","mixin","Model","user","hasOne","content","attribute","title","relationships","updatedAt","transformDate","FlagList","init","this","loading","config","isIntialized","$","on","event","stopPropagation","view","drafts","app","cache","className","translator","trans","length","sort","a","b","map","draft","onclick","showComposer","avatar","icon","humanTime","Button","component","style","deleteDraft","truncate","LoadingIndicator","window","confirm","some","cacheDraft","id","splice","composer","hide","deferred","data","originalContent","session","keys","forEach","relationship","model","store","getById","type","DiscussionComposer","load","show","resolve","promise","redraw","find","then","response","payload","Component","DraftsPage","history","push","list","DraftsList","bodyClass","render","Page","DraftsDropdown","initProps","props","label","goToRoute","route","getUnreadCount","getNewCount","NotificationsDropdown","initializers","add","models","User","hasMany","routes","path","extend","items","forum","attributes","save","now","Date","toString","createRecord","alerts","successAlert","Alert","children","includes","prop","HeaderSecondary"],"mappings":"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","file":"forum.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 18);\n","module.exports = flarum.core.compat['app'];","module.exports = flarum.core.compat['Model'];","module.exports = flarum.core.compat['extend'];","module.exports = flarum.core.compat['components/DiscussionComposer'];","module.exports = flarum.core.compat['components/Button'];","module.exports = flarum.core.compat['models/User'];","module.exports = flarum.core.compat['utils/mixin'];","module.exports = flarum.core.compat['components/Page'];","module.exports = flarum.core.compat['Component'];","module.exports = flarum.core.compat['components/LoadingIndicator'];","module.exports = flarum.core.compat['helpers/avatar'];","module.exports = flarum.core.compat['helpers/icon'];","module.exports = flarum.core.compat['helpers/humanTime'];","module.exports = flarum.core.compat['utils/string'];","module.exports = flarum.core.compat['components/HeaderSecondary'];","module.exports = flarum.core.compat['components/NotificationsDropdown'];","module.exports = flarum.core.compat['components/Alert'];","export default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}","/*\r\n *\r\n * This file is part of fof/drafts.\r\n *\r\n * Copyright (c) 2019 FriendsOfFlarum.\r\n *\r\n * For the full copyright and license information, please view the LICENSE.md\r\n * file that was distributed with this source code.\r\n *\r\n */\r\nimport Model from 'flarum/Model';\r\nimport mixin from 'flarum/utils/mixin';\r\n\r\nexport default class Draft extends mixin(Model, {\r\n user: Model.hasOne('user'),\r\n content: Model.attribute('content'),\r\n title: Model.attribute('title'),\r\n relationships: Model.attribute('relationships'),\r\n updatedAt: Model.attribute('updatedAt', Model.transformDate),\r\n}) {}\r\n","/*\r\n *\r\n * This file is part of fof/drafts.\r\n *\r\n * Copyright (c) 2019 FriendsOfFlarum.\r\n *\r\n * For the full copyright and license information, please view the LICENSE.md\r\n * file that was distributed with this source code.\r\n *\r\n */\r\n\r\nimport Component from 'flarum/Component';\r\nimport LoadingIndicator from 'flarum/components/LoadingIndicator';\r\nimport DiscussionComposer from 'flarum/components/DiscussionComposer';\r\nimport avatar from 'flarum/helpers/avatar';\r\nimport icon from 'flarum/helpers/icon';\r\nimport humanTime from 'flarum/helpers/humanTime';\r\nimport { truncate } from 'flarum/utils/string';\r\nimport Button from 'flarum/components/Button';\r\n\r\nexport default class FlagList extends Component {\r\n init() {\r\n this.loading = false;\r\n }\r\n\r\n config(isIntialized) {\r\n if (!isIntialized) return;\r\n\r\n $('.draft--delete').on('click tap', function(event) {\r\n event.stopPropagation();\r\n });\r\n }\r\n\r\n view() {\r\n const drafts = app.cache.drafts || [];\r\n\r\n return (\r\n
\r\n
\r\n

{app.translator.trans('fof-drafts.forum.dropdown.title')}

\r\n
\r\n
\r\n \r\n
\r\n
\r\n );\r\n }\r\n\r\n deleteDraft(draft) {\r\n this.loading = true;\r\n\r\n if (!window.confirm(app.translator.trans('fof-drafts.forum.dropdown.alert'))) return;\r\n\r\n draft.delete();\r\n app.cache.drafts.some((cacheDraft, i) => {\r\n if (cacheDraft.id() === draft.id()) {\r\n app.cache.drafts.splice(i, 1);\r\n }\r\n });\r\n app.composer.hide();\r\n\r\n this.loading = false;\r\n }\r\n\r\n showComposer(draft) {\r\n if (this.loading) return;\r\n\r\n const deferred = m.deferred();\r\n\r\n var data = {\r\n originalContent: draft.content(),\r\n title: draft.title(),\r\n user: app.session.user,\r\n draft,\r\n };\r\n\r\n if (draft.relationships()) {\r\n Object.keys(draft.relationships()).forEach(relationship => {\r\n draft.relationships()[relationship].data.map((model, i) => {\r\n draft.relationships()[relationship].data[i] = app.store.getById(model.type, model.id);\r\n });\r\n data[relationship] = draft.relationships()[relationship].data;\r\n });\r\n }\r\n\r\n var component = new DiscussionComposer(data);\r\n\r\n app.composer.load(component);\r\n app.composer.show();\r\n\r\n deferred.resolve(component);\r\n\r\n return deferred.promise;\r\n }\r\n\r\n load() {\r\n if (app.cache.drafts) {\r\n return;\r\n }\r\n\r\n this.loading = true;\r\n m.redraw();\r\n\r\n app.store\r\n .find('drafts')\r\n .then(response => {\r\n delete response.payload;\r\n app.cache.drafts = response;\r\n })\r\n .catch(() => {})\r\n .then(() => {\r\n this.loading = false;\r\n m.redraw();\r\n });\r\n }\r\n}\r\n","/*\r\n *\r\n * This file is part of fof/drafts.\r\n *\r\n * Copyright (c) 2019 FriendsOfFlarum.\r\n *\r\n * For the full copyright and license information, please view the LICENSE.md\r\n * file that was distributed with this source code.\r\n *\r\n */\r\n\r\nimport Page from 'flarum/components/Page';\r\n\r\nimport DraftsList from './DraftsList';\r\n\r\nexport default class DraftsPage extends Page {\r\n init() {\r\n super.init();\r\n\r\n app.history.push('drafts');\r\n\r\n this.list = new DraftsList();\r\n this.list.load();\r\n\r\n this.bodyClass = 'App--drafts';\r\n }\r\n\r\n view() {\r\n return
{this.list.render()}
;\r\n }\r\n}\r\n","/*\r\n *\r\n * This file is part of fof/drafts.\r\n *\r\n * Copyright (c) 2019 FriendsOfFlarum.\r\n *\r\n * For the full copyright and license information, please view the LICENSE.md\r\n * file that was distributed with this source code.\r\n *\r\n */\r\n\r\nimport NotificationsDropdown from 'flarum/components/NotificationsDropdown';\r\n\r\nimport DraftsList from './DraftsList';\r\n\r\nexport default class DraftsDropdown extends NotificationsDropdown {\r\n static initProps(props) {\r\n props.label = props.label || app.translator.trans('fof-drafts.forum.dropdown.tooltip');\r\n props.icon = props.icon || 'fas fa-edit';\r\n\r\n super.initProps(props);\r\n }\r\n\r\n init() {\r\n super.init();\r\n\r\n this.list = new DraftsList();\r\n }\r\n\r\n goToRoute() {\r\n m.route(app.route('drafts'));\r\n }\r\n\r\n getUnreadCount() {\r\n if (app.cache.drafts) {\r\n return app.cache.drafts.length;\r\n }\r\n return app.session.user.drafts().length;\r\n }\r\n\r\n getNewCount() {\r\n if (app.cache.drafts) {\r\n return app.cache.drafts.length;\r\n }\r\n return app.session.user.drafts().length;\r\n }\r\n}\r\n","/*\r\n *\r\n * This file is part of fof/drafts.\r\n *\r\n * Copyright (c) 2019 FriendsOfFlarum.\r\n *\r\n * For the full copyright and license information, please view the LICENSE.md\r\n * file that was distributed with this source code.\r\n *\r\n */\r\n\r\nimport { extend } from 'flarum/extend';\r\nimport User from 'flarum/models/User';\r\nimport Model from 'flarum/Model';\r\nimport Draft from './models/Draft';\r\nimport DraftsPage from './components/DraftsPage';\r\nimport addDraftsDropdown from './addDraftsDropdown';\r\nimport DiscussionComposer from 'flarum/components/DiscussionComposer';\r\nimport Button from 'flarum/components/Button';\r\nimport Alert from 'flarum/components/Alert';\r\n\r\napp.initializers.add('fof-drafts', () => {\r\n app.store.models.drafts = Draft;\r\n User.prototype.drafts = Model.hasMany('drafts');\r\n\r\n app.routes.drafts = { path: '/drafts', component: };\r\n\r\n extend(DiscussionComposer.prototype, 'headerItems', function(items) {\r\n if (!app.forum.attribute('canSaveDrafts')) return;\r\n items.add(\r\n 'save-draft',\r\n Button.component({\r\n icon: 'fas fa-save',\r\n className: 'Button Button--icon Button--link',\r\n style: 'margin: 0 10px 2px -10px;',\r\n title: app.translator.trans('fof-drafts.forum.composer.title'),\r\n onclick: () => {\r\n if (this.draft) {\r\n delete this.draft.data.attributes.relationships;\r\n this.draft.save(this.data()).then(draft => {\r\n if (!app.cache.drafts) app.cache.drafts = [];\r\n app.cache.drafts.some((cacheDraft, i) => {\r\n if (cacheDraft.id() === draft.id()) {\r\n var now = new Date();\r\n draft.data.attributes.updatedAt = now.toString();\r\n app.cache.drafts[i] = draft;\r\n }\r\n });\r\n });\r\n } else {\r\n app.store\r\n .createRecord('drafts')\r\n .save(this.data())\r\n .then(draft => {\r\n if (!app.cache.drafts) {\r\n app.session.user.data.relationships.drafts.data.push(draft);\r\n } else {\r\n app.cache.drafts.push(draft);\r\n }\r\n m.redraw();\r\n });\r\n }\r\n app.alerts.show(\r\n (this.successAlert = new Alert({ type: 'success', children: app.translator.trans('fof-drafts.forum.composer.alert') }))\r\n );\r\n app.composer.hide();\r\n },\r\n }),\r\n 20\r\n );\r\n });\r\n\r\n extend(DiscussionComposer.prototype, 'init', function() {\r\n Object.keys(this.props).forEach(key => {\r\n if (!['originalContent', 'title', 'user'].includes(key)) {\r\n this[key] = this.props[key];\r\n } else if (key === 'title') {\r\n this.title = m.prop(this.props.title);\r\n }\r\n });\r\n });\r\n\r\n extend(DiscussionComposer.prototype, 'onsubmit', function() {\r\n if (this.draft) {\r\n this.draft.delete();\r\n\r\n app.cache.drafts.some((cacheDraft, i) => {\r\n if (cacheDraft.id() === this.draft.id()) {\r\n app.cache.drafts.splice(i, 1);\r\n }\r\n });\r\n }\r\n });\r\n\r\n addDraftsDropdown();\r\n});\r\n","/*\r\n *\r\n * This file is part of fof/drafts.\r\n *\r\n * Copyright (c) 2019 FriendsOfFlarum.\r\n *\r\n * For the full copyright and license information, please view the LICENSE.md\r\n * file that was distributed with this source code.\r\n *\r\n */\r\n\r\nimport { extend } from 'flarum/extend';\r\nimport app from 'flarum/app';\r\nimport HeaderSecondary from 'flarum/components/HeaderSecondary';\r\nimport DraftsDropdown from './components/DraftsDropdown';\r\n\r\nexport default function() {\r\n extend(HeaderSecondary.prototype, 'items', function(items) {\r\n if (!app.session.user) return;\r\n if (\r\n (app.session.user.drafts() && app.session.user.drafts().length && !app.cache.drafts) ||\r\n (app.cache.drafts && app.cache.drafts.length !== 0)\r\n ) {\r\n items.add('Drafts', , 20);\r\n }\r\n });\r\n}\r\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://@fof/drafts/webpack/bootstrap","webpack://@fof/drafts/external \"flarum.core.compat['app']\"","webpack://@fof/drafts/external \"flarum.core.compat['Model']\"","webpack://@fof/drafts/external \"flarum.core.compat['extend']\"","webpack://@fof/drafts/external \"flarum.core.compat['components/DiscussionComposer']\"","webpack://@fof/drafts/external \"flarum.core.compat['components/Button']\"","webpack://@fof/drafts/external \"flarum.core.compat['models/User']\"","webpack://@fof/drafts/external \"flarum.core.compat['utils/mixin']\"","webpack://@fof/drafts/external \"flarum.core.compat['components/Page']\"","webpack://@fof/drafts/external \"flarum.core.compat['Component']\"","webpack://@fof/drafts/external \"flarum.core.compat['components/LoadingIndicator']\"","webpack://@fof/drafts/external \"flarum.core.compat['helpers/avatar']\"","webpack://@fof/drafts/external \"flarum.core.compat['helpers/icon']\"","webpack://@fof/drafts/external \"flarum.core.compat['helpers/humanTime']\"","webpack://@fof/drafts/external \"flarum.core.compat['utils/string']\"","webpack://@fof/drafts/external \"flarum.core.compat['components/HeaderSecondary']\"","webpack://@fof/drafts/external \"flarum.core.compat['components/NotificationsDropdown']\"","webpack://@fof/drafts/external \"flarum.core.compat['components/Alert']\"","webpack://@fof/drafts/./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","webpack://@fof/drafts/./src/forum/models/Draft.js","webpack://@fof/drafts/./src/forum/components/DraftsList.js","webpack://@fof/drafts/./src/forum/components/DraftsPage.js","webpack://@fof/drafts/./src/forum/components/DraftsDropdown.js","webpack://@fof/drafts/./src/forum/index.js","webpack://@fof/drafts/./src/forum/addDraftsDropdown.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","flarum","core","compat","_inheritsLoose","subClass","superClass","constructor","__proto__","Draft","mixin","Model","user","hasOne","content","attribute","title","relationships","updatedAt","transformDate","FlagList","init","this","loading","config","isIntialized","$","on","event","stopPropagation","view","drafts","app","cache","className","translator","trans","length","sort","a","b","map","draft","onclick","showComposer","avatar","icon","humanTime","Button","component","style","deleteDraft","truncate","LoadingIndicator","window","confirm","some","cacheDraft","id","splice","composer","hide","deferred","data","originalContent","session","keys","forEach","relationship","model","store","getById","type","DiscussionComposer","load","show","resolve","promise","redraw","find","then","response","payload","Component","DraftsPage","history","push","list","DraftsList","bodyClass","render","Page","DraftsDropdown","initProps","props","label","goToRoute","route","getUnreadCount","getNewCount","NotificationsDropdown","initializers","add","models","User","hasMany","routes","path","extend","items","forum","attributes","save","now","Date","toString","createRecord","alerts","successAlert","Alert","children","includes","prop","HeaderSecondary"],"mappings":"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","file":"forum.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 18);\n","module.exports = flarum.core.compat['app'];","module.exports = flarum.core.compat['Model'];","module.exports = flarum.core.compat['extend'];","module.exports = flarum.core.compat['components/DiscussionComposer'];","module.exports = flarum.core.compat['components/Button'];","module.exports = flarum.core.compat['models/User'];","module.exports = flarum.core.compat['utils/mixin'];","module.exports = flarum.core.compat['components/Page'];","module.exports = flarum.core.compat['Component'];","module.exports = flarum.core.compat['components/LoadingIndicator'];","module.exports = flarum.core.compat['helpers/avatar'];","module.exports = flarum.core.compat['helpers/icon'];","module.exports = flarum.core.compat['helpers/humanTime'];","module.exports = flarum.core.compat['utils/string'];","module.exports = flarum.core.compat['components/HeaderSecondary'];","module.exports = flarum.core.compat['components/NotificationsDropdown'];","module.exports = flarum.core.compat['components/Alert'];","export default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}","/*\n *\n * This file is part of fof/drafts.\n *\n * Copyright (c) 2019 FriendsOfFlarum.\n *\n * For the full copyright and license information, please view the LICENSE.md\n * file that was distributed with this source code.\n *\n */\nimport Model from 'flarum/Model';\nimport mixin from 'flarum/utils/mixin';\n\nexport default class Draft extends mixin(Model, {\n user: Model.hasOne('user'),\n content: Model.attribute('content'),\n title: Model.attribute('title'),\n relationships: Model.attribute('relationships'),\n updatedAt: Model.attribute('updatedAt', Model.transformDate),\n}) {}\n","/*\n *\n * This file is part of fof/drafts.\n *\n * Copyright (c) 2019 FriendsOfFlarum.\n *\n * For the full copyright and license information, please view the LICENSE.md\n * file that was distributed with this source code.\n *\n */\n\nimport Component from 'flarum/Component';\nimport LoadingIndicator from 'flarum/components/LoadingIndicator';\nimport DiscussionComposer from 'flarum/components/DiscussionComposer';\nimport avatar from 'flarum/helpers/avatar';\nimport icon from 'flarum/helpers/icon';\nimport humanTime from 'flarum/helpers/humanTime';\nimport { truncate } from 'flarum/utils/string';\nimport Button from 'flarum/components/Button';\n\nexport default class FlagList extends Component {\n init() {\n this.loading = false;\n }\n\n config(isIntialized) {\n if (!isIntialized) return;\n\n $('.draft--delete').on('click tap', function(event) {\n event.stopPropagation();\n });\n }\n\n view() {\n const drafts = app.cache.drafts || [];\n\n return (\n
\n
\n

{app.translator.trans('fof-drafts.forum.dropdown.title')}

\n
\n
\n \n
\n
\n );\n }\n\n deleteDraft(draft) {\n this.loading = true;\n\n if (!window.confirm(app.translator.trans('fof-drafts.forum.dropdown.alert'))) return;\n\n draft.delete();\n app.cache.drafts.some((cacheDraft, i) => {\n if (cacheDraft.id() === draft.id()) {\n app.cache.drafts.splice(i, 1);\n }\n });\n app.composer.hide();\n\n this.loading = false;\n }\n\n showComposer(draft) {\n if (this.loading) return;\n\n const deferred = m.deferred();\n\n var data = {\n originalContent: draft.content(),\n title: draft.title(),\n user: app.session.user,\n draft,\n };\n\n if (draft.relationships()) {\n Object.keys(draft.relationships()).forEach(relationship => {\n draft.relationships()[relationship].data.map((model, i) => {\n draft.relationships()[relationship].data[i] = app.store.getById(model.type, model.id);\n });\n data[relationship] = draft.relationships()[relationship].data;\n });\n }\n\n var component = new DiscussionComposer(data);\n\n app.composer.load(component);\n app.composer.show();\n\n deferred.resolve(component);\n\n return deferred.promise;\n }\n\n load() {\n if (app.cache.drafts) {\n return;\n }\n\n this.loading = true;\n m.redraw();\n\n app.store\n .find('drafts')\n .then(response => {\n delete response.payload;\n app.cache.drafts = response;\n })\n .catch(() => {})\n .then(() => {\n this.loading = false;\n m.redraw();\n });\n }\n}\n","/*\n *\n * This file is part of fof/drafts.\n *\n * Copyright (c) 2019 FriendsOfFlarum.\n *\n * For the full copyright and license information, please view the LICENSE.md\n * file that was distributed with this source code.\n *\n */\n\nimport Page from 'flarum/components/Page';\n\nimport DraftsList from './DraftsList';\n\nexport default class DraftsPage extends Page {\n init() {\n super.init();\n\n app.history.push('drafts');\n\n this.list = new DraftsList();\n this.list.load();\n\n this.bodyClass = 'App--drafts';\n }\n\n view() {\n return
{this.list.render()}
;\n }\n}\n","/*\n *\n * This file is part of fof/drafts.\n *\n * Copyright (c) 2019 FriendsOfFlarum.\n *\n * For the full copyright and license information, please view the LICENSE.md\n * file that was distributed with this source code.\n *\n */\n\nimport NotificationsDropdown from 'flarum/components/NotificationsDropdown';\n\nimport DraftsList from './DraftsList';\n\nexport default class DraftsDropdown extends NotificationsDropdown {\n static initProps(props) {\n props.label = props.label || app.translator.trans('fof-drafts.forum.dropdown.tooltip');\n props.icon = props.icon || 'fas fa-edit';\n\n super.initProps(props);\n }\n\n init() {\n super.init();\n\n this.list = new DraftsList();\n }\n\n goToRoute() {\n m.route(app.route('drafts'));\n }\n\n getUnreadCount() {\n if (app.cache.drafts) {\n return app.cache.drafts.length;\n }\n return app.session.user.drafts().length;\n }\n\n getNewCount() {\n if (app.cache.drafts) {\n return app.cache.drafts.length;\n }\n return app.session.user.drafts().length;\n }\n}\n","/*\n *\n * This file is part of fof/drafts.\n *\n * Copyright (c) 2019 FriendsOfFlarum.\n *\n * For the full copyright and license information, please view the LICENSE.md\n * file that was distributed with this source code.\n *\n */\n\nimport { extend } from 'flarum/extend';\nimport User from 'flarum/models/User';\nimport Model from 'flarum/Model';\nimport Draft from './models/Draft';\nimport DraftsPage from './components/DraftsPage';\nimport addDraftsDropdown from './addDraftsDropdown';\nimport DiscussionComposer from 'flarum/components/DiscussionComposer';\nimport Button from 'flarum/components/Button';\nimport Alert from 'flarum/components/Alert';\n\napp.initializers.add('fof-drafts', () => {\n app.store.models.drafts = Draft;\n User.prototype.drafts = Model.hasMany('drafts');\n\n app.routes.drafts = { path: '/drafts', component: };\n\n extend(DiscussionComposer.prototype, 'headerItems', function(items) {\n if (!app.forum.attribute('canSaveDrafts')) return;\n items.add(\n 'save-draft',\n Button.component({\n icon: 'fas fa-save',\n className: 'Button Button--icon Button--link',\n style: 'margin: 0 10px 2px -10px;',\n title: app.translator.trans('fof-drafts.forum.composer.title'),\n onclick: () => {\n if (this.draft) {\n delete this.draft.data.attributes.relationships;\n this.draft.save(this.data()).then(draft => {\n if (!app.cache.drafts) app.cache.drafts = [];\n app.cache.drafts.some((cacheDraft, i) => {\n if (cacheDraft.id() === draft.id()) {\n var now = new Date();\n draft.data.attributes.updatedAt = now.toString();\n app.cache.drafts[i] = draft;\n }\n });\n });\n } else {\n app.store\n .createRecord('drafts')\n .save(this.data())\n .then(draft => {\n if (!app.cache.drafts) {\n app.session.user.data.relationships.drafts.data.push(draft);\n } else {\n app.cache.drafts.push(draft);\n }\n m.redraw();\n });\n }\n app.alerts.show(\n (this.successAlert = new Alert({ type: 'success', children: app.translator.trans('fof-drafts.forum.composer.alert') }))\n );\n app.composer.hide();\n },\n }),\n 20\n );\n });\n\n extend(DiscussionComposer.prototype, 'init', function() {\n Object.keys(this.props).forEach(key => {\n if (!['originalContent', 'title', 'user'].includes(key)) {\n this[key] = this.props[key];\n } else if (key === 'title') {\n this.title = m.prop(this.props.title);\n }\n });\n });\n\n extend(DiscussionComposer.prototype, 'onsubmit', function() {\n if (this.draft) {\n this.draft.delete();\n\n app.cache.drafts.some((cacheDraft, i) => {\n if (cacheDraft.id() === this.draft.id()) {\n app.cache.drafts.splice(i, 1);\n }\n });\n }\n });\n\n addDraftsDropdown();\n});\n","/*\n *\n * This file is part of fof/drafts.\n *\n * Copyright (c) 2019 FriendsOfFlarum.\n *\n * For the full copyright and license information, please view the LICENSE.md\n * file that was distributed with this source code.\n *\n */\n\nimport { extend } from 'flarum/extend';\nimport app from 'flarum/app';\nimport HeaderSecondary from 'flarum/components/HeaderSecondary';\nimport DraftsDropdown from './components/DraftsDropdown';\n\nexport default function() {\n extend(HeaderSecondary.prototype, 'items', function(items) {\n if (!app.session.user) return;\n if (\n (app.session.user.drafts() && app.session.user.drafts().length && !app.cache.drafts) ||\n (app.cache.drafts && app.cache.drafts.length !== 0)\n ) {\n items.add('Drafts', , 20);\n }\n });\n}\n"],"sourceRoot":""} \ No newline at end of file diff --git a/resources/less/_extension.less b/resources/less/_extension.less new file mode 100644 index 0000000..2350358 --- /dev/null +++ b/resources/less/_extension.less @@ -0,0 +1,21 @@ +// ============================================================================ +// Extension +// ============================================================================ + +@media @phone { + .item-save-draft { + display: inline-block !important; + padding: (@gg-spacer-fine - (@gg-spacer-fine / @gg-spacer-fine)) 0 0 (@gg-spacer-small - (@gg-spacer-fine / @gg-spacer-fine)) !important; + margin-right: 0 !important; + border: none; + margin-top: @gg-spacer-tiny; + float: left; + background: @gg-color-light-green; + + .icon { + &::before { + color: @gg-color-black; + } + } + } +} diff --git a/resources/less/_variables-flarum.less b/resources/less/_variables-flarum.less new file mode 100644 index 0000000..16a09f4 --- /dev/null +++ b/resources/less/_variables-flarum.less @@ -0,0 +1,9 @@ +// ============================================================================ +// Flarum override variables +// ============================================================================ + +// Breakpoints +@screen-phone-max: (@screen-tablet - 1); +@screen-tablet: @gg-breakpoint-medium; + +@phone: ~"(max-width: @{screen-phone-max})"; diff --git a/resources/less/_variables-gg.less b/resources/less/_variables-gg.less new file mode 100644 index 0000000..3868d95 --- /dev/null +++ b/resources/less/_variables-gg.less @@ -0,0 +1,30 @@ +// ============================================================================ +// giffgaff design tokens +// ============================================================================ + +// Colours +@gg-color-black: #000000; +@gg-color-white: #ffffff; +@gg-color-light-pink: #eb5f8e; +@gg-color-light-green: #72b72a; +@gg-color-light-blue: #35adce; +@gg-color-yellow: #fcc31e; +@gg-color-dark-pink: #ae0d21; +@gg-color-dark-green: #007349; +@gg-color-dark-blue: #00528a; +@gg-color-orange: #ea5b25; +@gg-color-dove-grey: #666666; +@gg-color-alto: #d0d0d0; +@gg-color-wild-sand: #f5f5f5; +@gg-color-gallery: #ececec; + +// Breakpoints +@gg-breakpoint-medium: 768px; + +// Spacers +@gg-spacer-fine: 4px; +@gg-spacer-tiny: 8px; +@gg-spacer-small: 16px; +@gg-spacer-medium: 24px; +@gg-spacer-large: 56px; +@gg-spacer-huge: 72px; diff --git a/resources/less/forum.less b/resources/less/forum.less new file mode 100644 index 0000000..fa85546 --- /dev/null +++ b/resources/less/forum.less @@ -0,0 +1,3 @@ +@import "_variables-gg"; +@import "_variables-flarum"; +@import "_extension";